Centos7下HBase安装与配置(亲测!)

目录

    • Centos7下Hadoop完全分布式安装
    • 第一步:安装软件
      • (1)上传文件
      • (2)解压文件
    • 第二步:配置环境变量
    • 第三步:修改配置文件
      • (1)修改hbase-env.sh配置文件
      • (2)修改hbase-site.xml配置文件
      • (3)修改regionservers 文件
      • (4)配置backup-masters (可选)
    • 第四步:分发配置文件
    • 第五步:启动与检测
    • 第六步:常见问题
    • 总结

Centos7下Hadoop完全分布式安装

  • 电脑系统:macOS 10.15.4
  • 虚拟机软件:Parallels Desktop14
  • Hadoop各节点节点操作系统:CentOS 7
  • JDK版本:jdk1.8.0_162
  • HBase版本:hbase-1.2.0-cdh5.9.3

hbase的下载源地址:
官网:
https://archive.cloudera.com/cdh5/cdh/5/
CDH版本:
https://archive.apache.org/dist/hadoop/

第一步:安装软件

(1)上传文件

将本机的安装包上传到虚拟机node1,上传方式:

scp 本机的文件绝对路径 [email protected]:/opt/Hadoop

(2)解压文件

上传成功之后需要对文件赋予权限

chmod u+x hbase-1.2.0-cdh5.9.3.tar.gz

解压文件:

tar -zxvf hbase-1.2.0-cdh5.9.3.tar.gz

创建软链接:

ln -s hbase-1.2.0-cdh5.9.3 hbase

第二步:配置环境变量

vim ~/.bashrc

然后添加以下内容,注意三台虚拟机都需要配置环境变量

export HBASE_HOME=/opt/Hadoop/hbase
export PATH=$HBASE_HOME/bin:$PATH

最后使之生效

source ~/.bashrc

第三步:修改配置文件

(1)修改hbase-env.sh配置文件

第一步
进入到conf目录下

cd /opt/Hadoop/hbase/conf
vim hbase-env.sh

找到export JAVA_HOME,将前面的**#**去掉
修改为:

export JAVA_HOME=/opt/Hadoop/jdk1.8.0_162

第二步
接着找到图中红框的部分,将它注释掉

原理解释: 启动hbase的时候报出警告

Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0

查看配置文件
#Configure PermSize. Only needed in JDK7. You can safely remove it for JDK8+
这里我用的是jdk8,按照上面的操作将那两行注释掉就不会报出警告了。
第三步
找到export HBASE_MANAGES_ZK,将前面的#去掉
修改为:

export HBASE_MANAGES_ZK=false

原理解释:这里我们不用自带的zookeeper,选择用我们自己的zookeeper
想查看zookeeper安装的详细操作点这里!

这样hbase-env.sh文件就配置成功了

(2)修改hbase-site.xml配置文件

首先进入到/opt/Hadoop/hbase目录下

mkdir zookeeper-data

创建zookeeper-data目录文件

vim hbase-site.xml

添加如下内容

<configuration>
         <!-- Hbase的数据保存在HDFS对应的目录下 -->
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://node1:8020/hbase</value>
        </property>

        <!-- 是否是分布式环境 -->
        <property>
                <name>hbase.cluster.distributed</name>
                <value>true</value>
        </property>

        <!-- 配置ZK的地址,3个节点都启用Zookeeper -->
        <property>
                <name>hbase.zookeeper.quorum</name>
                <value>node1,node2,node3</value>
        </property>

        <!-- 冗余度 -->
        <property>
                <name>dfs.replication</name>
                <value>2</value>
        </property>

        <!-- 主节点和从节点允许的最大时间误差 -->
        <property>
                <name>hbase.master.maxclockskew</name>
                <value>180000</value>
        </property>

        <!-- zookeeper数据目录 -->
        <property>
                <name>hbase.zookeeper.property.dataDir</name>
                <value>/opt/Hadoop/hbase/zookeeper-data</value>
        </property>
		<!-- 设置网页端口号 -->
        <property>
                <name>hbase.master.info.port</name>
                <value>60010</value>
        </property>
</configuration>

根据自己的配置适当修改

(3)修改regionservers 文件

cd /opt/Hadoop/hbase/conf
vim regionservers

将下面的内容换成

node1
node2
node3

(4)配置backup-masters (可选)

为了增加hbase集群的可用性,可以为hbase增加多个backup master。当master挂掉后,backup master可以自动接管整个hbase的集群。配置backup master的方式是在hbase的conf下增加文件backup-masters,在该文件里面增加backup master的机器列表,每台机器一条记录。

cd /opt/Hadoop/hbase/conf
touch backup-masters

在里面添加内容

node2

第四步:分发配置文件

将node1的hbase-1.2.0-cdh5.9.3和hbase-1.2.0-cdh5.9.3.tar.gz文件分发到node2和node3上

scp -r hbase-1.2.0-cdh5.9.3 hbase-1.2.0-cdh5.9.3.tar.gz caizhengjie@node2:/opt/Hadoop/
scp -r hbase-1.2.0-cdh5.9.3 hbase-1.2.0-cdh5.9.3.tar.gz caizhengjie@node3:/opt/Hadoop/

分别在node2和node3上创建软连接

ln -s hbase-1.2.0-cdh5.9.3 hbase

第五步:启动与检测

在启动HBase之前要先把三台机的zookeeper给启动起来,不然会出现刚启动hbase的进程就消失,我通过查看日志文件,找出的原因是zookeeper没有启动。报错信息如下:

020-06-20 11:31:30,550 INFO  [main-SendThread(node1:2181)] zookeeper.ClientCnxn: Opening socket connection to server node1/10.211.55.59:2181. Will not attempt to authenticate using SASL (unknown error)
2020-06-20 11:31:30,550 WARN  [main-SendThread(node1:2181)] zookeeper.ClientCnxn: Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect
java.net.ConnectException: 拒绝连接
	at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
	at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
	at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:350)
	at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1081)
2020-06-20 11:31:30,652 INFO  [main-SendThread(node2:2181)] zookeeper.ClientCnxn: Opening socket connection to server node2/10.211.55.60:2181. Will not attempt to authenticate using SASL (unknown error)
2020-06-20 11:31:30,652 ERROR [main] zookeeper.RecoverableZooKeeper: ZooKeeper create failed after 4 attempts
2020-06-20 11:31:30,652 ERROR [main] master.HMasterCommandLine: Master exiting
java.lang.RuntimeException: Failed construction of Master: class org.apache.hadoop.hbase.master.HMaster. 
	at org.apache.hadoop.hbase.master.HMaster.constructMaster(HMaster.java:2486)
	at org.apache.hadoop.hbase.master.HMasterCommandLine.startMaster(HMasterCommandLine.java:231)
	at org.apache.hadoop.hbase.master.HMasterCommandLine.run(HMasterCommandLine.java:137)
	at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
	at org.apache.hadoop.hbase.util.ServerCommandLine.doMain(ServerCommandLine.java:127)
	at org.apache.hadoop.hbase.master.HMaster.main(HMaster.java:2496)
Caused by: org.apache.hadoop.hbase.ZooKeeperConnectionException: master:600000x0, quorum=node1:2181,node2:2181,node3:2181, baseZNode=/hbase Unexpected KeeperException creating base node
	at org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher.createBaseZNodes(ZooKeeperWatcher.java:206)
	at org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher.<init>(ZooKeeperWatcher.java:187)
	at org.apache.hadoop.hbase.regionserver.HRegionServer.<init>(HRegionServer.java:594)
	at org.apache.hadoop.hbase.master.HMaster.<init>(HMaster.java:420)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at org.apache.hadoop.hbase.master.HMaster.constructMaster(HMaster.java:2479)
	... 5 more
Caused by: org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase
	at org.apache.zookeeper.KeeperException.create(KeeperException.java:99)
	at org.apache.zookeeper.KeeperException.create(KeeperException.java:51)
	at org.apache.zookeeper.ZooKeeper.create(ZooKeeper.java:783)
	at org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper.createNonSequential(RecoverableZooKeeper.java:565)
	at org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper.create(RecoverableZooKeeper.java:544)
	at org.apache.hadoop.hbase.zookeeper.ZKUtil.createWithParents(ZKUtil.java:1204)
	at org.apache.hadoop.hbase.zookeeper.ZKUtil.createWithParents(ZKUtil.java:1182)
	at org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher.createBaseZNodes(ZooKeeperWatcher.java:194)
	... 13 more

下面开始启动HBase,在node1上输入命令:

start-hbase.sh

查看jps
node1会出现:

[caizhengjie@node1 ~]$ jps
2769 SecondaryNameNode
4804 QuorumPeerMain
4984 HMaster
6202 Jps
2475 NameNode
5244 HRegionServer
2606 DataNode

node2会出现:

[caizhengjie@node2 Hadoop]$ jps
3427 HRegionServer
2215 DataNode
3659 HMaster
3340 QuorumPeerMain
4302 Jps

node3会出现:

[caizhengjie@node3 logs]$ jps
2784 QuorumPeerMain
3431 Jps
2027 DataNode
2878 HRegionServer

则表示HBase安装成功,这里有的人会发现我的node1和node2出现了两个HMaster,因为我设置了backup-masters。

下面我来访问一下网页:http://10.211.55.59:60010/master-status
Centos7下HBase安装与配置(亲测!)_第1张图片
Centos7下HBase安装与配置(亲测!)_第2张图片
一切正常!

第六步:常见问题

在启动HBase的过程中会出现一些问题,不过也不要被这些问题吓到,通过查看日志文件,都是可以找到解决方案的。
我遇到的第一个问题:No space left on device
意思是磁盘空间不够,之前我安装的Hadoop,Hbase都是安装在/home/caizhengjie/目录下面的,但是随着文件数量新增,出现了磁盘空间不够,我通过df -h命令查看磁盘空间,果然不够
Centos7下HBase安装与配置(亲测!)_第3张图片
由图片可以看出home目录下的磁盘空间只有2.6G,而根目录下的空间有27G,因为是虚拟机,所以我可以在后面继续扩磁盘空间。因此我只好把Hadoop那些文件全部转移到/opt/目录下,这下就解决了磁盘不足的问题。

我遇到的第二个问题:运行HBase报SLF4J: Class path contains multiple SLF4J bindings
主要原因是slf4j-log4j12.jar包和Hadoop中的slf4j-log4j12.jar包冲突导致的
解决方法是将/opt/Hadoop/hbase/lib中的slf4j-log4j12.jar包删除即可,但是不要将三台机的slf4j-log4j12.jar包都给删掉,不然又会报错:Failed to load class org.slf4j.impl.StaticLoggerBinder,我是把node1和node2的给删除掉了,留下node3

参考文章:

  • 解决slf4j问题
  • http://www.slf4j.org/codes.html
  • 解决Java HotSpot™ 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0问题
  • https://www.cnblogs.com/QuestionsZhang/p/10281839.html
  • 解决SLF4J: Class path contains multiple SLF4J bindings问题
  • https://blog.csdn.net/qq_27575895/article/details/90238240
  • 解决HBase安装问题
  • https://www.jianshu.com/p/ecae88481db2
  • 解决Linux磁盘空间不足的问题
  • https://blog.csdn.net/u010455714/article/details/77711834

总结

对于新手安装HBase来说,就是照着其他的模版来也未必能不踩坑的顺利安装好,这里我就总结两点经验。第一:坚持!一定要坚持!行百里者半九十。第二:一定要多看日志文件!这一点非常重要,因为并不是所有的报错信息在网上都能找到,只有看到报错信息才能知道哪里的问题。通常对于小白来说,什么是日志信息?日志信息说白了就是所有的报错信都在日志信息里面。
如何查看日志信息?通常来说可以使用more或cat命令,日志信息在/opt/Hadoop/hbase/logs目录下
可以通过下面的命令来查看日志信息

cat hbase-caizhengjie-master-node1.log 

以上内容仅供参考学习,如有侵权请联系我删除!
如果这篇文章对您有帮助,左下角的大拇指就是对博主最大的鼓励。
您的鼓励就是博主最大的动力!

你可能感兴趣的:(Hadoop大数据技术)