基础知识:
- Hbase是借助zookeeper管理集群
- Hbase应该基于高可用大数据集群搭建
因此,需要先搭建高可用大数据集群,之前的集群是非高可用的大数据集群,因为它只有一个master进行集群管理,高可用大数据集群由两个master进行管理:一个是活动状态的maste,一个是备用状态的master。当活动状态的master故障时,备用状态的master接管集群管理工作。
高可用大数据集群不需要从头开始搭建,修改之前的非高可用大数据集群即可,增加一个master2,基本信息约定:
主机名 | IP地址 | 需要安装软件 |
master | 192.168.31.100 | jdk、hadoop、Hbase |
master2 | 192.168.31.200 | jdk、hadoop、Hbase |
slave1 | 192.168.31.101 | jdk、hadoop、ZooKeeper、Hbase |
slave2 | 192.168.31.102 | jdk、hadoop、ZooKeeper、Hbase |
slave3 | 192.168.31.103 | jdk、hadoop、ZooKeeper、Hbase |
一、将非高可用集群修改为高可用集群
1首先增加一个master2主节点
注意:为了防止配置错误导致集群不可用,请先将master,slave1,slave2,slave3节点拍摄快照!以便故障后恢复!
在D:\Virtual Machines下创建master2目录
2使用master创建链接克隆:
克隆完成后有5台机器:
将主机名设置为master2(不设置也可以不影响功能,设置后好看)
[root@localhost ~]# hostnamectl set-hostname master2
[root@localhost ~]# bash
[root@master2 ~]#
3将master2的固定IP设置为:192.168.31.200
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost ~]# systemctl restart network
[root@localhost ~]# ip addr
4验证能否ping通:
5修改配置文件
在master节点中修改hosts
[root@master ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.31.100 master
192.168.31.200 master2
192.168.31.101 slave1
192.168.31.102 slave2
192.168.31.103 slave3
集群中的每一个节点都要修改hosts文件,后面直接用scp远程传输发送命令发送即可
设置hadoop的配置文件:(配置与非高可用集群不一样)
修改core-site.xml
[root@master hadoop]# vim /root/app/hadoop-2.7.7/etc/hadoop/core-site.xml
原始的core-site.xml文件备份为 hadoop非高可用core-site.xml 放在本文件夹下
修改的配置项为:
<!--指定HDFS存储入口,采用mfkddd空间里的值-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://mfkddd</value>
</property>
<!--指定hadoop临时目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/root/app/hadoop-2.7.7/tmp</value>
</property>
<!--指定ZooKeeper节点-->
<property>
<name>ha.zookeeper.quorum</name>
<value>slave1:2181,slave2:2181,slave3:2181</value>
</property>
设置完毕,保存退出,已将此配置文件下载保存到本文件夹:hadoop高可用core-site.xml
修改hdfs-site.xml
[root@master hadoop]# vim /root/app/hadoop-2.7.7/etc/hadoop/hdfs-site.xml
<!--设备数据备份数量-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--高可用集群名字空间-->
<property>
<name>dfs.nameservices</name>
<value>mfkddd</value>
</property>
<!--指定NameNode节点的名字空间-->
<property>
<name>dfs.ha.namenodes.mfkddd</name>
<value>nn1,nn2</value>
</property>
<!--rpc:远程调用。设置第一个远程调用的端口和地址,有两个主节点,设置两次-->
<property>
<name>dfs.namenode.rpc-address.mfkddd.nn1</name>
<value>master:9000</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mfkddd.nn2</name>
<value>master2:9000</value>
</property>
<!--设置网页访问的地址和端口-->
<property>
<name>dfs.namenode.http-address.mfkddd.nn1</name>
<value>master:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mfkddd.nn2</name>
<value>master2:50070</value>
</property>
<!--设置日志文件(edits)存放在ZooKeeper节点中。放在QJournal集群下的QJCluster目录下-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://slave1:8485;slave2:8485;slave3:8485/QJCluster</value>
</property>
<!--设置ZooKeeper集群存放数据的真实地址。是QJournal真实数据存放路径-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/root/app/hadoop-2.7.7/QJEditsData</value>
</property>
<!--开启自动故障转移-->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!--设置故障转移的代理java类-->
<property>
<name>dfs.client.failover.proxy.provider.mfkddd</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--设置出现故障后,执行自定义的脚本,这里的ensure.sh是一个空脚本,如有需要,可以自己写上需要执行的命令-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/root/app/hadoop-2.7.7/ensure.sh)
</value>
</property>
<!--设置免密地址,实现ssh登录杀掉进程-->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!--设置ssh连接超时时间-->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
配置好的文件已保存为 hadoop 高可用hdfs-site.xml 可以直接上传覆盖,懒得写这么多配置项
修改yarn-site.xml
[root@master hadoop]# vim /root/app/hadoop-2.7.7/etc/hadoop/yarn-site.xml
配置项:
<!--设置mapreduce的清洗功能(shuffle)。NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--开启(resourcemanager的高可用功能)resourcemanagerHA,默认是false-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!--设置集群ID,RMHA为固定值,能保证管理节点的唯一性-->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>RMHA</value>
</property>
<!--配置resourcemanager的名字空间-->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!--配置第一个管理节点master-->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>master</value>
</property>
<!--配置第二个管理节点master2-->
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>master2</value>
</property>
<!--配置master管理的ZooKeeper集群-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>slave1:2181,slave2:2181,slave3:2181</value>
</property>
配置好的文件已保存为 hadoop高可用yarn-site.xml 可直接上传覆盖
至此,hadoop所有的配置文件修改完成
6将配置好的文件发送给其他节点:
将master上的hosts文件发送到其他节点
[root@master ~]# scp /etc/hosts master2:/etc/
[root@master ~]# scp /etc/hosts slave1:/etc/
[root@master ~]# scp /etc/hosts slave2:/etc/
[root@master ~]# scp /etc/hosts slave3:/etc/
将hadoop的配置文件发送到其他节点:
因为修改了多个文件,这里直接将配置文件所在的目录发送到其他节点,发送目录scp加参数-r
[root@master ~]# scp -r /root/app/hadoop-2.7.7/etc/hadoop/ master2:/root/app/hadoop-2.7.7/etc/
[root@master ~]# scp -r /root/app/hadoop-2.7.7/etc/hadoop/ slave1:/root/app/hadoop-2.7.7/etc/
[root@master ~]# scp -r /root/app/hadoop-2.7.7/etc/hadoop/ slave2:/root/app/hadoop-2.7.7/etc/
[root@master ~]# scp -r /root/app/hadoop-2.7.7/etc/hadoop/ slave3:/root/app/hadoop-2.7.7/etc/
设置免密登录,为了保证两个master都拥有对集群的管理权限,需要给两个master设置免密,并且分发给其他的节点(包含两个master节点)
在master中设置免密:
[root@master ~]# ssh-keygen -t rsa -P ''
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:kih8sowsaJu1jsJqH5i34jv3nBfn8Y7q4Zz0CRvY/Jo root@master
The key's randomart image is:
+---[RSA 2048]----+
| |
| |
| |
| . . . |
| + o o S |
|ooo= +o o |
|==o+ . B+ o |
|+=*.= =.X.o. |
|**B=.+oEo=.. |
+----[SHA256]-----+
将密钥分发给其他节点(包括自己):
[root@master ~]# ssh-copy-id master
[root@master ~]# ssh-copy-id master2
[root@master ~]# ssh-copy-id slave1
[root@master ~]# ssh-copy-id slave2
[root@master ~]# ssh-copy-id slave3
在master2中设置免密:
[root@master2 ~]# ssh-keygen -t rsa -P ''
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Ur8dmXJBixfhO/qecaZu3vUgXL5nRzKYxUfT2l0Bufw root@master2
The key's randomart image is:
+---[RSA 2048]----+
| +oo.o|
| + + .+|
| . . *..++|
| . . . B+ +|
| . S o B+o. |
| . Bo=oE.|
| o = =+.|
| ..O +=|
| =B ooo|
+----[SHA256]-----+
将密钥发送到所有节点,包括自己:
[root@master ~]# ssh-copy-id master
[root@master ~]# ssh-copy-id master2
[root@master ~]# ssh-copy-id slave1
[root@master ~]# ssh-copy-id slave2
[root@master ~]# ssh-copy-id slave3
7安装Zookeeper
主机名 | IP地址 | 需要安装软件 |
slave1 | 192.168.31.101 | jdk、hadoop、ZooKeeper、Hbase |
slave2 | 192.168.31.102 | jdk、hadoop、ZooKeeper、Hbase |
slave3 | 192.168.31.103 | jdk、hadoop、ZooKeeper、Hbase |
集群中Zookeeper的数量只能为奇数:因为管理master时,是通过投票机制进行管理的,以投票数最多的为准,偶数可能会出现平票的问题。
将安装包上传到slave1节点下的/root/app/
安装Zookeeper
[root@slave1 app]# cd /root/app
[root@slave1 app]# tar -zxvf zookeeper-3.4.10.tar.gz
[root@slave1 app]# rm -rf zookeeper-3.4.10.tar.gz
[root@slave1 app]# cd zookeeper-3.4.10
[root@slave1 zookeeper-3.4.10]# cd conf
[root@slave1 conf]# ls
configuration.xsl log4j.properties zoo_sample.cfg
以zoo_sample.cfg为模板,拷贝zoo.cfg
[root@slave1 conf]# cp zoo_sample.cfg zoo.cfg
[root@slave1 conf]# ls
configuration.xsl log4j.properties zoo.cfg zoo_sample.cfg
配置zoo.cfg:
先创建数据存放目录:
mkdir -p /root/app/zookeeper-3.4.10/tmp/zookeeper
[root@slave1 conf]# mkdir -p /root/app/zookeeper-3.4.10/tmp/zookeeper
[root@slave1 conf]# vim zoo.cfg
设置数据存放路径:
dataDir=/root/app/zookeeper-3.4.10/tmp/zookeeper
设置服务节点:
server.1=slave1:2888:3888
server.2=slave2:2888:3888
server.3=slave3:2888:3888
如下图所示:
然后在/root/app/zookeeper-3.4.10/tmp/zookeeper创建myid文件写入内容1,代表第一台服务器
[root@slave1 conf]# cd /root/app/zookeeper-3.4.10/tmp/zookeeper
[root@slave1 zookeeper]# vim myid
1
[root@slave1 zookeeper]# cat myid
1
[root@slave1 zookeeper]#
然后将配置好的zookeeper安装目录分发到其他两个节点
[root@slave1 zookeeper]# scp -r /root/app/zookeeper-3.4.10/ slave2:/root/app
[root@slave1 zookeeper]# scp -r /root/app/zookeeper-3.4.10/ slave3:/root/app
然后进入slave2,slave3,将myid文件的内容改为2,3
[root@slave2 zookeeper]# vim /root/app/zookeeper-3.4.10/tmp/zookeeper/myid
2
[root@slave3 app]# vim /root/app/zookeeper-3.4.10/tmp/zookeeper/myid
3
到此配置完成,然后开始格式化大数据集群
在三个slave中启动zookeeper进程:
[root@slave1 app]# /root/app/zookeeper-3.4.10/bin/zkServer.sh start
[root@slave2 zookeeper]# /root/app/zookeeper-3.4.10/bin/zkServer.sh start
[root@slave3 app]# /root/app/zookeeper-3.4.10/bin/zkServer.sh start
其中后,jps查看,启动成功后会有一个QuorumPeerMain进程
[root@slave1 app]# jps
10149 QuorumPeerMain
10175 Jps
三个节点启动成功后到master节点对zookeeper集群格式化:
[root@master ~]# hdfs zkfc -formatZK
格式化后,到zookeeper节点查询tmp目录下是否有版本,id信息,有说明格式化成功:
进入slave1节点查看:
[root@slave1 zookeeper-3.4.10]# cd /root/app/zookeeper-3.4.10
[root@slave1 zookeeper-3.4.10]# ls -R tmp/
tmp/:
zookeeper
tmp/zookeeper:
myid version-2 zookeeper.out zookeeper_server.pid
tmp/zookeeper/version-2:
acceptedEpoch currentEpoch log.100000001
出现了版本id信息,说明格式化成功
还可以登录到zookeeper集群验证格式化是否成功:
在slave1节点输入zookeeper集群启动命令:
[root@slave1 zookeeper-3.4.10]# /root/app/zookeeper-3.4.10/bin/zkCli.sh -server 192.168.31.101:2181
然后用ls /查询根目录下的目录
[zk: 192.168.31.101:2181(CONNECTED) 0] ls /
[zookeeper, hadoop-ha]
可以看到已经zookeeper集群中已出现hadoop高可用集群的管理目录
然后格式化namenode,需要先启动:zookpeer节点中的journalnode进程
[root@slave1 zookeeper-3.4.10]# hadoop-daemon.sh start journalnode
[root@slave2 zookeeper]# hadoop-daemon.sh start journalnode
[root@slave3 app]# hadoop-daemon.sh start journalnode
然后jps查看启动的进程:
[root@slave1 zookeeper-3.4.10]# jps
10576 JournalNode
10502 ZooKeeperMain
10666 Jps
10060 QuorumPeerMain
然后到master节点对namenode进行格式化:
[root@master ~]# hdfs namenode -format
23/04/17 01:16:44 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at master/192.168.31.100
************************************************************/
成功后会在hadoop安装目录下生产tmp目录
[root@master hadoop-2.7.7]# cd /root/app/hadoop-2.7.7/
[root@master hadoop-2.7.7]# ls
bin etc include lib libexec LICENSE.txt logs NOTICE.txt README.txt sbin share tmp
将tmp目录发送master2界面,进行数据的同步
[root@master hadoop-2.7.7]# scp -r /root/app/hadoop-2.7.7/tmp master2:/root/app/hadoop-2.7.7/
到此,高可用大数据集群初始化完成!
现在,正式启动高可用大数据集群,为了避免启动失败,请将虚拟机全部节点重启(reboot)一次
正式启动高可用大数据集群分为以下几个步骤:
1在3个zookpeer节点启动zookeeper进程
[root@slave1 ~]# /root/app/zookeeper-3.4.10/bin/zkServer.sh start
[root@slave2 ~]# /root/app/zookeeper-3.4.10/bin/zkServer.sh start
[root@slave3 ~]# /root/app/zookeeper-3.4.10/bin/zkServer.sh start
jps查看有QuorumPeerMain进程,代表启动成功
[root@slave1 ~]# jps
7872 Jps
7830 QuorumPeerMain
2 在master节点启动hadoop进程
[root@master ~]# start-all.sh
启动成功后,会有NameNode,ResourceManager以及故障转移进程:DFSZKFailoverController
[root@master ~]# jps
8483 Jps
8389 ResourceManager
7990 NameNode
8270 DFSZKFailoverController
3 在master2中启动ResourceManager进程,要小写(不需要这个,master节点启动成功后,master2就可以直接用了!)
[root@master2 ~]# yarn-daemon.sh start resourcemanager (不执行这个)
再启动namenode进程:
[root@master2 ~]#hadoop-daemon.sh start namenode (不执行这个)
[root@master2 ~]# jps
8185 ResourceManager
8873 Jps
8461 NameNode
7966 DFSZKFailoverController
到此,整个集群启动成功
验证是否成功还可以在浏览器中访问两个master的地址栏查看:
http://192.168.31.200:50070/
***********************************************************************
但是会发现datanode没有启动(原因Centos会定期删除长时间不使用的临时文件,这样长时间不使用hadoop集群,会导致namenode和datanode节点的id信息不统一,因而识别不到)
在所有节点中执行以下命令
[root@master2 hadoop-2.7.7]# rm -rf /tmp/hadoop*
[root@master2 hadoop-2.7.7]# rm -rf /root/app/hadoop-2.7.7/tmp/*
[root@master2 hadoop-2.7.7]# rm -rf /root/app/hadoop-2.7.7/logs/*
在三个slave节点下执行以下命令:
[root@slave2 ~]# rm -rf /root/app/zookeeper-3.4.10/tmp/zookeeper/version*
[root@slave1 ~]# rm -rf /root/app/zookeeper-3.4.10/tmp/zookeeper/zookeeper*
删除后只保留myid文件
[root@slave1 ~]# tree /root/app/zookeeper-3.4.10/tmp/zookeeper/
然后回到:在三个slave中启动zookeeper进程: 这个步骤,从上到下执行
成功后两个master节点都能看到3个数据节点
***********************************************************************
搭建hbase集群环境(需要在每个节点5台服务器中都安装Hbase)
其中master,master2作为Hbase的主节点
主机名 | IP地址 | 需要安装软件 |
master | 192.168.31.100 | jdk、hadoop、Hbase |
master2 | 192.168.31.200 | jdk、hadoop、Hbase |
slave1 | 192.168.31.101 | jdk、hadoop、ZooKeeper、Hbase |
slave2 | 192.168.31.102 | jdk、hadoop、ZooKeeper、Hbase |
slave3 | 192.168.31.103 | jdk、hadoop、ZooKeeper、Hbase |
将文件上传到master的/root/app/
安装Hbase:
[root@master app]# cd /root/app
[root@master app]# tar -zxvf hbase-1.3.1-bin.tar.gz
[root@master app]# rm -rf hbase-1.3.1-bin.tar.gz
[root@master app]# cd hbase-1.3.1
配置环境变量:
[root@master hbase-1.3.1]# vim /etc/profile
#hbase path
export HBASE_HOME=/root/app/hbase-1.3.1
export PATH=$PATH:$HBASE_HOME/bin
进入conf目录配置
[root@master conf]# cd /root/app/hbase-1.3.1/conf
[root@master conf]# vim hbase-env.sh
export HBASE_HOME=/root/app/hbase-1.3.1
export JAVA_HOME=/root/app/jdk1.8.0_202
export HADOOP_HOME=/root/app/hadoop-2.7.7
#日志文件
export HBASE_LOG_DIR=$HBASE_HOME/logs
#pid文件
export HBASE_PID_DIR=$HBASE_HOME/pids
#是否开启zookeeper管理
export HBASE_MANAGES_ZK=false
添加到这里:
[root@master conf]# vim hbase-site.xml
<configuration>
<!--设置hbase在hdfs中的命名空间-->
<property>
<name>hbase.rootdir</name>
<value>hdfs://mfkddd/hbase</value>
</property>
<!--设置hmaster的rpc端口-->
<property>
<name>hbase.master.port</name>
<value>16000</value>
</property>
<!--设置hmaster的http端口-->
<property>
<name>hbase.master.info.port</name>
<value>16010</value>
</property>
<!--设置缓存文件的路径-->
<property>
<name>hbase.tmp.dir</name>
<value>/root/app/hbase-1.3.1/tmp</value>
</property>
<!--开启Hbase分布模式-->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!--指定zookeeper集群位置-->
<property>
<name>hbase.zookeeper.quorum</name>
<value>slave1,slave2,slave3</value>
</property>
<!--指定zookeeper集群端口-->
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<!--指定zookeeper数据目录,必须与zookeeper集群中dataDir配置一致-->
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/root/app/zookeeper-3.4.10/tmp/zookeeper</value>
</property>
</configuration>
文件已保存为:Hbase高可用hbase-site.xml 直接上传覆盖即可
设置regionservers文件,这里设置的节点将作为hbase的从节点,用于数据的存储和计算
[root@master conf]# vim regionservers
slave1
slave2
slave3
创建并设置backup-masters,用于设置备份的master
[root@master conf]# vim backup-masters
master2
到此所有配置文件设置完成!
将hbase的安装目录同步到其他的节点:
[root@master conf]# scp -r /root/app/hbase-1.3.1/ master2:/root/app/
[root@master conf]# scp -r /root/app/hbase-1.3.1/ slave1:/root/app/
[root@master conf]# scp -r /root/app/hbase-1.3.1/ slave2:/root/app/
[root@master conf]# scp -r /root/app/hbase-1.3.1/ slave3:/root/app/
将profile文件同步到其他节点:
[root@master ~]# scp /etc/profile master2:/etc/
[root@master ~]# scp /etc/profile slave1:/etc/
[root@master ~]# scp /etc/profile slave2:/etc/
[root@master ~]# scp /etc/profile slave3:/etc/
然后在所有终端执行source命令使配置文件生效
source /etc/profile
启动hbase集群:
1启动hadoop(先关了再启动,直接reboot重启)
在3个zookpeer节点启动zookeeper进程
[root@slave1 ~]# /root/app/zookeeper-3.4.10/bin/zkServer.sh start
[root@slave2 ~]# /root/app/zookeeper-3.4.10/bin/zkServer.sh start
[root@slave3 ~]# /root/app/zookeeper-3.4.10/bin/zkServer.sh start
jps查看有QuorumPeerMain进程,代表启动成功
[root@slave1 ~]# jps
7872 Jps
7830 QuorumPeerMain
在master启动hdfs和mapreduce进程
[root@master ~]# start-all.sh
在master2启动进程(jps没有此进程就执行这个命令)
[root@master2 ~]# yarn-daemon.sh start resourcemanager
[root@master2 ~]# jps
8017 ResourceManager
8049 Jps
7874 DFSZKFailoverController
7781 NameNode
[root@master2 ~]#
2启动bbase集群
在master节点中启动
[root@master ~]# start-hbase.sh
启动成功后两个master节点都会有HMaster进程
[root@master ~]# jps
8260 DFSZKFailoverController
8356 ResourceManager
7941 NameNode
9157 HMaster
9278 Jps
启动成功后会在三个slave节点中出现HRegionServer进程:
[root@slave1 ~]# jps
7795 Jps
7774 QuorumPeerMain
[root@slave1 ~]# jps
8752 Jps
7969 JournalNode
8083 NodeManager
8522 HRegionServer
7868 DataNode
7774 QuorumPeerMain
到此,hbase集群启动完成
还可以在浏览器验证:
http://192.168.31.200:16010/
也可以在任意节点输入hbase shell进入hbase命令界面:
[root@slave3 ~]# hbase shell
查询集群状态
hbase(main):001:0> status
1 active master, 1 backup masters, 3 servers, 0 dead, 0.6667 average load
hbase(main):002:0> version
1.3.1, r930b9a55528fe45d8edce7af42fef2d35e77677a, Thu Apr 6 19:36:54 PDT 2017
到此,hbase整个搭建过程结束
******************************总结*********************************
如果想启动高可用集群,zookeeper以及hbase,使用以下命令:
启动hbase集群:
1启动hadoop(先关了再启动,直接reboot重启)
在3个zookpeer节点启动zookeeper进程
[root@slave1 ~]# /root/app/zookeeper-3.4.10/bin/zkServer.sh start
[root@slave2 ~]# /root/app/zookeeper-3.4.10/bin/zkServer.sh start
[root@slave3 ~]# /root/app/zookeeper-3.4.10/bin/zkServer.sh start
jps查看有QuorumPeerMain进程,代表启动成功
[root@slave1 ~]# jps
7872 Jps
7830 QuorumPeerMain
启动:zookpeer节点中的journalnode进程 journalnode: 为了实现两个NameNode数据同步
[root@slave1 zookeeper-3.4.10]# hadoop-daemon.sh start journalnode
[root@slave2 zookeeper]# hadoop-daemon.sh start journalnode
[root@slave3 app]# hadoop-daemon.sh start journalnode
然后jps查看启动的进程:
[root@slave1 zookeeper-3.4.10]# jps
10576 JournalNode
10502 ZooKeeperMain
10666 Jps
10060 QuorumPeerMain
在master启动hdfs和mapreduce进程
[root@master ~]# start-all.sh
在master2启动进程(jps没有此进程就执行这个命令)
[root@master2 ~]# yarn-daemon.sh start resourcemanager
如果namenonde未启动,执行以下语句启动:
[root@master2 ~]#hadoop-daemon.sh start namenode
[root@master2 ~]# jps
8017 ResourceManager
8049 Jps
7874 DFSZKFailoverController
7781 NameNode
[root@master2 ~]#
2启动bbase集群
在master节点中启动
[root@master ~]# start-hbase.sh
启动成功后两个master节点都会有HMaster进程
[root@master ~]# jps
8260 DFSZKFailoverController
8356 ResourceManager
7941 NameNode
9157 HMaster
9278 Jps
启动成功后会在三个slave节点中出现HRegionServer进程:
[root@slave1 ~]# jps
7795 Jps
7774 QuorumPeerMain
[root@slave1 ~]# jps
8752 Jps
7969 JournalNode
8083 NodeManager
8522 HRegionServer
7868 DataNode
7774 QuorumPeerMain
注意:如果某个节点datanode未启用
可以通过如下命令启动:
[root@slave1 ~]# hadoop-daemon.sh start datanode
datanode running as process 7974. Stop it first.
[root@slave1 ~]# kill -9 7974
[root@slave1 ~]# hadoop-daemon.sh start datanode
starting datanode, logging to /root/app/hadoop-2.7.7/logs/hadoop-root-datanode-slave1.out
启动后刷新再看。
******************************结束*********************************
Hbase常见报错
一.Dead Region Servers
启动hbase时,发现slave1节点挂掉了
解决办法:重启hbase集群
[root@master ~]# stop-hbase.sh
[root@master ~]# start-hbase.sh
此时打开192.168.31.100:16010又报错:
原因:没有启用负载均衡器
The Load Balancer is not enabled which will eventually cause performance degradation in HBase as Regions will not be distributed across all RegionServers.
通过如下命令开启负载均衡器
[root@master ~]# hbase shell
hbase(main):001:0> balance_switch true
此时再刷新hbase界面:http://192.168.31.100:16010/
三个节点都成功启用
本文作者为BUG之神,转载请注明。