네이버의 pinpoint 를 도입하기 위해 테스트를 하려고 하던중 이었다.
pinpoint 를 설치하기 위해서는 일단 hadoop + zookeeper + hbase 를 설치해야하는 상황…
일단 hadoop 부터 zookeeper 까지는 문제 없이 설치를 완료 했다.
하지만 hbase 는 자꾸 문제가 발생 ….
일단 문제가 hbase 의 regionserver 가 구동시에 master 서버로 접속을 해서 validation 체크를 해야 하는데
자꾸 로그상으로 regionserver 에서 master 서버의 아이피를 localhost 로 보고 있는…
Exception log를 보면
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
2015-05-22 03:40:17,253 INFO org.apache.hadoop.hbase.regionserver.HRegionServer: <strong>Attempting connect to Master server at localhost,60000,1432265951634</strong> 2015-05-22 03:40:27,267 WARN org.apache.hadoop.hbase.regionserver.HRegionServer: Unable to connect to master. Retrying. Error was: java.net.ConnectException: Connection refused at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:739) at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206) at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:511) at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:481) at org.apache.hadoop.hbase.ipc.HBaseClient$Connection.setupConnection(HBaseClient.java:392) at org.apache.hadoop.hbase.ipc.HBaseClient$Connection.setupIOstreams(HBaseClient.java:438) at org.apache.hadoop.hbase.ipc.HBaseClient.getConnection(HBaseClient.java:1146) at org.apache.hadoop.hbase.ipc.HBaseClient.call(HBaseClient.java:993) at org.apache.hadoop.hbase.ipc.WritableRpcEngine$Invoker.invoke(WritableRpcEngine.java:87) at com.sun.proxy.$Proxy6.getProtocolVersion(Unknown Source) at org.apache.hadoop.hbase.ipc.WritableRpcEngine.getProxy(WritableRpcEngine.java:141) at org.apache.hadoop.hbase.ipc.HBaseRPC.waitForProxy(HBaseRPC.java:208) at org.apache.hadoop.hbase.regionserver.HRegionServer.getMaster(HRegionServer.java:2061) at org.apache.hadoop.hbase.regionserver.HRegionServer.reportForDuty(HRegionServer.java:2107) at org.apache.hadoop.hbase.regionserver.HRegionServer.run(HRegionServer.java:754) at java.lang.Thread.run(Thread.java:745) |
이런식 으로… Attempting connect to Master server at localhost,60000 을 보고 있다.
hbase 설정 파일에는
1 2 3 4 5 6 7 8 |
<property> <name>hbase.rootdir</name> <value>hdfs://namenode:9000/hbase</value> </property> <property> <name>hbase.master</name> <value>namenode</value> </property> |
분명히 마스터로 namenode 를 잡아 놨는데도 저렇게 바라보니 정말 혼란스러웠다..
구글링을 해봤지만 쓸만한 답변은 찾을수가 없었다. (대부분 위에 설정 파일처럼 hbase.master 를 설정 해보라는 것)
이 상태에서 zookeeper 로 hbase 상태를 확인해 보면
1 2 |
[zk: localhost:2181(CONNECTED) 2] get /hbase/master [] |
이렇게 아무것도 안나오는 상황…
일단은 각 regionserver 들에 HRegionServer 프로세스가 잘 뜨고 있고 namenode 인 마스터 서버에도 HMaster 가 잘뜨고
있기 때문에 결국은 남은것은 host 설정 문제 뿐 이었다… (조언을 부탁 드린 네이버 분들도 이 부분을 알려주심)
이쪽으로 구글링을 집중적으로 해보았다.
결과는 127.0.0.1 localhost 설정을 없애 보라는것
일단 /etc/hosts 내용을 보면
* 참고사항
1. 총 서버는 4대
2. 각 서버의 호스트 명은 hadoop-1, hadoop-2, hadoop-3, hadoop-4
3. 아이피는 내부 아이피 이니 해킹 시도는 꿈에도 꾸지 말것!
1 2 3 4 5 6 7 8 |
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 hadoop-1 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 hadoop-1 10.7.177.46 namenode 10.7.177.51 datanode01 snamenode 10.7.177.53 datanode02 10.7.177.57 datanode03 |
이렇게 되어있고 namenode 가 마스터 이다.
그리고 regionserver 는 datanode01 ~ 03 이다.
여기서
1 2 |
#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 hadoop-1 #::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 hadoop-1 |
이 부분을 이렇게 주석 처리 하고
1 2 |
10.7.177.46 hadoop-1 #(각 설정한 리눅스 서버 명 (호스트명)) ::1 hadoop-1 #(각 설정한 리눅스 서버 명 (호스트명)) |
이렇게 각 서버별로 서버명과 자신의 아이피를 설정해준뒤
zookeeper 클라이언트 에서 /hbase 삭제후에 다시 hbase 기동!
기동하면서 regionserver 로그를 tail 로 찍어놓고 보면
1 |
2015-05-26 14:56:54,718 INFO org.apache.hadoop.hbase.regionserver.HRegionServer: Attempting connect to Master server at <strong>hadoop-1,</strong>60000,1432619812267 |
master 서버의 주소를 의도한대로 hadoop-1로 보고 있는것을 알수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[root@hadoop-1 bin]# hbase shell HBase Shell; enter 'help<RETURN>' for list of supported commands. Type "exit<RETURN>" to leave the HBase Shell Version 0.94.27, rfb434617716493eac82b55180b0bbd653beb90bf, Thu Mar 19 06:17:55 UTC 2015 hbase(main):001:0> status 'simple' 3 live servers snamenode:60020 1432619812677 requestsPerSecond=0, numberOfOnlineRegions=0, usedHeapMB=47, maxHeapMB=966 datanode03:60020 1432619812986 requestsPerSecond=0, numberOfOnlineRegions=0, usedHeapMB=48, maxHeapMB=966 datanode02:60020 1432619813379 requestsPerSecond=0, numberOfOnlineRegions=2, usedHeapMB=37, maxHeapMB=966 0 dead servers Aggregate load: 0, regions: 2 |
잘 실행이 되는것을 알수 있다.
휴… 해결.. 이제 pinpoint 설치하러 가야겠다.
그런데 이 설정으로 localhost 127.0.0.1 설정이 없어졌는데..
이로 인해 문제가 다른곳에서 발생을 할지 … 좀 걱정이긴 합니다… 따라서… 좀 써보다가 문제가 발생하면
다시 포스팅 하도록 하겠습니다…
———————–추가————————————————————
아무래도 localhost 를 없앤것이 좀 찝찝한 나머지 좀 테스트를 해보았습니다.
결론적으로 말하면 linux 에서는 127.0.0.1 localhost 설정이 hosts 파일에 없어도 기본적으로 localhost 를 127.0.0.1
로 인식하는거 같네요.
1 2 3 4 5 6 7 8 9 10 11 |
[root@hadoop-1 ~]# nslookup localhost Server: 164.124.101.2 Address: 164.124.101.2#53 Name: localhost Address: 127.0.0.1 [root@hadoop-1 ~]# ping localhost PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from hadoop-1 (127.0.0.1): icmp_seq=1 ttl=64 time=0.021 ms 64 bytes from hadoop-1 (127.0.0.1): icmp_seq=2 ttl=64 time=0.061 ms |
이런식으로 인식이 됩니다.
그래도 혹시 어플리케이션 중에 hosts 파일의 localhost 설정을 사용하는 것이 있을수 있기 때문에
각 서버의 /etc/hosts 파일에 localhost 를 추가해 주기로 했습니다.
위의 설정의 요는 localhost 가 127.0.0.1 이 아닌 본인 서버의 아이피만 바라보면 되기 때문에
hadoop-1 서버
1 2 3 4 5 6 7 |
10.7.177.46 hadoop-1 ::1 hadoop-1 10.7.177.46 namenode localhost 10.7.177.51 snamenode datanode01 hadoop-2 10.7.177.53 datanode02 hadoop-3 10.7.177.57 datanode03 hadoop-4 |
hadoop-2 서버
1 2 3 4 5 6 7 8 |
10.7.177.51 hadoop-2 ::1 hadoop-2 10.7.177.46 namenode hadoop-1 10.7.177.51 snamenode datanode01 hadoop-2 localhost 10.7.177.53 datanode02 hadoop-3 10.7.177.57 datanode03 hadoop-4 |
hadoop-3 서버
1 2 3 4 5 6 7 8 |
10.7.177.53 hadoop-3 ::1 hadoop-3 10.7.177.46 namenode hadoop-1 10.7.177.51 snamenode datanode01 hadoop-2 10.7.177.53 datanode02 hadoop-3 localhost 10.7.177.57 datanode03 hadoop-4 |
hadoop-4 서버
1 2 3 4 5 6 7 |
10.7.177.57 hadoop-4 ::1 hadoop-4 10.7.177.46 namenode hadoop-1 10.7.177.51 snamenode datanode01 hadoop-2 10.7.177.53 datanode02 hadoop-3 10.7.177.57 datanode03 hadoop-4 localhost |
이렇게 추가시켜 주었고 잘 동작 하네요..
도움이 되시길 바랍니다.