2014-08-29 12 views
7

Ich kann keine Verbindung zu HBase in Docker unter Windows (banno/hbase-standalone Bild) läuft. Ich kann jedoch eine Verbindung zu lokal installierten HBase herstellen.Verbinden mit HBase läuft in Docker

banno/hbase-standalone Bild wird unter Verwendung laufen:

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

ich auf das auch das Port-Forwarding boot2docker-vm einzurichten (die erforderlich ist, wenn unter Windows): enter image description here

ich an alle, die erfolgreich telnet Ports auf meinem lokalen Host.

Als nächstes ist hier ein Codebeispiel, das wir in unseren Tests verwenden:

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); 

, die die folgende Ausnahme

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 

verursacht Dies ist erklärbar. Wir führen Windows aus, was erfordert, dass die virtuelle Maschine boot2docker-vm mit NAT läuft. Der Docker-Container des Images wird innerhalb der boot2docker-vm ebenfalls mit NAT ausgeführt. Die Ports sind jedoch für den Host-Computer, auf dem Tests ausgeführt werden, "sichtbar", da der Docker-Container die Ports exportiert und der Port boot2docker-vm die Ports an den Host-Computer weiterleitet. Der Name a3e6c240af20 stammt tatsächlich aus dem ID Docker Container, also wahrscheinlich a3e6c240af20 ist ein Hostname für den Container Docker:

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 

Ich bin nicht sicher, wie genau Kommunikation funktioniert HBase, aber anscheinend ist es RPC auf die Instanz aufruft. HBase Docker gibt seinen Hostnamen zurück und hofft, dass der Client es dort anruft. Aber da sowohl der boot2docker-vm als auch der Docker-Container mit NAT ausgeführt werden, sieht der Host-Computer den Docker-Container nicht.

Ich versuchte a3e6c240af20 meiner hosts-Datei hinzuzufügen:

127.0.0.1 a3e6c240af20 

Dann habe ich einen anderen Fehler zu erhalten, auch während der RPC-Aufruf, die tatsächlich hilft mir nicht viel:

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 

Does Hat jemand einen Vorschlag wie das gelöst werden kann?

+0

Vielleicht öffnet HBase zufällige Ports für RPC-Anforderungen aber Docker Container sie nicht aus. Ich habe jetzt das gleiche Problem. – tobe

Antwort

1

Versuchen [boot2docker IP] a3e6c240af20 statt 127.0.0.1 hinzufügen, weil HBase Java-Client Ihre docker's host nicht genau zookeeper localhost zu erreichen erreichen muss (CMIIW). Nicht ganz sicher, ob es funktioniert, aber es funktioniert in meinem Windows.

0

Ich verwendete arddpoet/hbase-cdh5 Docker-Bild, um dieses Problem zu vermeiden.

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" 

meine Konfigurationsdatei

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 
Verwandte Themen