Hadoop HA高可用集群搭建(Hadoop+Zookeeper+HBase)

1 篇文章 0 订阅
1 篇文章 0 订阅

一、服务器环境
主机名 IP 用户名 密码 安装目录
master 192.168.142.124 root xxx /usr/hadoop-2.6.5/
slave1 192.168.142.125 root xxx /usr/hadoop-2.6.5/
slave2 192.168.142.126 root xxx /usr/hadoop-2.6.5/
二、集群规划
描述 master slave1 slave2
HDFS主节点 NameNode NameNode
HDFS从节点 DataNode DataNode DataNode
YARN主节点 ResourceManager ResourceManager
YARN从节点 NodeManager NodeManager NodeManager
HBase主节点 HMaster HMasetr
HBase从节点 RegionServer RegionServer RegionServer
Zookeeper独立进程 QuorumPeerMain QuorumPeerMain QuorumPeerMain
NameNodes数据同步 JournalNode JournalNode JournalNode
主备故障切换 DFSZKFailoverController DFSZKFailoverController
JDK、Hadoop、HBase版本兼容性(NS:不兼容;NT:未测试;Y:兼容):
HBase Version JDK 6 JDK 7 JDK 8
2.0 X X Y
1.3 X Y Y
1.2 X Y Y
1.1 X Y NT
1.0 X Y NT
0.98 Y Y NT
0.94 Y Y N
Hadoop\HBase HBase-1.1.x HBase-1.2.x HBase-1.3.x HBase-2.0.x
Hadoop-2.0.x-alpha X X X X
Hadoop-2.1.0-beta X X X X
Hadoop-2.2.0 NT X X X
Hadoop-2.3.x NT X X X
Hadoop-2.4.x Y Y Y X
Hadoop-2.5.x Y Y Y X
Hadoop-2.6.0 X X X X
Hadoop-2.6.1+ NT Y Y Y
Hadoop-2.7.0 X X X X
Hadoop-2.7.1+ NT Y Y Y
Hadoop-2.8.0 X X X X
Hadoop-2.8.1 X X X X
Hadoop-3.0.0-alphax NT NT NT NT
考虑到HBase与JDK、Hadoop各版本兼容性,我们采用的组件版本如下:
组件 版本
JDK 1.8
Hadoop 2.6.5
Zookeeper 3.4.10
HBase 1.2.4
三、安装配置Zookeeper
1、下载及安装
下载地址:涉及到的相关jar都上传到百度网盘的大数据文件夹下;
在master机器上,下载后解压到/usr/目录下:
tar -zxvf zookeeper-3.4.10.tar.gz

2、拷贝 zoo_sample.cfg
进入zookeeper的conf目录,拷贝zoo_sample.cfg并重命名为zoo.cfg :
cd zookeeper-3.4.11/conf/
cp zoo_sample.cfg zoo.cfg

3、修改 zoo.cfg
vi zoo.cfg

修改如下,若原文件没有dataDir则直接添加:
dataDir=/home/hadoop/zookeeper-3.4.11/data/zkData
//在最后添加,指定zookeeper集群主机及端口,机器数必须为奇数
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

4、创建并编辑myid
//在zookeeper根目录下创建zoo.cfg中配置的目录
mkdir data/zkData/ -p
//创建并编辑文件
vi myid
//输入1,即表示当前机器为在zoo.cfg中指定的server.1
1
//保存退出
:wq

5、拷贝zookeeper到其他机器
上述操作是在master机器上进行的,要将zookeeper拷贝到其他zookeeper集群机器上:
cd /usr/
scp -r zookeeper-3.4.10/ root@slave1:/usr/
scp -r zookeeper-3.4.10/ root@slave2:/usr/

集群中各组件的安装目录最好保持一致。

6、修改其他机器的myid文件
myid文件是作为当前机器在zookeeper集群的标识,这些标识在zoo.cfg文件中已经配置好了,但是之前在master这台机器上配置的myid为1,所以还需要修改其他机器的myid文件:
//在slave1机器上
echo 2 > /usr/zookeeper-3.4.10/data/zkData/myid
//在slave2机器上
echo 3 > /usr/zookeeper-3.4.10/data/zkData/myid

7、启动zookeeper集群
cd zookeeper-3.4.10/bin/
//分别在master、slave1、slave2上启动
./zkServer.sh start
//查看状态
./zkServer.sh status

三台机器的zookeeper状态必须只有一个leader,其他都是follower。
//查看进程,若有QuorumpeerMain,则启动成功
jps

四、安装配置Hadoop
1、下载及安装
下载地址:已上传到百度网盘
在master机器上,解压到/usr/目录下:
tar -zxvf hadoop-2.6.5.tar.gz

2、配置
进入配置文件目录,修改配置文件
cd hadoop-2.6.5/etc/hadoop/

1)vi hadoop-env.sh
配置JDK安装路径:
JAVA_HOME=/home/test/jdk1.8

2)vi core-site.xml

fs.defaultFS hdfs://ns1 hadoop.tmp.dir /usr/hadoop-2.6.5/hadoop ha.zookeeper.quorum master:2181,slave1:2181,slave2:2181

3)vi hdfs-site.xml

dfs.replication 3 dfs.nameservices ns1 dfs.ha.namenodes.ns1 master,slave1 dfs.namenode.rpc-address.ns1.master master:9000 dfs.namenode.rpc-address.ns1.slave1 slave1:9000 dfs.namenode.http-address.ns1.master master:50070 dfs.namenode.http-address.ns1.slave1 slave1:50070 dfs.namenode.shared.edits.dir qjournal://master:8485;slave1:8485;slave2:8485/ns1 dfs.ha.automatic-failover.enabled.ns1 true dfs.journalnode.edits.dir /usr/hadoop-2.6.5/data/dfs/journalnode dfs.client.failover.proxy.provider.ns1 org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider dfs.ha.fencing.methods sshfence shell(/bin/true) dfs.ha.fencing.ssh.private-key-files /root/.ssh/id_rsa dfs.ha.fencing.ssh.connect-timeout 30000

4)vi mapred-site.xml

mapreduce.framework.name yarn

5)vi yarn-site.xml

yarn.resourcemanager.ha.enabled true yarn.resourcemanager.cluster-id yrc yarn.resourcemanager.ha.rm-ids rm1,rm2 yarn.resourcemanager.hostname.rm1 master yarn.resourcemanager.hostname.rm2 slave1 yarn.resourcemanager.ha.id rm1 yarn.resourcemanager.zk-address master:2181,slave1:2181,slave2:2181 yarn.nodemanager.aux-services mapreduce_shuffle

6)vi slaves
master
slave1
slave2

3、拷贝hadoop到其他机器
1)拷贝
scp -r hadoop-2.6.5 root@slave1:/usr/
scp -r hadoop-2.6.5 root@slave2:/usr/

2)修改yarn-site.xml
在slave1机器,即ResourceManager备用主节点上修改如下属性,表示当前机器作为rm2::

yarn.resourcemanager.ha.id
rm2

同时删除slave2机器上的该属性对,因为slave2机器并不作为ResourceManager。

4、启动Hadoop
1)启动Journalnode
cd hadoop-2.6.5/sbin/
./hadoop-daemon.sh start journalnode

//查看进程JouralNode是否启动
jps

2)格式化 NameNode和ZKFC
在master机器上,执行格式化操作:
cd hadoop-2.6.5/bin
./hdfs namenode -format
./hdfs zkfc -formatZK
注意:格式化之后需要将namenode信息同步拷贝到备用主节点对应目录下(slave1的/usr目录)
namenode信息保存在${hadoop.tmp.dir}/dfs/name目录下(默认),即:
cd /usr/hadoop-2.6.5/
scp -r hadoop/ root@slave1:/usr/
这一步操作保证备用主节点的namenode也能启动成功;

3)备用主节点同步主节点元数据
在slave1(备用主节点)机器上,执行同步操作:
cd hadoop-2.6.5/bin
./hdfs namenode -bootstrapStanby

4)安装fuster
若服务器是最小化安装centeros时,有可能系统没有fuster程序,那么跳过这个安装步骤直接进行后面的操作时,将有可能出现以下问题:
master188作为主节点时,kill掉master188上的NameNode和ResourceManager进程时,可以实现故障转移,master189将从stanby状态自动变成active状态;但是当master189作为主节点时,若kill掉master189上的进程,master188上的进程状态却还是stanby,并不能实现故障自动转移。原因是我们在 hdfs-site.xml中配置了当集群需要故障自动转移时采用SSH方式进行,而因为缺少fuster程序,将在zkfc的日志文件中发现如下错误:
PATH=$PATH:/sbin:/usr/sbin fuser -v -k -n tcp 9000 via ssh: bash: fuser: 未找到命令
Unable to fence service by any configured method
java.lang.RuntimeException: Unable to fence NameNode at master189/192.168.29.189:9000

提示未找到fuster程序,导致无法进行fence,所以可以通过如下命令来安装,Psmisc软件包中包含了fuster程序:
//分别在master、slave1、slave2上执行
yum install psmisc

5)启动HDFS、YARN、ZookeeperFailoverController
在master机器上:
cd hadoop-2.6.5/sbin
./start-dfs.sh
//验证,显示NameNode和DataNode
jps

./start-yarn.sh
//验证,显示ResourceManager和NodeManager
jps

./hadoop-daemon.sh start zkfc
//验证,显示ZookeeperFailoverController
jps

在slave1机器上,启动ResourceManager,备用主节点的ResourceManager需要手动启动:
cd hadoop-2.6.5/sbin
yarn-daemon.sh start resourcemanager

同时需要手动启动备注主节点上的zkfc:
cd hadoop-2.6.5/sbin
./hadoop-daemon.sh start zkfc

这一步保证主节点的namenode挂掉之后,备用主节点的namenode的状态会由standby状态切换到active状态
6)查看Namenode、ResourceManager状态
在master188机器上执行:
hdfs haadmin -getServiceState master188
yarn rmadmin -getServiceState rm1

hdfs haadmin -getServiceState master189
yarn rmadmin -getServiceState rm2

也可以通过Web界面来查看,浏览器中输入 ip:50070 查看HDFS,输入 ip:8088/cluster/cluster 查看YARN。
7)测试高可用
a.主节点—>备用主节点
kill掉主节点的namenode,查看备用主节点的namenode状态是否切换为active;
kill掉主节点的ResourceManager,查看备用主节点的ResourceManager是否切换为active;
b.备用主节点—>主节点
若上述操作执行成功,那么再测试反向故障自动转移
先启动被杀死的原主节点的namenode和ResourceManager
hadoop-daemon.sh start namenode

yarn-daemon.sh start resourcemanager

再kill备用主节点的namenode和ResourceManager,查看主节点的状态,若能切换为active,那么Hadoop HA高可用集群搭建完成。

五、安装配置HBase
1、下载及安装
下载地址:已上传到百度网盘
在master机器上,解压到/usr/目录下:
tar -zxvf hbase-1.2.4-bin.tar.gz

2、配置
进入hbase-1.2.4/conf/目录,修改配置文件:
cd hbase-1.2.4/conf/

1)vi hbase-env.sh
//配置JDK
export JAVA_HOME=/home/test/jdk1.8
//保存pid文件
export HBASE_PID_DIR=/usr/hbase-1.2.4/data/hbase/pids
//修改HBASE_MANAGES_ZK,禁用HBase自带的Zookeeper,因为我们是使用独立的Zookeeper
export HBASE_MANAGES_ZK=false

2)vi hbase-site.xml

hbase.rootdir hdfs://master:9000/hbase hbase.master hdfs://master:60000 hbase.cluster.distributed true hbase.zookeeper.quorum master:2181,slave1:2181,slave2:2181 hbase.zookeeper.property.dataDir /usr/zookeeper-3.4.10 hbase.zookeeper.property.clientPort 2181

3)vi regionservers
修改regionservers文件,因为当前是使用独立的Zookeeper集群,所以要指定RegionServers所在机器:
master
slave1
slave2

4)创建pid文件保存目录
在/usr/hbase-1.2.4/目录下:
mkdir data/hbase/pids -p

3、拷贝HBase到其他机器
cd /usr/hbase-1.2.4/
scp -r hbase-1.2.4 root@slave1:/usr/
scp -r hbase-1.2.4 root@slave2:/usr/

4、启动HBase
在主节点上启动HBase(这里的主节点是指NameNode状态为active的节点,而非指文中对本实验的机器声明):
cd hbase-1.2.4/bin
./start-hbase.sh

//查看HMaster、Regionserver进程是否启动
jps

注意:此时Hadoop集群应处于启动状态,并且是在主节点执行start-hbase.sh启动HBase集群,否则HMaster进程将在启动几秒后消失,而备用的HMaster进程需要在备用主节点单独启动,命令是:./hbase-daemon.sh start master。

在备用主节点启动HMaster进程,作为备用HMaster:
cd hbase-1.3.1/bin
./hbase-daemon.sh start master

5、HA高可用测试
在浏览器中输入 ip:16010 ,查看主节点和备用主节点上的HMaster的状态,在备用主节点的web界面中,可以看到“Current Active Master: master”,表示当前HBase主节点是master机器;
主节点—>备用主节点
这里的主节点指使用start-hbase.sh命令启动HBase集群的机器
kill掉主节点的HMaster进程,在浏览器中查看备用主节点的HBase是否切换为active;
若上述操作成功,则在主节点启动被杀死的HMaster进程:
cd hbase-1.3.1/bin/
./hbase-daemon.sh start master
然后,kill掉备用主节点的HMaster进程,在浏览器中查看主节点的HBase是否切换为active,若操作成功,则HBase高可用集群搭建完成;

6、HBase基本操作
//启动HBase
[root@vnet ~] start-hbase.sh

//进入HBase Shell
[root@vnet ~] hbase shell

//查看当前HBase有哪些表
hbase(main):> list

//创建表t_user,cf1和cf2是列族,列族一般不超过3个
hbase(main):> create ‘t_user’,‘cf1’,‘cf2’

//获得表t_user的描述信息
hbase(main):> describe ‘t_user’

//禁用表
hbase(main):> disable ‘t_user’

//删除表,删除表之前要先把表禁用掉
hbase(main):> drop ‘t_user’

//查询表是否存在
hbase(main):> exists ‘t_user’

//查看全表数据
hbase(main):> scan ‘t_user’

//插入数据,分别是表名、key、列(列族:具体列)、值。HBase是面向列的数据库,列可无限扩充
hbase(main):> put ‘t_user’ ,‘001’,‘cf1:name’,‘chenxj’
hbase(main):> put ‘t_user’ ,‘001’,‘cf1:age’,‘18’
hbase(main):> put ‘t_user’ ,‘001’,‘cf2:sex’,‘man’
hbase(main):> put ‘t_user’ ,‘002’,‘cf1:name’,‘chenxj’
hbase(main):> put ‘t_user’ ,‘002’,‘cf1:address’,‘fuzhou’
hbase(main):> put ‘t_user’ ,‘002’,‘cf2:sex’,‘man’

//获取数据,可根据key、key和列族等进行查询
hbase(main):> get ‘t_user’,‘001’
hbase(main):> get ‘t_user’,‘002’,‘cf1’
hbase(main):> get ‘t_user’,‘001’,‘cf1:age’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值