我正在尝试在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区域服务器的/ .pid文件相同的目录中/ usr / local / zookeeper / data /
下面我摘录了与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) 在org.apache.hadoop.hbase.master.HMaster.run(HMaster.java:547) 在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:未处理的异常。开始关机。 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) 在org.apache.hadoop.hbase.master.HMaster.run(HMaster.java:547) 在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
答案 0 :(得分:2)
我遇到了同样的问题,我的解决方案如下: 编辑hbase-site.xml并添加以下内容:
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
该属性控制HBase是否检查流功能(hflush / hsync)。更多详细信息请参考official website。
答案 1 :(得分:2)
我遇到了与您完全相同的问题。遇到问题时,我正在运行hbase-2.0.1和hadoop-2.9.1。我的解决方案是我下载了更高版本的hbase(hbase-0.98.13-hadoop2)。您正在使用的hadoop和hbase版本之间可能存在版本不兼容。
答案 2 :(得分:2)
理想情况下,我们不应该将hbase.unsafe.stream.capability.enforce
设置为false
。这是有风险的。相反,只需将您的某些hadoop二进制文件复制到hbase lib。
例如,
如果您的HBase是2.2.5,请使用Hadoop 2.8.5构建。 (您可以使用hbase库下的ls hadoop*2.8.5*.jar
文件对hadoop二进制文件进行grep,这将告诉您使用哪个HBase构建的Hadoop版本。)
当hbase.unsafe.stream.capability.enforce
设置为false
时,Curent HBase将Hadoop版本显示为
Hadoop版本2.8.5, 版本= 826afbeae31ca687bc2f8471dc841b66ed2c6704
现在我正在尝试将HBase 2.2.5(由Hadoop 2.8.5预先构建)与Hadoop 2.9.2结合使用
要解决的步骤是
ls hadoop*2.8.5*.jar
的所有文件并做笔记。rm hadoop*2.8.5*.jar
。Hadoop版本2.9.2, 版本= 826afbeae31ca687bc2f8471dc841b66ed2c6704
总体而言,您要确保HBase库仅包含要使用的Hadoop的所有二进制文件。
答案 3 :(得分:0)
您似乎从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。
答案 4 :(得分:0)
在使用HDFS作为base.rootdir的3-N Hbase群集上将HBase 2.2.1与Hadoop 3.2.1结合使用时,我遇到了类似的问题。
解决方案
hbase.unsafe.stream.capability.enforce
至false
hbase.wal.dir
更改为hbase.rootdir
之外的HDFS目录