我已经按照amazon自己的教程使用aws控制台设置了一个amazonec2集群,其中包含了所有的默认设置(http://docs.aws.amazon.com/elasticmapreduce/latest/developerguide/emr-hbase-launch.html). 我已经部署了一个运行hadoop2.2.0和hbase 0.94.7的ami3.0.4。我希望能够在自己的计算机上运行一个java程序,该程序将使用javaapi连接到hbase。以前,我使用自己设置的amazon ec2示例成功地做到了这一点,但使用的是更新版本的hbase(0.96.1.1-hadoop2),但是在这个新的群集设置下,我遇到了以下错误:
Exception in thread "main" org.apache.hadoop.hbase.MasterNotRunningException: com.google.protobuf.ServiceException: java.io.IOException: Call to <MY_EC2_MASTER_INTERNAL_HOST_NAME>/<THE_EC2_MASTER_EXTERNAL_IP>:60000 failed on local exception: java.io.IOException: Connection reset by peer
我已经检查了服务器是否正在运行,我已经正确地将ec2内部主机名Map到本地/etc/hosts文件中的公共ip地址,就像我自己设置的amazon示例一样。我还在amazon上打开了正确的端口(2181、60000、60010、60020、60030-可能甚至不需要所有这些),目前正在接受来自所有ip源的流量(暂时直到我正确完成设置并解决此问题)。
我的java api使用以下配置(最后一行导致错误):
Configuration config = HBaseConfiguration.create();
config.set("hbase.zookeeper.quorum", "<EC2_MASTER_PUBLIC_IP_ADDRESS>");
config.set("hbase.zookeeper.property.clientPort","2181");
this.conf = config;
this.tokenizer = ObjectFactory.createOpenNLPTokenizer();
HBaseAdmin.checkHBaseAvailable(this.conf);
知道是什么导致了问题吗?可能是我的hbase客户端版本(0.96.1.1-hadoop2)与amazonhbase版本0.94.7不匹配吗?我在maven存储库中找不到此版本的hbase客户机,这就是为什么我要使用稍新的版本。
1条答案
按热度按时间oknwwptz1#
不要使用从maven存储库下载的JAR。相反,从aws emr集群的lib文件夹复制hbase jar,并将其放在本地计算机的lib文件夹中。
现在使用类路径中复制的hbase jar文件编译代码,即
javac -cp "hbase-jar-copied-location" filename.java
然后跑。amazon使用hbase jar中的一些定制来满足他们的需求,这就是为什么针对从maven存储库外部下载的hbase jar编译的程序不起作用的原因