4

HBase/Hadoop の超初心者です。2 ノードの HBase テスト クラスターを稼働させて、リモート Java クライアントからそのクラスターに接続しようとしています。ここで行き詰まっています: クライアントは単一サーバーの Zookeeper クォーラム (HBase マスターと同じサーバーで実行されている) に正常に接続しますが、Zookeeper によってクライアントに返されるアドレスは localhost であり、(明らかに) クライアントは失敗します。 HBase はローカルで実行されていないため、何にでも接続できません。管理上の理由でクライアント側のホスト ファイルを編集できないことを考えると (いずれにせよ、それはひどいハックのように思えるので、編集する気はありません)、Zookeeper に適切な IP を返させる方法はありますか? HBaseマスターサーバー?

Java コード:

public static final String MASTER_IP = "10.3.248.105";
public static final String ZOOKEEPER_PORT = "2181";

Configuration config = HBaseConfiguration.create();
config.set("hbase.zookeeper.quorum", MASTER_IP);
config.set("hbase.zookeeper.property.clientPort", ZOOKEEPER_PORT);

System.out.println("Running connecting test...");

try {
    HBaseAdmin.checkHBaseAvailable(config);
    System.out.println("HBase found!");
    HTable table = new HTable(config, "testTable");
    System.out.println("Table testTable obtained!");
} catch (MasterNotRunningException e) {
    System.out.println("HBase connection failed!");
    e.printStackTrace();
} catch (ZooKeeperConnectionException e) {
    System.out.println("Zookeeper connection failed!");
    e.printStackTrace();
} catch (Exception e) { e.printStackTrace(); }

エラーダンプ:

13/06/27 11:20:25 INFO zookeeper.ZooKeeper: Initiating client connection, connectString=10.3.248.105:2181 sessionTimeout=180000 watcher=hconnection
13/06/27 11:20:25 INFO zookeeper.RecoverableZooKeeper: The identifier of this process is 5896@HQNJVCVM0004
13/06/27 11:20:29 INFO zookeeper.ClientCnxn: Opening socket connection to server 10.3.248.105/10.3.248.105:2181. Will not attempt to authenticate using SASL (unknown error)
13/06/27 11:20:29 INFO zookeeper.ClientCnxn: Socket connection established to 10.3.248.105/10.3.248.105:2181, initiating session
13/06/27 11:20:29 INFO zookeeper.ClientCnxn: Session establishment complete on server 10.3.248.105/10.3.248.105:2181, sessionid = 0x13f8638485c0003, negotiated timeout = 180000
13/06/27 11:20:30 INFO client.HConnectionManager$HConnectionImplementation: getMaster attempt 0 of 1 failed; no more retrying.
java.net.UnknownHostException: unknown host: localhost.localdomain
HBase connection failed!
at org.apache.hadoop.hbase.ipc.HBaseClient$Connection.<init>(HBaseClient.java:276)
at org.apache.hadoop.hbase.ipc.HBaseClient.createConnection(HBaseClient.java:255)
at org.apache.hadoop.hbase.ipc.HBaseClient.getConnection(HBaseClient.java:1111)
at org.apache.hadoop.hbase.ipc.HBaseClient.call(HBaseClient.java:974)
at org.apache.hadoop.hbase.ipc.WritableRpcEngine$Invoker.invoke(WritableRpcEngine.java:86)
at com.sun.proxy.$Proxy5.getProtocolVersion(Unknown Source)
at org.apache.hadoop.hbase.ipc.WritableRpcEngine.getProxy(WritableRpcEngine.java:138)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getMaster(HConnectionManager.java:712)
at org.apache.hadoop.hbase.client.HBaseAdmin.<init>(HBaseAdmin.java:126)
at org.apache.hadoop.hbase.client.HBaseAdmin.checkHBaseAvailable(HBaseAdmin.java:1781)
at hbaseimagestore.HBaseImageStore.main(HBaseImageStore.java:44)
13/06/27 11:20:30 INFO client.HConnectionManager$HConnectionImplementation: Closed zookeeper sessionid=0x13f8638485c0003
13/06/27 11:20:30 INFO zookeeper.ZooKeeper: Session: 0x13f8638485c0003 closed
org.apache.hadoop.hbase.MasterNotRunningException: Retried 1 times
at org.apache.hadoop.hbase.client.HBaseAdmin.<init>(HBaseAdmin.java:138)
at org.apache.hadoop.hbase.client.HBaseAdmin.checkHBaseAvailable(HBaseAdmin.java:1781)
at hbaseimagestore.HBaseImageStore.main(HBaseImageStore.java:44)
13/06/27 11:20:30 INFO zookeeper.ClientCnxn: EventThread shut down

編集: また、master/zookeeper サーバーの /etc/hosts ファイル:

10.3.248.105   master
10.3.248.106   slave
127.0.0.1   localhost
4

1 に答える 1

1

これが最善の方法かどうかはわかりませんが、うまくいくはずです。マスターのホスト ファイルを次のように変更します。

10.3.248.105   master     localhost
10.3.248.106   slave
#127.0.0.1   localhost

この変更後、hbase を再起動します。

于 2013-06-27T16:21:04.610 に答える