HBase 无法在 Mac OSX 上以单节点集群模式启动

HBase fails to start in single node cluster mode on Mac OSX

我正在尝试设置个人 HBase 开发环境。我有 hdfs 和 yarn 运行ning,但无法启动 HBase。

我已经通过 运行ning start-dfs.sh 和 start-yarn.sh 启动了 hadoop 2.7.1。我已经通过测试 hdfs dfs -mkdir /test 和 运行ning 示例中捆绑的示例 MR 作业验证了这些是 运行ning,我在端口 50070 浏览了 HDFS。

我已经在端口 2181 上启动了 zookeeper 3.4.6 并设置了它的 dataDir。我的 zoo.cfg 有:

dataDir=/Users/.../tools/hd/zookeeper_data
clientPort=2181

我在我选择的 dataDir 中观察它的 zookeeper_server.PID 文件,当我 运行 jps 时,我看到以下内容:

51074 NodeManager
50743 DataNode
50983 ResourceManager
50856 SecondaryNameNode
57848 QuorumPeerMain
58731 Jps
50653 NameNode

上面的 QuorumPeerMain 与 zookeeper_server.PID 中的 PID 匹配,如我所料。这种预期是否正确?从我目前所做的来看,是否应该在此处显示更多进程?

我安装了hbase-1.1.2。我配置hbase-site.xml。我将 hbase.rootDir 设置为 hdfs://localhost:8200/hbase,我的 hdfs 是 运行ning 在 localhost:8200。我将 hbase.zookeeper.property.dataDir 设置为我的 zookeeper 的 dataDir,期望它将使用此 属性 来查找 运行ning zookeeper 的 PID。这种期望是正确的还是我误解了? hbase-site.xml中的配置是:

<property>
<name>hbase.rootdir</name>
<value>hdfs://localhost:8020/hbase</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>Users/.../tools/hd/zookeeper_data</value>
</property>

当我 运行 启动-hbase.sh 我的服务器无法启动。我看到这条日志消息:

2015-09-26 19:32:43,617 ERROR [main] master.HMasterCommandLine: Master exiting

调查我 运行 hbase master start 并获取更多详细信息:

2015-09-26 19:41:26,403 INFO [Thread-1] server.NIOServerCnxn: Stat command output 2015-09-26 19:41:26,405 INFO [Thread-1] server.NIOServerCnxn: Closed socket connection for client /127.0.0.1:63334 (no session established for client) 2015-09-26 19:41:26,406 INFO [main] zookeeper.MiniZooKeeperCluster: Started MiniZooKeeperCluster and ran successful 'stat' on client port=2182 Could not start ZK at requested port of 2181. ZK was started at port: 2182. Aborting as clients (e.g. shell) will not be able to find this ZK quorum. 2015-09-26 19:41:26,406 ERROR [main] master.HMasterCommandLine: Master exiting java.io.IOException: Could not start ZK at requested port of 2181. ZK was started at port: 2182. Aborting as clients (e.g. shell) will not be able to find this ZK quorum. at org.apache.hadoop.hbase.master.HMasterCommandLine.startMaster(HMasterCommandLine.java:214) at org.apache.hadoop.hbase.master.HMasterCommandLine.run(HMasterCommandLine.java:139) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) at org.apache.hadoop.hbase.util.ServerCommandLine.doMain(ServerCommandLine.java:126) at org.apache.hadoop.hbase.master.HMaster.main(HMaster.java:2304)

所以我有几个问题:

  1. 我是否应该在 运行ning HBase 之前尝试设置一个动物园管理员?
  2. 为什么当我启动了一个 zookeeper 并告诉 HBase 它的 dataDir 在哪里时,HBase 是否尝试启动它自己的 zookeeper?
  3. 上面有什么明显的stupid/misguided吗?

您用来启动 hbase 的脚本 start-hbase.sh 将尝试按顺序启动以下组件:

  • 动物园管理员
  • hbase大师
  • hbase 区域服务器
  • hbase主备

因此,您可以停止由您启动的 zookeeper(或者)您可以自己单独启动守护进程:

# start hbase master
bin/hbase-daemon.sh --config ${HBASE_CONF_DIR} start master
# start region server
bin/hbase-daemons.sh --config ${HBASE_CONF_DIR} --hosts ${HBASE_CONF_DIR}/regionservers start regionserver

HBase 独立启动它自己的 zookeeper(如果你 运行 start-hbase.sh),但它如果无法启动或保持 运行ning,其他需要的 hbase 守护进程将不会工作。

确保在 hbase-site.xml 文件中明确设置接口 lo0 的属性:

<property>
  <name>hbase.zookeeper.dns.interface</name>
  <value>lo0</value>
</property>

<property>
  <name>hbase.regionserver.dns.interface</name>
  <value>lo0</value>
</property>

<property>
  <name>hbase.master.dns.interface</name>
  <value>lo0</value>
</property>

我发现当我的 wifi 打开时,如果这些条目丢失,zookeeper 会申请启动。