centos7下hbase配置及解决错误: 找不到或无法加载主类 org.apache.hadoop.hbase.util.GetJavaProperty等三个问题

centos7下hbase安装配置及解决错误: 找不到或无法加载主类 org.apache.hadoop.hbase.util.GetJavaProperty等三个问题

文章背景

最近在为公司搭建hadoop集群,安装hbase的时候出现了很多问题,下面写了我遇到的三个坑,如果你们按着我的步骤操作,应该是可以避开一些错误的(不能保证能行,但是可以参考),另外安装到sqoop的时候出现了标题的那个错误,并且当敲出hbase version查询hbase版本的时候,虽然有结果显示,但是还是报这个错误出来,这个问题翻了好多页的百度才找到解决办法,比较坑,所以放标题了,方便其他人查到。如果不看配置的,可以直接跳到最下面,看错误的解决办法。其他的错误我穿插在配置里面了,你们找一下吧。
版本选择:
Hadoop:3.1.2
Hbase:2.2.1
顺便我想说一下版本选择的问题,其实版本选择的话都选最新的一般都没问题,百度了兼容上的选择,很多都说Hadoop3.1.1+和Hbase2.1.1+是兼容的,而我这2.2.1的反正我后来试了也是可以的。而当我出现了上面hbase的GetJavaProperty的那个错误的时候,百度查到一篇文章说是版本问题,文章说换了hbase的版本之后就可以用了。。我不是想质疑别人,但是我真的很想问一下那个作者是不是真的成功了,因为我为此换了3个版本,2.16,2.11,2.2.1,一直还是报一样的错误,也许是需要再往下换几个版本才行,所以说菜有时候就真的只能花时间试。。换版本太花时间了,其实这个错误其实就是找不到这个类,找到办法解决就可以了。

还是写上遇到什么坑吧:
1.启动hbase之后jps没有出现Hmaster,并且日志报错regionserver.HRegionServer: Failed construction RegionServer
2.以用hbase shell,写命令,就出现 ERROR: KeeperErrorCode = NoNode for /hbase/master
3.找不到或无法加载主类 org.apache.hadoop.hbase.util.GetJavaProperty

配置安装Hbase

Hadoop的安装我就不讲了,百度上很多教程,Hbase比较多问题我才说说而已。

1.下载Hbase的网址
这里有两个选择:
百度直接就找阿帕奇官网下载:https://hbase.apache.org/downloads.html
centos7下hbase配置及解决错误: 找不到或无法加载主类 org.apache.hadoop.hbase.util.GetJavaProperty等三个问题_第1张图片
按道理来说这两个版本都能用。
另外就是各种版本可供选择:http://archive.apache.org/dist/hbase/.
这个自己选把,啥版本都有。
可以浏览器下载好丢进去虚拟机,或者直接在命令行上用wget下载下来也行。
2.解压
下载好之后,解压,放到自己指定的目录下改个名字(这个自己喜欢)

tar -zxvf hbase-2.1.1-bin.tar.gz 
mv hbase-2.1.1 /opt/bigdata/hbase

3.修改环境变量和改配置文件

vi ~/.bash_profile

加上以下两行(按着自己的路径改)

export HBASE_HOME=/opt/bigdata/hbase
export PATH=$PATH:$HBASE_HOME/bin:/$HBASE_HOME/sbin

修改conf目录下的两个配置文件,这里比较重要
hbase-env.sh这里有个坑,有些文章说要把HBASE_CLASSPATH改一下,别改,改了就出问题,改下面两行就行了。

export JAVA_HOME=/usr/java/jdk1.8.0_221
export HBASE_MANAGES_ZK=false

hbase-site.xml
注释看完都删掉吧

<configuration>
    <property>
        <name>hbase.rootdir</name>
        <!– 这里建议指定HDFS上的目录为什么的话自己百度吧,端口号要与hdfs-site.xml中设为一致,hbase的这个目录不需要建,自动生成-->
        <value>hdfs://hadoop-master:9000/hbase</value>
    </property>
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    <property>
        <name>hbase.master</name>
        <value>hadoop-master:60000</value>
    </property>
    <property>
    	<!–这个tmp目录可能没有,自己建一个指定吧,没有会出问题,why?自己度娘-->
        <name>hbase.tmp.dir</name>
        <value>/opt/Bigdata/hbase/tmp</value>
    </property>
    <property>
    	<!–我是伪分布式,只有一个节点,如果你们多个节点,都写上就行了,例:mini1:2181,mini2:2181,mini3:2181-->
        <name>hbase.zookeeper.quorum</name>
        <value>hadoop-master</value>
    </property>
    <property>
    	<!–我是用自己装的zookeeper,所以在zookeeper目录下找,有些人是在指向hbase里的zookeeper目录里的data,视情况而定吧-->
        <name>hbase.zoopkeeper.property.dataDir</name>
        <value>/opt/Bigdata/zookeeper/zookeeper_3.4.14/zkdata</value>
    </property>
    <property>
        <name>hbase.zookeeper.property.clientPort</name>
        <value>2181</value>
    </property>
    <property>
        <name>hbase.regionserver.info.port</name>
        <value>16030</value>
    </property>
    <property> 
    	<name>hbase.master.info.port</name>
    	<value>16010</value>
	</property>
    <property>
        <name>hbase.unsafe.stream.capability.enforce</name>
        <value>false</value>
    </property>
    <property>
    	<!–这个一定要加!!不加就一用hbase shell就报一个"ERROR: KeeperErrorCode = NoNode for /hbase/master"错误,解决的刚刚说的第二个错-->
        <name>zookeeper.znode.parent</name>
        <value>/hbase-unsecure</value>
    </property>
</configuration>    

关于上面的zookeeper.znode.parent配置指的是ZooKeeper中的Hbase的根ZNode。所有的Hbase的ZooKeeper会用这个目录配置相对路径。默认情况下,所有的Hbase的ZooKeeper文件路径是用相对路径,所以他们会都去这个目录下面。 默认: /hbase(取自hbase默认配置说明.)
有说法是改成/hbase/master/主机名你们查查我上面写的错会查到很多,大家都可以试试,但是记得每一次你修改完zookeeper.znode.parent这个配置,需要打开zookeeper做以下操作:

./zookeeper/bin/zkCli.sh -server Commit-Master:2181,Commit-Slave-1:2181 #启动zookeeper的客户端
rmr /hbase (tab补齐一下就是你原本设置的zookeeper.znode.parent路径)

因为你每一次修改zookeeper都监控着,但是他不能覆盖路径,需要手动清除再覆盖。

这些配置我应该写的比较全的,有意见或者问题的可以评论区我们交流一下。
regionservers

vi regionservers

这个加上节点名字,如果有多个节点就都写进去就行了

hadoop-master

4.其他配置文件
接下来需要切到你的hbase目录下的lib目录找一个文件复制一下htrace-core4-4.2.0-incubating.jar文件到lib目录下,如果是2.1.x版本的,这个文件应该是htrace-core-3.1.0-incubating.jar,放的位置跟下面位置一样。
这个解决的是第一个启动不了Hmaster的问题。

cd /opt/bigdata/hbase/lib/client-facing-thirdparty
cp htrace-core4-4.2.0-incubating.jar ../   或者  cp htrace-core4-4.2.0-incubating.jar /opt/bigdata/hbase/lib/

然后把hadoop etc目录下的两个文件复制过来一下

cd /opt/bigdata/hadoop/etc/hadoop
cp core-site.xml /opt/bigdata/hbase/conf/
cp hdfs-site.xml /opt/bigdata/hbase/conf/

这里好像看到有些人也复制其他的配置文件,我母鸡,反正能用就行,报错再说把。

错误: 找不到或无法加载主类 org.apache.hadoop.hbase.util.GetJavaProperty

centos7下hbase配置及解决错误: 找不到或无法加载主类 org.apache.hadoop.hbase.util.GetJavaProperty等三个问题_第2张图片
最后这个问题,我们需要改一下hbase/bin/目录下的hbase文件

cd /opt/bigdata/hbase/bin
vi hbase

切到182行,在add_to_cp_if_exists “${HBASE_HOME}/hbase-server/target” 这里下面加上两行

        # Needed for GetJavaProperty check below
    add_to_cp_if_exists "${HBASE_HOME}/hbase-server/target/classes"

把下面大概186,187行的

	#add the hbase jars for each module
	for f in $HBASE_HOME/hbase-jars/hbase*.jar; do
		if [[ $f = *sources.jar ]]
	  then
	    : # Skip sources.jar
	  elif [ -f $f ]
	  then
	    CLASSPATH=${CLASSPATH}:$f;
	  fi
	done

这段删掉。
切到大概310行左右,在

  if [ -n "${HADOOP_IN_PATH}" ] && [ -f "${HADOOP_IN_PATH}" ]; then

下面加上一段:

  # If built hbase, temporarily add hbase-server*.jar to classpath for GetJavaProperty
  # Exclude hbase-server*-tests.jar
  temporary_cp=
  for f in "${HBASE_HOME}"/lib/hbase-server*.jar; do
    if [[ ! "${f}" =~ ^.*\-tests\.jar$ ]]; then
      temporary_cp=":$f"
    fi
  done

然后把

  HADOOP_JAVA_LIBRARY_PATH=$(HADOOP_CLASSPATH="$CLASSPATH" "${HADOOP_IN_PATH}" \ 

改成

  HADOOP_JAVA_LIBRARY_PATH=$(HADOOP_CLASSPATH="$CLASSPATH${temporary_cp}" "${HADOOP_IN_PATH}" \

然后wq保存退出,重启一下hbase,就可以了。
很好!我知道你肯定想吐槽我不知道我写的什么东西,所以你再看看下面链接你就懂了。
https://reviews.apache.org/r/69299/diff/2/?expand=1
然后再查一下,正常了,其实我i也不知道这个报错有什么影响,因为就算不改,hbase好像是可以正常使用的。
在这里插入图片描述

你可能感兴趣的:(hbase)