2014-08-29 25 views
7

Tôi không thể kết nối với HBase đang chạy trong Docker trên Windows (ảnh banno/hbase-standalone). Tuy nhiên, tôi có thể kết nối với HBase cài đặt cục bộ.Kết nối với HBase đang chạy trong Docker

banno/hbase-standalone hình ảnh được chạy bằng:

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

Tôi cũng thiết lập các cổng chuyển tiếp trên boot2docker-vm (đó là cần thiết khi chạy trên Windows): enter image description here

tôi thành công có thể telnet đến tất cả những cổng trên localhost của tôi.

Tiếp theo, đây là một mẫu mã mà chúng tôi sử dụng trong các thử nghiệm của chúng tôi:

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

nào gây ra ngoại lệ sau đây

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 

Đây là giải thích được. Chúng tôi chạy Windows, yêu cầu boot2docker-vm máy ảo đang chạy bằng NAT. Vùng chứa Docker của hình ảnh đang chạy bên trong boot2docker-vm cũng sử dụng NAT. Tuy nhiên, các cổng được "nhìn thấy" để máy chủ chạy thử nghiệm, kể từ khi container Docker xuất khẩu các cảng, và boot2docker-vm chuyển tiếp các cổng máy chủ. Tên a3e6c240af20 thực sự đến từ ID chứa Docker, vì vậy có lẽ a3e6c240af20 là một hostname cho 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 

Tôi không chắc chắn như thế nào chính xác HBase công trình thông tin liên lạc, nhưng dường như nó làm cho RPC cuộc gọi đến dụ. HBase Docker trả về tên máy chủ của nó hy vọng rằng khách hàng sẽ gọi nó ở đó. Nhưng kể từ khi cả hai container boot2docker-vm và Docker đang chạy bằng NAT, máy chủ không thấy vùng chứa Docker.

Tôi cố gắng thêm a3e6c240af20 để hosts của tôi:

127.0.0.1 a3e6c240af20 

Sau đó, tôi nhận được một lỗi khác nhau, cũng trong suốt cuộc gọi RPC, mà thực sự không giúp tôi nhiều:

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 

Liệu bất cứ ai có một gợi ý làm thế nào điều này có thể được giải quyết?

+0

lẽ HBase mở cổng ngẫu nhiên cho các yêu cầu RPC nhưng chứa Docker không tiếp xúc với chúng. Tôi đang gặp vấn đề tương tự bây giờ. – tobe

Trả lời

1

Hãy thử thêm [boot2docker IP] a3e6c240af20 thay vì 127.0.0.1 vì ứng dụng khách HBase Java cần truy cập số docker's host của bạn không chính xác localhost để tiếp cận người quản lý vườn thú (CMIIW). Không chắc chắn nếu nó sẽ hoạt động nhưng nó hoạt động trong Windows của tôi.

0

Tôi đã sử dụng hình ảnh đế cầu hình lẻ/hbase-cdh5 để tránh sự cố này.

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" 

tập tin cấu hình của tôi

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 
Các vấn đề liên quan