首页 文章

启动Master时出现HBase错误IllegalStateException:hsync

提问于
浏览
1

我正在尝试在hadoop集群上安装HBase,并且无法弄清楚为什么HMaster在从start-hbase.sh调用时无法启动 . 日志文件表明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:54,786 ERROR [master / MasterNode / MasterNode:16000] master.HMaster:无法成为活动主java.lang.IllegalStateException:过程WAL依赖于hsync在组件期间正常运行的能力失败,但底层文件系统不支持这样做 . 请检查'hbase.procedure.store.wal.use.hsync'的配置值以设置所需的健壮性级别,并确保'hbase.wal.dir'的配置值指向可提供它的FileSystem挂载 . 在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)atg.apache.hadoop.hbase.master.HMaster.run(HMaster.java:547)at java.lang.Thread.run(Thread.java:748)2018-02-08 17:26: 54,787 ERROR [master / MasterNode / MasterNode:16000] master.HMaster:主服务器中止:加载的协处理器是:[] 2018-02-08 17:26:54,787 ERROR [master / MasterNode / MasterNode:16000] master.HMaster:Unhandled例外 . 开始关机 . java.lang.IllegalStateException:过程WAL依赖于在组件故障期间hsync正常运行的能力,但底层文件系统不支持这样做 . 请检查'hbase.procedure.store.wal.use.hsync'的配置值以设置所需的健壮性级别,并确保'hbase.wal.dir'的配置值指向可提供它的FileSystem挂载 . 在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)atg.apache.hadoop.hbase.master.HMaster.run(HMaster.java:547)at java.lang.Thread.run(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>

以下是对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

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

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

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

3 回答

  • 2

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

  • 1

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

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

    该属性控制HBase是否将检查流功能(hflush / hsync) . 更多详细信息请参考official website .

  • 0

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

相关问题