因此,我尝试使用作为 MapReduce 步骤启动的自定义 jar 来查询 Amazon ec2 上的 hbase 集群。我的 jar (在地图函数内)我这样调用 Hbase:
public void map( Text key, BytesWritable value, Context contex ) throws IOException, InterruptedException {
Configuration conf = HBaseConfiguration.create();
HTable table = new HTable(conf, "tablename");
...
问题是,当它到达 HTable 行并尝试连接到 hbase 时,该步骤失败,并且出现以下错误:
2014-02-28 18:00:49,936 INFO [main] org.apache.zookeeper.ZooKeeper: Initiating client connection, connectString=localhost:2181 sessionTimeout=180000 watcher=hconnection
2014-02-28 18:00:49,974 INFO [main] org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper: The identifier of this process is [email protected] /cdn-cgi/l/email-protection
2014-02-28 18:00:49,998 INFO [main-SendThread(localhost:2181)] org.apache.zookeeper.ClientCnxn: Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
2014-02-28 18:00:50,005 WARN [main-SendThread(localhost:2181)] org.apache.zookeeper.ClientCnxn: Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect
java.net.ConnectException: Connection refused
...
2014-02-28 18:01:05,542 WARN [main] org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper: Possibly transient ZooKeeper exception: org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase/hbaseid
2014-02-28 18:01:05,542 ERROR [main] org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper: ZooKeeper exists failed after 3 retries
2014-02-28 18:01:05,542 WARN [main] org.apache.hadoop.hbase.zookeeper.ZKUtil: hconnection Unable to set watcher on znode (/hbase/hbaseid)
org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase/hbaseid
... and on and on
我可以很好地使用 hbase shell,并且可以从 shell 查询数据和所有内容。我不知道从哪里开始,我已经在谷歌上搜索了几个小时但没有运气。互联网上的大多数此类问题都没有提及亚马逊的具体修复方法。我认为zookeeper和hbase应该通过亚马逊引导程序自动正确连接。
我使用 hbase 0.94.17 jar,亚马逊正在运行 hbase 0.94.7,我很确定这不是问题,我猜更多的是我没有正确设置 Java 代码。如果有人可以提供帮助,我们将不胜感激。谢谢