Hadoop之HBase安装和配置
1、确保Hadoop已安装/配置
在进行HBase安装和配置之前,首先要确保Hadoop已经安装/配置,并且可以成功运行:
如还没配置好Hadoop,请参考:基于Linux的Hadoop伪分布式安装
1.1 启动Hadoop
cd /usr/local/hadoop/sbin # 进入该目录 start-all.sh # 启动服务
jps # 查看进程(6个为正常启动)
1.2 查看Hadoop版本(要兼容Hbase)
hadoop version
进入Apache官网查看版本兼容情况:https://hbase.apache.org/book.html#hadoop
上述已查看Hadoop版本为3.2.4,所以可以安装Hbase-2.3.x或Hbase-2.4.x
2、HBase安装
2.1 下载Hbase-2.4.14
清华大学镜像站:https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/
在Linux下载速度较慢,可以先在Windows中下载该文件,然后使用Xshell拖进Linux中即可:Windows文件直接上传到Linux
2.2 解压并改名
解压安装包hbase-2.4.14-bin.tar.gz至路径 /usr/local,命令如下:
sudo tar -zxf ~/下载/hbase-2.4.14-bin.tar.gz -C /usr/local
将解压的文件名hbase-2.4.14-bin.tar.gz改为hbase,以方便使用,命令如下:
sudo mv /usr/local/hbase-2.4.14 /usr/local/hbase
2.3 配置环境变量
将hbase下的bin目录添加到path中,这样,启动hbase就无需到/usr/local/hbase目录下,大大的方便了hbase的使用。
2.3.1 编辑 ~/.bashrc 文件
sudo vi ~/.bashrc
请在~/.bashrc
文件尾行添加如下内容:
编辑完成后,再执行source
命令使上述配置在当前终端立即生效,命令如下:
source ~/.bashrc
2.3.2 添加HBase权限
cd /usr/local sudo chown -R hadoop ./hbase #将hbase下的所有文件的所有者改为hadoop,hadoop是当前用户的用户名。
2.3.3 查看HBase版本,判断是否安装成功
/usr/local/hbase/bin/hbase version
应该是成功了吧?
3、HBase伪分布模式配置
HBase有三种运行模式,单机模式、伪分布式模式、分布式模式。以下先决条件很重要,如果没有配置好,就会报错:
jdk Hadoop(伪分布式模式需要) SSH
3.1 配置hbase-env.sh
vi /usr/local/hbase/conf/hbase-env.sh
配置JAVA_HOME,HBASE_CLASSPATH,HBASE_MANAGES_ZK。
HBASE_CLASSPATH设置为本机Hadoop安装目录下的conf目录(即/usr/local/hadoop/conf
)
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export HBASE_CLASSPATH=/usr/local/hadoop/conf export HBASE_MANAGES_ZK=true
3.2 配置hbase-site.xml
用vi打开并编辑hbase-site.xml,命令如下:
vi /usr/local/hbase/conf/hbase-site.xml
- 修改hbase.rootdir,指定HBase数据在HDFS上的存储路径;
- 将属性hbase.cluter.distributed设置为true;
- 假设当前Hadoop集群运行在伪分布式模式下,在本机上运行,且NameNode运行在9000端口。
<configuration> <property> <name>hbase.rootdir</name> <value>hdfs://localhost:9000/hbase</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> </configuration>
hbase.rootdir指定HBase的存储目录;hbase.cluster.distributed设置集群处于分布式模式。
3.3 测试运行HBase
第一步:首先登陆ssh,之前设置了无密码登陆,因此这里不需要密码;
第二步:再切换目录至/usr/local/hadoop
;
第三步:启动hadoop(如果已经启动hadoop请跳过此步骤)。
ssh localhost cd /usr/local/hadoop ./sbin/start-dfs.sh
输入命令jps,能看到NameNode,DataNode和SecondaryNameNode都已经成功启动,表示hadoop启动成功,如下:
切换目录至/usr/local/hbase
,启动HBase:
cd /usr/local/hbase bin/start-hbase.sh
启动成功,输入命令jps,看到以下界面说明Hbase启动成功:
进入Shell界面:
停止HBase运行:
bin/stop-hbase.sh
4、Bug 1
参考博客:https://blog.csdn.net/weixin_42181264/article/details/112168270
错误如下:
SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-reload4j-1.7.35.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/usr/local/hbase/lib/client-facing-thirdparty/slf4j-reload4j-1.7.33.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.slf4j.impl.Reload4jLoggerFactory]
说明这是jar包冲突,分别为:
SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-reload4j-1.7.35.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/usr/local/hbase/lib/client-facing-thirdparty/slf4j-reload4j-1.7.33.jar!/org/slf4j/impl/StaticLoggerBinder.class]
移除其中一个jar包即可:
cd /usr/local/hadoop/share/hadoop/common/lib rm slf4j-reload4j-1.7.35.jar
运行结果:
问题解决!!!
5、Bug 2
参考博客:https://blog.csdn.net/Software_E/article/details/121390033
错误如下:
/usr/local/hadoop/libexec/hadoop-functions.sh: 行 2366: HADOOP_ORG.APACHE.HADOOP.HBASE.UTIL.GETJAVAPROPERTY_USER:无效的变量名 /usr/local/hadoop/libexec/hadoop-functions.sh: 行 2461: HADOOP_ORG.APACHE.HADOOP.HBASE.UTIL.GETJAVAPROPERTY_OPTS:无效的变量名
解决方法:
打开 ~/hbase-2.3.7/conf (目录根据自己的目录进行修改)目录下的hbase-env.sh文件中进行编辑:
解除注释!
运行结果:
问题解决!!!
6、Bug 3
参考博客:https://blog.csdn.net/qq_44642612/article/details/104379893
错误如下:
2022-10-12 16:28:02,575 WARN [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
解决方法:
进入/usr/local/hadoop/etc/hadoop/log4j.properties
文件中,在文件末尾添加指令:
cd /usr/local/hadoop/etc/hadoop sudo vi log4j.properties
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR
运行结果:
好像没有解决,警告也不碍事?