Connect to HBase läuft in Docker

Ich kann keine Verbindung zu HBase herstellen, die in Docker unter Windows ausgeführt wird banno / hbase-standalone Bild). Ich kann jedoch eine Verbindung zu lokal installierter HBase herstellen.

banno / hbase-standalone image wird ausgeführt mit:

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

Ich habe auch die Portweiterleitung auf dem @ eingerichtboot2docker-vm (erforderlich unter Windows):

Ich kann erfolgreich mit all diesen Ports auf meinem lokalen Host telneten.

Nächste, hier ist 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);

Welche die folgende Ausnahme verursacht

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

Das ist erklärbar. Wir führen Windows aus, wofür @ erforderlich isboot2docker-vm virtuelle Maschine läuft mit NAT. Der Docker-Container des Bildes wird im @ ausgeführboot2docker-vm auch mit NAT. Die Ports sind jedoch für den Hostcomputer "sichtbar", auf dem Tests ausgeführt werden, da der Docker-Container die Ports und das @ exportierboot2docker-vm leitet die Ports an den Host weiter. Der Namea3e6c240af20 kommt tatsächlich von der Docker-Container-ID, also wahrscheinlicha3e6c240af20 ist ein Hostname für den Docker-Container:

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 mir nicht sicher, wie genau die HBase-Kommunikation funktioniert, aber anscheinend werden RPC-Aufrufe an die Instanz gesendet. HBase Docker gibt seinen Hostnamen zurück und hofft, dass der Client ihn dort aufruft. Aber da beideboot2docker-vm und Docker-Container, der mit NAT ausgeführt wird, der Host-Computer sieht den Docker-Container nicht.

Ich habe versucht, @ hinzuzufüga3e6c240af20 zu meiner Hosts-Datei:

127.0.0.1 a3e6c240af20

Dann bekomme ich auch beim RPC-Aufruf einen anderen Fehler, der mir eigentlich nicht viel hilft:

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

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage