启动Master时HBase错误IllegalStateException:hsync

Mat*_*att 2 hadoop hbase apache-zookeeper

我正在尝试在 hadoop 集群上安装 HBase,但无法弄清楚从 start-hbase.sh 调用时 HMaster 无法启动的原因。日志文件表明 hsync 存在问题。我已经确认zookeeper在分布式模式下正确运行,并且通过spark使用hadoop集群没有任何问题。尝试启动 HBase 时,区域服务器会在所有数据节点上启动。

我有 hadoop 3.0.0 版、zookeeper 3.4.11 和 hbase 2.0.0 beta 1。

我已经清除了 zookeeper hbase 节点和 hdfs hbase 目录,并没有运气重新启动。我将 myid zookeeper 文件存储在与 zookeeper 和 hbase 区域服务器的 .pid 文件相同的目录中 /usr/local/zookeeper/data/

下面我摘录了与 hsync 异常有关的 hbase 主日志文件。

2018-02-08 17:26:54,786 错误 [master/MasterNode/MasterNode:16000] master.HMaster: 无法成为活动的 master java.lang.IllegalStateException: 程序 WAL 依赖于在组件故障期间 hsync 进行正确操作的能力,但底层文件系统不支持这样做。请检查“hbase.procedure.store.wal.use.hsync”的配置值以设置所需的健壮性级别,并确保“hbase.wal.dir”的配置值指向可以提供它的文件系统挂载。在 org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.rollWriter(WALProcedureStore.java:1036) 在 org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.recoverLease(WALProcedureStore.java:374)在 org.apache.hadoop.hbase.procedure2.ProcedureExecutor.start(ProcedureExecutor.java:532) 在 org。apache.hadoop.hbase.master.HMaster.startProcedureExecutor(HMaster.java:1232) at org.apache.hadoop.hbase.master.HMaster.startServiceThreads(HMaster.java:1145) at org.apache.hadoop.hbase.master。 HMaster.finishActiveMasterInitialization(HMaster.java:837) at org.apache.hadoop.hbase.master.HMaster.startActiveMasterManager(HMaster.java:2026) at org.apache.hadoop.hbase.master.HMaster.run(HMaster.java: 547) 在 java.lang.Thread.run(Thread.java:748) 2018-02-08 17:26:54,787 错误 [master/MasterNode/MasterNode:16000] master.HMaster:主服务器中止:加载的协处理器是:[ ] 2018-02-08 17:26:54,787 错误 [master/MasterNode/MasterNode:16000] master.HMaster:未处理的异常。开始关机。java.lang.IllegalStateException: 过程 WAL 依赖于 hsync 在组件故障期间进行正确操作的能力,但底层文件系统不支持这样做。请检查“hbase.procedure.store.wal.use.hsync”的配置值以设置所需的健壮性级别,并确保“hbase.wal.dir”的配置值指向可以提供它的文件系统挂载。在 org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.rollWriter(WALProcedureStore.java:1036) 在 org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.recoverLease(WALProcedureStore.java:374)在 org.apache.hadoop.hbase.procedure2.ProcedureExecutor.start(ProcedureExecutor.java:532) 在 org.apache.hadoop.hbase.master.HMaster.startProcedureExecutor(HMaster.java:1232) 在 org.apache.hadoop.hbase .master.HMaster。

下面是 hbase-site.xml 文件

<property>
    <name>hbase.master</name>
    <value>localhost:60000</value>
    <description>The host and port that the HBase master runs at.A value of 'lo$
</property>
<property>
    <name>hbase.zookeeper.property.clientPort</name>
    <value>2181</value>
    <description>Property from ZooKeeper's config zoo.cfg.The port at which the$
</property>
<property>
    <name>hbase.zookeeper.quorum</name>
    <value>MasterNode,Slave1,Slave2</value>
    <description>Comma separated list of servers in the ZooKeeper Quorum.For ex$
</property>
<property>
    <name>hbase.rootdir</name>
    <value>hdfs://MasterNode:9000/hbase</value>
</property>
<property>
    <name>hbase.tmp.dir</name>
    <value>/usr/local/zookeeper/data</value>
</property>
<property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/usr/local/zookeeper/data</value>
</property>
<property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
</property>
<property>
    <name>zookeeper.znode.parent</name>
    <value>/hbase</value>
</property>
Run Code Online (Sandbox Code Playgroud)

以下是对 hbase-env.sh 文件设置所做的更改

export JAVA_HOME=/usr/lib/jvm/java-8-oracle
export HBASE_HOME=/usr/local/hadoop/HBase
export HADOOP_HOME=/usr/local/hadoop
export HBASE_MANAGES_ZK=false
export HBASE_PID_DIR=/usr/local/zookeeper/data
Run Code Online (Sandbox Code Playgroud)

下面是 core-site.xml

<property>
    <name>hadoop.tmp.dir</name>
    <value>/app/hadoop/tmp</value>
</property>
<property>
    <name>fs.default.name</name>
    <value>hdfs://MasterNode:9000</value>
</property>
Run Code Online (Sandbox Code Playgroud)

下面是zoo.cfg

tickTime=2000
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/log
clientPort=2181
initLimit=5
syncLimit=2
server.1=MasterNode:2888:3888
server.2=Slave1:2888:3888
server.3=Slave2:2888:3888
Run Code Online (Sandbox Code Playgroud)

下面是与 hadoop 设置相关的 .bashrc 设置

export HADOOP_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_PREFIX=/usr/local/hadoop
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_CONFDIR=$HADOOP_HOME/etc/hadoop
export HADOOP_OPTS="-Djava.library.path=$HADOOP_PREFIX/lib"
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/
export PATH=$PATH:$HADOOP_HOME/bin
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
export HBASE_HOME=/usr/local/hadoop/HBase
export PATH=$PATH:$HBASE_HOME/bin
Run Code Online (Sandbox Code Playgroud)

小智 11

我遇到了同样的问题,我的解决方案如下:编辑 hbase-site.xml 并添加以下内容:

<property>
  <name>hbase.unsafe.stream.capability.enforce</name>
  <value>false</value>
</property>
Run Code Online (Sandbox Code Playgroud)

该属性控制 HBase 是否会检查流能力(hflush/hsync)。更多细节参考官网