Hadoop 启动主机时出现HBase错误IllegalStateException:hsync

Hadoop 启动主机时出现HBase错误IllegalStateException:hsync,hadoop,hbase,apache-zookeeper,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目录,并没有运气重

我试图在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区域服务器/usr/local/zookeeper/data的.pid文件相同的目录中/

下面是与hsync异常相关的hbase主日志文件的摘录

2018-02-08 17:26:54786错误[master/MasterNode/MasterNode:16000]master.HMaster:无法成为活动master java.lang.IllegalStateException:过程WA依赖于在组件故障期间正确操作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.startServiceThreads(HMaster.java:1145) 位于org.apache.hadoop.hbase.master.HMaster.finishActiveMasterInitialization(HMaster.java:837) 位于org.apache.hadoop.hbase.master.HMaster.startActiveMasterManager(HMaster.java:2026) 位于org.apache.hadoop.hbase.master.HMaster.run(HMaster.java:547) 运行(Thread.java:748) 2018-02-08 17:26:54787错误[master/MasterNode/MasterNode:16000]master.HMaster:主服务器中止:加载的协处理器为:[] 2018-02-08 17:26:54787错误[master/MasterNode/MasterNode:16000]master.HMaster:未处理的异常。开始关机。 java.lang.IllegalStateException:过程WA依赖于在组件故障期间正确操作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.startServiceThreads(HMaster.java:1145) 位于org.apache.hadoop.hbase.master.HMaster.finishActiveMasterInitialization(HMaster.java:837) 位于org.apache.hadoop.hbase.master.HMaster.startActiveMasterManager(HMaster.java:2026) 位于org.apache.hadoop.hbase.master.HMaster.run(HMaster.java:547) 运行(Thread.java:748)

下面是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>
下面是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>
下面是与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

您似乎从HBase镜像站点下载了HBase-2.0-beta1发行版。HBase的默认编译是使用默认的hadoop配置文件(即2.0)完成的。HBase lib文件夹包含hadoop依赖项,hadoop-2.7版本不支持hsync功能。因此,尝试通过传递-Dhadoop.profile=3.0从源代码构建HBase。这将使用hadoop-3.0依赖项构建Hbase发行版。使用此发行版运行HBase。

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

<property>
  <name>hbase.unsafe.stream.capability.enforce</name>
  <value>false</value>
</property>

hbase.unsafe.stream.capability.enforce
假的

该属性控制HBase是否检查流功能(hflush/hsync)。更多详细信息请参阅。

我遇到了与您完全相同的问题。遇到问题时,我正在运行hbase-2.0.1和hadoop-2.9.1。我的解决方案是下载更高版本的hbase(hbase-0.98.13-hadoop2)。您正在使用的hadoop和hbase版本之间可能存在版本不兼容问题。

在3-N hbase集群上使用hbase 2.2.1和hadoop 3.2.1,同时使用HDFS作为base.rootdir时,我遇到了类似的问题

解决方案

  • 在hbase-site.xml中将配置设置为
    hbase.unsafe.stream.capability.enforce
    设置为
    false
  • 不确定这是否必要,还将
    hbase.wal.dir
    更改为
    hbase.rootdir

  • 理想情况下,我们不应该将
    hbase.unsafe.stream.capability.enforce
    设置为
    false
    。这是有风险的。相反,只需将一些hadoop二进制文件复制到hbase库

    例如, 如果您的HBase是2.2.5版本,请使用Hadoop 2.8.5进行构建。(您可以使用hbase libs下的
    ls hadoop*2.8.5*.jar
    文件grep查找hadoop二进制文件,这将告诉您使用哪个hbase构建hadoop版本)

    HBase.unsafe.stream.capability.enforce设置为
    false时,当前HBase将Hadoop版本显示为

    Hadoop版本2.8.5, 修订版=826AFBEAE31CA687BC2F847DC841B66ED2C6704

    现在我正在尝试使用HBase 2.2.5(使用Hadoo预构建)
    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
    
    <property>
      <name>hbase.unsafe.stream.capability.enforce</name>
      <value>false</value>
    </property>