Hbase完全分布式

BUG之神 66

基础知识:

  1. Hbase是借助zookeeper管理集群
  2. 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节点拍摄快照!以便故障后恢复!

Hbase完全分布式

在D:\Virtual Machines下创建master2目录

Hbase完全分布式

2使用master创建链接克隆:

Hbase完全分布式

克隆完成后有5台机器:

Hbase完全分布式

将主机名设置为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

Hbase完全分布式

[root@localhost ~]# systemctl restart network

[root@localhost ~]# ip addr

4验证能否ping通:

Hbase完全分布式

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/

Hbase完全分布式

安装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

如下图所示:

Hbase完全分布式

然后在/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信息,说明格式化成功

Hbase完全分布式

还可以登录到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高可用集群的管理目录

Hbase完全分布式

然后格式化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.100:50070/

Hbase完全分布式

 

http://192.168.31.200:50070/

Hbase完全分布式

***********************************************************************

但是会发现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完全分布式 Hbase完全分布式

***********************************************************************

搭建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完全分布式

安装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

添加到这里:

Hbase完全分布式

[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.100:16010/

Hbase完全分布式

http://192.168.31.200:16010/

Hbase完全分布式

也可以在任意节点输入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完全分布式 Hbase完全分布式

******************************结束*********************************

Hbase常见报错

一.Dead Region Servers

启动hbase时,发现slave1节点挂掉了

解决办法:重启hbase集群

[root@master ~]# stop-hbase.sh

[root@master ~]# start-hbase.sh

此时打开192.168.31.100:16010又报错:

Hbase完全分布式

原因:没有启用负载均衡器

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/

三个节点都成功启用

Hbase完全分布式

分享