如何使用 Docker 在完全分布式模式下配置 Hbase 集群

How to configure an Hbase cluster in fully distributed mode using Docker

我正在以完全分布式模式设置一个 HBase 集群,具有 1 个 HMaster 节点和 3 个 Regionservers 节点

我的 hbase-site.xml 文件包含

<configuration>
   <property>
     <name>hbase.master</name>
     <value>hbase.master:60000</value>
   </property>
<property>
   <name>hbase.rootdir</name>
   <value>hdfs://hadoop.master:9000/data/hbase</value>
</property>
<property>
   <name>hbase.cluster.distributed</name>
   <value>true</value>
 </property>
 <property>
   <name>hbase.zookeeper.property.clientPort</name>
   <value>2181</value>
 </property>
 <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/tmp</value>
 </property>
 <property>
    <name>hbase.zookeeper.quorum</name>
    <value>hbase.master</value>
 </property>
</configuration>

我的 hadoop 集群运行正常运行。

我运行Zookeeper和hbase master在同一台机器上,配置文件zoo.cfg作为默认值

当我启动集群并查看 Hbase Master web UI 时,所有 Regionserver 都出现在列表中,但是当我尝试创建 table 或其他命令时,例如 hbase>status 他们总是显示异常:

ERROR: org.apache.hadoop.hbase.PleaseHoldException: Master is initializing
 at org.apache.hadoop.hbase.master.HMaster.checkInitialized(HMaster.java:1889)
 at org.apache.hadoop.hbase.master.MasterRpcServices.getClusterStatus(MasterRpcServices.java:695)
 at org.apache.hadoop.hbase.protobuf.generated.MasterProtos$MasterService.callBlockingMethod(MasterProtos.java:42406)
 at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2033)
 at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:107)
 at org.apache.hadoop.hbase.ipc.RpcExecutor.consumerLoop(RpcExecutor.java:130)
 at org.apache.hadoop.hbase.ipc.RpcExecutor.run(RpcExecutor.java:107)
 at java.lang.Thread.run(Thread.java:745)

那么我的集群出了什么问题?

我发现我使用的是 Docker 版本 1.8.2 完全删除后 Docker 然后安装旧的 (1.7.0) 然后我的脚本 运行 通常