Conéctese a HBase ejecutándose en Docker

No puedo conectarme a HBase que se ejecuta en Docker en Windows ( imagen independiente / hbase ). Sin embargo, puedo conectarme a HBase instalado localmente.

La imagen independiente de banno / hbase se ejecuta con:

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

También configuré el reenvío de puertos en boot2docker-vm(que se requiere cuando se ejecuta en Windows): ingrese la descripción de la imagen aquí

Puedo exitosamente telnet a todos esos puertos en mi localhost.

A continuación, aquí hay una muestra de código que usamos en nuestras pruebas:

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

Lo que causa la siguiente excepción

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

Esto es explicable. Ejecutamos Windows, que requiere boot2docker-vmuna máquina virtual con NAT. El contenedor Docker de la imagen se está ejecutando dentro del boot2docker-vmtambién usando NAT. Sin embargo, los puertos son "visibles" para la máquina host que ejecuta pruebas, ya que el contenedor Docker exporta los puertos y boot2docker-vmreenvía los puertos a la máquina host. El nombre en a3e6c240af20realidad proviene de la ID del contenedor Docker, por lo que probablemente a3e6c240af20sea ​​un nombre de host para el contenedor 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

No estoy seguro de cómo funciona exactamente la comunicación HBase, pero aparentemente hace llamadas RPC a la instancia. HBase Docker devuelve su nombre de host esperando que el cliente lo llame allí. Pero dado que ambos boot2docker-vmy el contenedor Docker se ejecutan utilizando NAT, la máquina host no ve el contenedor Docker.

Traté de agregar a3e6c240af20a mi archivo de hosts:

127.0.0.1 a3e6c240af20

Luego recibo un error diferente, también durante la llamada RPC, que en realidad no me ayuda mucho:

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

¿Alguien tiene una sugerencia de cómo se puede resolver esto?

Respuesta 1

Intente agregar en [boot2docker IP] a3e6c240af20lugar de 127.0.0.1porque el cliente HBase Java necesita comunicarse con su docker's hostno exactamente localhostpara llegar al cuidador del zoológico (CMIIW). No estoy seguro de si funcionará, pero funciona en mi Windows.

Respuesta: 2

He escrito esta función para encontrar el número de Raíces cuadradas entre dos números (inclusive). static int FindRoot (int no1, int no2) {int res = 0; para (int x = no1; x <= no2; x ++) {...

Estoy tratando de inicializar una matriz de tipo booleano cuyo tamaño es un entero de 10 dígitos. Sigue lanzando OutOfMemoryException. He aumentado el tamaño del espacio de almacenamiento dinámico del eclipse a 1024 desde 256. ...

Tengo una redis key / value store que contiene blobs (tamaño en decenas de MB), y el cliente jedis que estoy usando en mi aplicación java devuelve una matriz de bytes del método get de la conexión jedis. Actualmente yo ...

Quiero usar el paquete de mosaicos incluido de la solución de osmdroid para usar mapas sin conexión ya que Mobile Atlas Creator no funcionó para mí (quiero niveles de zoom de 16x que no es posible con esta herramienta). Los ...