当前位置: 代码迷 >> 综合 >> Hbase2.1.3分布式部署
  详细解决方案

Hbase2.1.3分布式部署

热度:49   发布时间:2023-12-17 17:01:09.0

我的Hadoop版本为2.7.6,jdk为1.8版本的,都和Hbase2.1.3兼容,部署在Cento7上,我将在五台虚拟机上测试部署 ( master1,master2, slave1,slave2,slave3 )

具体可以查看官网的给的表:http://hbase.apache.org/book.html#java, http://hbase.apache.org/book.html#hadoop

1.下载解压,配置环境变量

下面操作都在master1上操作,操作完成后再通过scp 传到其他几台虚拟机上

# 使用wget下载
wget https://www-us.apache.org/dist/hbase/2.1.3/hbase-2.1.3-bin.tar.gztar -zxvf hbase-2.1.3-bin.tar.gz # 解压vim /etc/profile  # 编辑文件,添加下面内容(Hbase的路径)export HBASE_HOME=/usr/local/hbase # hbase路径
export PATH=$PATH:$HBASE_HOME/bin

配置hbase之前,我的Hadoop和zookeeper都已经配置好了。参考下面两篇博客

https://blog.csdn.net/rongDang/article/details/88098476

https://blog.csdn.net/rongDang/article/details/87867442

在 /etc/profile 添加完hbase的路径后,要使环境变量生效,source /etc/profile

2.修改conf下的文件:hbase-env.sh,hbase-site.xml

首先将Hadoop中的两个文件: hdfs-site.xml和core-site.xml 文件复制到 hbase的conf 目录下。这样是告诉hbase,HDFS文件目录在哪,这两个文件中包含HDFS的目录信息

# 该操作在hbase的conf目录下执行
cp /usr/local/hadoop/etc/hadoop/hdfs-site.xml ./cp /usr/local/hadoop/etc/hadoop/core-site.xml ./

修改hbase-env.sh文件

# 指定jdk的路径
export JAVA_HOME=/usr/local/jdk# 不使用hbase自带的zookeeper
export HBASE_MANAGES_ZK=false

修改hbase-site.xml文件

        <!--设置HDFS上存放元数据的dir--><property><name>hbase.rootdir</name><value>hdfs://master1:9000/hbase</value></property><!--是否开放分布式--><property><name>hbase.cluster.distributed</name><value>true</value></property><!--zookeeper集群的URL配置,多个host中间用逗号--><property><name>hbase.zookeeper.quorum</name><value>master1,master2,slave1,slave2,slave3</value></property><!--zookeeper配置,日志存储路径--><property><name>hbase.zookeeper.property.dataDir</name><value>/usr/local/hbase/data</value></property><!--本地文件系统tmp目录,一般配置成local模式的设置一下,但是最好还是需要设置一下,因为很多文件都会默认设置成它下面的--><property><name>hbase.tmp.dir</name><value>/usr/local/hbase/tmp</value></property><property><name>zookeeper.znode.parent</name><value>/hbase</value></property><!--设置通信的接口--><property><name>hbase.zookeeper.property.clientPort</name><value>2181</value></property>

我的hbase-site.xml是这样设置的,因为是第一次部署出了很多问题,所以在百度上查了很多的内容,病急乱投医,site文件就改了这么多,捣鼓着,就配置好了

修改regionservers文件

这个文件和Hadoop中的slaves文件类似,改文件中写你要做为RegionServer的主机名,或主机地址,这里我将master2,slave1,slave2,slave3作为region服务器。

master2
slave1
slave2
slave3

上面操作都完成后,将hbase文件夹传到其他四台虚拟机上,同理,其他四台虚拟机也要修改 /etc/profile 文件。

scp -r /usr/local/hbase root@master2:/usr/local/

关于环境变量有没有配置好,通过 hbase version 查看hbase版本就可以知道

3.测试hbase

首先,开启Hadoop,zookeeper

在master1上执行: start-all.sh          开启Hadoop集群

在五台虚拟机上执行:zkServer.sh    开启zookeeper

开启hbase

在master1上执行: start-hbase.sh 

通过jps来查看状态

通过web来访问查看,

关于部署碰到的问题:

web访问时报  InvalidProtocolBufferException  错误:参考https://www.cndba.cn/dave/article/3325

查看hbase下logs中的日志文件,对应内容如下:

2019-03-18 22:15:00,556 INFO  [main] master.HMaster: hbase.rootdir=hdfs://master1:9000/hbase, hbase.cluster.distributed=true
2019-03-18 22:15:00,655 INFO  [master/master1:16000:becomeActiveMaster] master.HMaster: Adding backup master ZNode /hbase/backup-masters/master1,16000,1552961693744
2019-03-18 22:15:01,003 INFO  [master/master1:16000:becomeActiveMaster] master.ActiveMasterManager: Another master is the active master, null; waiting to become the next active master

master.ActiveMasterManager: Another master is the active master, null; waiting to become the next active master
这里的null值是导致异常的主要原因。

因为Hbase的信息是存储在Zookeeper中的,之前测试的结果可能对这里产生了影响,所以连上Zookeeper,把/hbase目录删除了。

zkCli.sh   # 进入zookeeperget /hbase  rmr /hbase   # 递归删除hbase下的内容

删除后,再重新启动hbase的master 

hbase-daemon.sh stop master
hbase-daemon.sh start master

再次通过网页查看就成功了。