当 Amzon EMR 上的 运行 hbase 时,外部 hbase 客户端的 Zookeeper 仲裁问题

Zookeeper quorum issue with external hbase client when running hbase on Amzon EMR

我是 运行 HBase on Amazon EMR。

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property><name>fs.hdfs.impl</name><value>emr.hbase.fs.BlockableFileSystem</value></property>
  <property><name>hbase.regionserver.handler.count</name><value>100</value></property>
  <property><name>hbase.zookeeper.quorum</name><value>ip-xx-xxx-aa-aa.us-west-1.compute.internal</value></property>
  <property><name>hbase.rootdir</name><value>hdfs://xx.xxx.aa.aa:9000/hbase</value></property>
  <property><name>hbase.cluster.distributed</name><value>true</value></property>
  <property><name>hbase.tmp.dir</name><value>/mnt/var/lib/hbase/tmp-data</value></property>
  <property><name>hbase.master.wait.for.log.splitting</name><value>true</value></property>
</configuration>

以上是配置。 现在我正在尝试使用以下方式启动一个新的 hbase 客户端:

val zk_quoroum = "xx.xxx.aa.aa"
val hBaseClient = new HBaseClient(zk_quoroum)

我无法以某种方式连接到动物园管理员:

6:04:54.238 [main-SendThread()] INFO  org.apache.zookeeper.ClientCnxn - Opening socket connection to server /xx.xxx.aa.aa:2181
16:04:59.264 [main-SendThread(xx.xxx.aa.aa:2181)] INFO  org.apache.zookeeper.ClientCnxn - Client session timed out, have not heard from server in 5026ms for sessionid 0x0, closing socket connection and attempting reconnect

重新连接一直在尝试,但从未建立连接。这与法定人数是内部 url 这一事实有关吗?客户不住在 AWS 中。有人遇到过这个吗?

所以问题是端口 2181 不允许从外部 ips 访问。添加 tcp 规则解决了这个问题。