按照书上的配置如下

<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://master:9000/hbase</value>
  </property>
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
<configuration>

然后出现以下错误

2017-12-21 14:59:04,866 ERROR [main] quorum.QuorumPeerConfig: Invalid configuration, only one server specified (ignoring)
2017-12-21 14:59:04,888 INFO  [main] server.ZooKeeperServerMain: Starting server

其实下面还有很多错误,不过都是由于这最前面的这个错误导致的

开始以为是不同步导致错误(以为错误日志太长,没看到前面这错误),于是利用ntp把各节点同步,并且在hbase-site.xml配置了

<property>
    <name>hbase.master.maxclockskew</name>
    <value>120000</value>
  </property>

hbase.master.maxclockskew是用来防止HBase节点之间时间不一致造成regionserver启动失败,默认值是30000;

结果还是没解决问题,最后发现原来是ZooKeeper的配置出问题了,要设定hbase.zookeeper.quorum,设置Zookeeper节点的主机名,它的值个数必须是奇数。该字段的默认值是localhost,这个值对于分布式应用是不可以的(远程连接无法使用)

于是我的配置如下所以,然后问题也解决了

<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://master:9000/hbase</value>
  </property>
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
  <property>
    <name>hbase.master.maxclockskew</name>
    <value>120000</value>
  </property>
  <property>
    <name>hbase.master.info.port</name>
    <value>60010</value>
  </property>
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>master,slave1,slave2</value>
  </property>
</configuration>
hbase.master.info.port设定之后就可以通过所指定的端口(60010),利用Web的方式查看HBase系统状态。http://master:60010