2014-08-29 7 views
7

Windows의 Docker에서 실행중인 HBase에 연결할 수 없습니다 (banno/hbase-standalone 이미지). 그러나 로컬에 설치된 HBase에 연결할 수 있습니다. enter image description hereDocker에서 실행중인 HBase에 연결

나는 성공적으로 모든 텔넷 수 있습니다 : 나는 또한 (Windows에서 실행하는 경우 필요)를 boot2docker-vm의 포트 포워딩을 설정

docker run -d -p 2181:2181 -p 60000:60000 -p 60010:60010 -p 60020:60020 -p 60030:60030 banno/hbase-standalone 

:

banno/hbase-standalone 이미지를 사용하여 실행됩니다 내 로컬 호스트의 포트. 다음과 같은 예외

Exception in thread "main" org.apache.hadoop.hbase.MasterNotRunningException: com.google.protobuf.ServiceException: java.net.UnknownHostException: unknown host: a3e6c240af20 
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation$StubMaker.makeStub(HConnectionManager.java:1651) 
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation$MasterServiceStubMaker.makeStub(HConnectionManager.java:1677) 
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getKeepAliveMasterService(HConnectionManager.java:1885) 
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.isMasterRunning(HConnectionManager.java:900) 
    at org.apache.hadoop.hbase.client.HBaseAdmin.checkHBaseAvailable(HBaseAdmin.java:2366) 
    at com.xxx.compute.hadoop.jobs.transaction.OurTest.main(OurTest.java:24) 
Caused by: com.google.protobuf.ServiceException: java.net.UnknownHostException: unknown host: a3e6c240af20 
    at org.apache.hadoop.hbase.ipc.RpcClient.callBlockingMethod(RpcClient.java:1674) 
    at org.apache.hadoop.hbase.ipc.RpcClient$BlockingRpcChannelImplementation.callBlockingMethod(RpcClient.java:1715) 
    at org.apache.hadoop.hbase.protobuf.generated.MasterProtos$MasterService$BlockingStub.isMasterRunning(MasterProtos.java:42561) 
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation$MasterServiceStubMaker.isMasterRunning(HConnectionManager.java:1688) 
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation$StubMaker.makeStubNoRetries(HConnectionManager.java:1597) 
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation$StubMaker.makeStub(HConnectionManager.java:1623) 
    ... 5 more 
Caused by: java.net.UnknownHostException: unknown host: a3e6c240af20 
    at org.apache.hadoop.hbase.ipc.RpcClient$Connection.<init>(RpcClient.java:386) 
    at org.apache.hadoop.hbase.ipc.RpcClient.createConnection(RpcClient.java:352) 
    at org.apache.hadoop.hbase.ipc.RpcClient.getConnection(RpcClient.java:1526) 
    at org.apache.hadoop.hbase.ipc.RpcClient.call(RpcClient.java:1438) 
    at org.apache.hadoop.hbase.ipc.RpcClient.callBlockingMethod(RpcClient.java:1657) 
    ... 10 more 

이 설명 할 것입니다 원인

Configuration config = HBaseConfiguration.create(); 
config.clear(); 
config.setInt("timeout", 12000); 
config.set("zookeeper.znode.parent", "/hbase"); 
config.set("hbase.zookeeper.quorum", "127.0.0.1"); 
config.set("hbase.zookeeper.property.clientPort", "2181"); 
config.set("hbase.master", "127.0.0.1:60000"); 

final Configuration configuration = HBaseConfiguration.create(config); 

JobDefinition.Buildable.dumpProperties(configuration, newArrayList("hbase.*")); 

HBaseAdmin.checkHBaseAvailable(config); 

:

다음으로, 우리가 우리의 테스트에서 사용하는 코드 샘플입니다. 우리는 NAT를 사용하여 boot2docker-vm 가상 머신을 실행해야하는 Windows를 실행합니다. 이미지의 Docker 컨테이너는 NAT를 사용하여 boot2docker-vm 내부에서도 실행됩니다. 그러나 포트는 Docker 컨테이너가 포트를 내보내므로 포트를 호스트 시스템에 전달하기 때문에 테스트를 실행하는 호스트 시스템에 포트가 "표시"됩니다. 이름 a3e6c240af20 실제로 도커 컨테이너 ID에서 온다, 그래서 아마 a3e6c240af20은 부두 노동자의 컨테이너의 호스트 이름입니다 :

CONTAINER ID  IMAGE       COMMAND    CREATED    STATUS    PORTS                               NAMES 
a3e6c240af20  banno/hbase-standalone:latest "/bin/sh -c '/opt/hb 24 minutes ago  Up 24 minutes  0.0.0.0:2181->2181/tcp, 0.0.0.0:60000->60000/tcp, 0.0.0.0:60010->60010/tcp, 0.0.0.0:60020->60020/tcp, 0.0.0.0:60030->60030/tcp agitated_wozniak 

내가 정확히 어떻게 HBase와 통신 작품 잘 모르겠지만, 분명히이 RPC는 인스턴스에 호출합니다. HBase Docker는 클라이언트가 그곳에서 호출 할 것으로 기대하는 호스트 이름을 반환합니다. 그러나 boot2docker-vm과 Docker 컨테이너가 NAT를 사용하여 실행 중이기 때문에 호스트 시스템에는 Docker 컨테이너가 표시되지 않습니다.

Exception in thread "main" org.apache.hadoop.hbase.MasterNotRunningException: com.google.protobuf.ServiceException: java.lang.NullPointerException 
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation$StubMaker.makeStub(HConnectionManager.java:1651) 
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation$MasterServiceStubMaker.makeStub(HConnectionManager.java:1677) 
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getKeepAliveMasterService(HConnectionManager.java:1885) 
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.isMasterRunning(HConnectionManager.java:900) 
    at org.apache.hadoop.hbase.client.HBaseAdmin.checkHBaseAvailable(HBaseAdmin.java:2366) 
    at com.xxx.compute.hadoop.jobs.transaction.OurTest.main(OurTest.java:24) 
Caused by: com.google.protobuf.ServiceException: java.lang.NullPointerException 
    at org.apache.hadoop.hbase.ipc.RpcClient.callBlockingMethod(RpcClient.java:1674) 
    at org.apache.hadoop.hbase.ipc.RpcClient$BlockingRpcChannelImplementation.callBlockingMethod(RpcClient.java:1715) 
    at org.apache.hadoop.hbase.protobuf.generated.MasterProtos$MasterService$BlockingStub.isMasterRunning(MasterProtos.java:42561) 
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation$MasterServiceStubMaker.isMasterRunning(HConnectionManager.java:1688) 
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation$StubMaker.makeStubNoRetries(HConnectionManager.java:1597) 
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation$StubMaker.makeStub(HConnectionManager.java:1623) 
    ... 5 more 
Caused by: java.lang.NullPointerException 
    at org.apache.hadoop.hbase.ipc.RpcClient$Connection.writeRequest(RpcClient.java:1051) 
    at org.apache.hadoop.hbase.ipc.RpcClient.call(RpcClient.java:1440) 
    at org.apache.hadoop.hbase.ipc.RpcClient.callBlockingMethod(RpcClient.java:1657) 
    ... 10 more 

않습니다 또한 실제로 나에게 많은 도움이되지 않는 RPC 호출 동안,

127.0.0.1 a3e6c240af20 

가 그럼 난 다른 오류가 발생합니다 :

나는 나의 호스트 파일에 a3e6c240af20을 추가하려고 누구든지 이것이 어떻게 해결 될 수 있는지에 대한 제안을 가지고 있습니까?

+0

아마 HBase와는 RPC 요청에 대해 임의의 포트를 엽니 다하지만 고정 표시기 컨테이너를 노출하지 않습니다. 나는 지금 같은 문제를 겪고있다. – tobe

답변

1

는 HBase와 자바 클라이언트가 docker's host 정확히 localhost에 도달하지 사육사 (CMIIW)에 도달해야하기 때문에 [boot2docker IP] a3e6c240af20 대신 127.0.0.1을 추가하십시오. 그것이 작동하는지 꽤 확신하지는 않지만 내 Windows에서 작동합니다.

0

이 문제를 방지하기 위해 oddpoet/hbase-cdh5 이미지를 사용했습니다.

docker run -d -p 2181:2181 -p 60000:60000 -p 60010:60010 -p 60020:60020 -p 60030:60030 -h hbase oddpoet/hbase-cdh5 

fig.yml

hbase: 
    image: oddpoet/hbase-cdh5 
    hostname: hbase 
    ports: 
    - "3181:2181" 
    - "60000:60000" 
    - "60010:60010" 
    - "60020:60020" 
    - "60030:60030" 

내 구성 파일은

conf.set("hbase.zookeeper.quorum", zkPath); 
    conf.set("hbase.zookeeper.property.clientPort","2181"); 
    conf.set("zookeeper.znode.parent", "/hbase"); 

    conf.set("hbase.client.retries.number", "3"); // default 35 
    conf.set("hbase.rpc.timeout", "10000"); // default 60 secs 
    conf.set("hbase.rpc.shortoperation.timeout", "5000"); // default 10 secs