启动master:hsync时发生hbase错误illegalstateexception

z18hc3ub  于 2021-05-29  发布在  Hadoop
关注(0)|答案(5)|浏览(474)

我试图在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 region服务器的.pid文件/usr/local/zookeeper/data相同的目录中/
下面是与hsync异常相关的hbase主日志文件的摘录。
2018-02-08 17:26:54786错误[master/masternode/m]asternode:16000]master.hmaster:未能成为活动的master java.lang.illegalstateexception:该过程依赖于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)在java.lang.thread.run(线程。java:748)2018-02-08 17:26:54787错误[master/masternode/m]asternode:16000]master.hmaster:主服务器中止:加载的协处理器为:[]2018-02-08 17:26:54787错误[master/masternode/m]asternode:16000]master.hmaster:未处理的异常。开始关机。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.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)在java.lang.thread.run(线程。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
j0pj023g

j0pj023g1#

在3-n hbase集群上使用hbase 2.2.1和hadoop 3.2.1时,我遇到了类似的问题,同时使用hdfs作为base.rootdir。
解决方案
将配置设置为 hbase.unsafe.stream.capability.enforcefalse 在hbase-site.xml中
不确定这是必要的,也改变了 hbase.wal.dir 到外部的hdfs目录 hbase.rootdir

qjp7pelc

qjp7pelc2#

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

siv3szwd

siv3szwd3#

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

xnifntxz

xnifntxz4#

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

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

属性控制hbase是否检查流功能(hflush/hsync)。更多详细信息请参阅官方网站。

juzqafwq

juzqafwq5#

理想情况下,我们不应该设置 hbase.unsafe.stream.capability.enforcefalse . 这很危险。相反,只需将一些hadoop二进制文件复制到hbase lib。
例如,如果您的hbase是2.2.5版本,则使用hadoop2.8.5(您可以使用grep来获取hadoop二进制文件 ls hadoop*2.8.5*.jar hbase libs下的文件,它将告诉您使用哪个hbase构建的hadoop版本)。
当前hbase显示hadoop版本为,当 hbase.unsafe.stream.capability.enforce 设置为 false hadoop版本2.8.5,修订版=826AFBEAE31CA687BC2F8471C841B66ED2C6704
现在我正在尝试将hbase 2.2.5(使用hadoop2.8.5预构建)与hadoop2.9.2结合使用
解决的步骤是
转到$hbase\u home/lib
列出hadoop的所有文件 ls hadoop*2.8.5*.jar 做个笔记。
删除旧的hadoop库 rm hadoop*2.8.5*.jar .
从hadoop解压文件夹中查找注解的二进制文件(如果可用)?否则,根据hadoop版本从maven存储库hadoop binary home下载二进制文件。
转到$hbase\u home/lib,复制所有下载的二进制文件。
启动hbase,基于我的示例hbase ui将显示hadoop版本,如下所示
hadoop版本2.9.2,修订版=826AFBEAE31CA687BC2F8471C841B66ED2C6704
总的来说,您必须确保hbase lib中只有您尝试使用的hadoop的所有二进制文件。

相关问题