交个朋友,微:zytbft
安装的Hadoop的生态圈组件有如下几个(以后会不断补充完善起来了)。
(1)Hadoop(单机模式独立,伪分布式伪分布式,全分布式全分布式)
(2)Zookeeper(单机模式,全分布式)
(3)Hadoop的HA模式
(4)Hive
(5)HBase安装(单机模式,HA模式)
(6)Flume
(7)Sqoop
注意:我使用的安装包是目前较新的,适合当下企业需求(时间:2018.11.22)。
使用Hadoop才能更好地理解其特点,在使用之前,首先要了解Hadoop的安装模式,Hadoop的安装模式分为单机模式(Standalone)、伪分布式(Pseudo-Distributed)、全分布式(Fully-Distributed)三种模式。在虚拟机qfedu上安装Hadoop。
Hadoop的默认模式是单机模式。在不了解硬件安装环境的情况下,Hadoop第一次解压其源码包时,它保守地选择了最小配置。Hadoop会完全运行在本地。因此它不需要与其他节点进行交互,那么它也就不使用HDFS,也不加载任何Hadoop的守护进程。单机模式不需要启动任何服务即可使用,一般只用于调试。Linux环境下Hadoop单机模式的安装过程如下。
1.安装JDK
一般安装Oracle JDK,这里安装1.8版本的JDK。
(1)将JDK安装包jdk-8u121-linux-x64.rpm放到/root/Downloads/目录下。
(2)切换到root用户,解压JDK安装包。
[qfedu@localhost ~]$ su root
[root@localhost ~]# rpm -ivh /root/Downloads/jdk-8u121-linux-x64.rpm
(3)屏蔽CentOS7自带的JDK。
[root@bogon ~]# mv /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64 /usr/lib
2.安装Hadoop
(1)将安装包hadoop-2.7.3.tar.gz,放到虚拟机中的/root/Downloads/目录下,并解压到/usr/local/下。
[root@localhost ~]# tar -zxvf /root/Downloads/hadoop-2.7.3.tar.gz -C /usr/local/
(2)打开文件/etc/profile,配置hadoop环境变量。
[root@localhost ~]# vi /etc/profile
(3)编辑/etc/profile时,依次按下G键,o键,将光标移动到文件末尾,添加如下内容。编辑完成后,先按Esc键,后按:wq保存退出。
# Hadoop environment variables
export JAVA_HOME=/usr/java/jdk1.8.0_121/
export HADOOP_HOME=/usr/local/hadoop-2.7.3/
export PATH=$PATH:JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
(4)使配置文件生效。
[root@localhost ~]# source /etc/profile
3.测试Hadoop是否安装成功
(1)查看Hadoop版本,输入以下内容。
[root@localhost ~]# hadoop version
输出如下内容即正确:
Hadoop 2.7.3
(2)查看hadoop安装路径,输入如下内容。
[root@localhost ~]# which hadoop
输出如下内容即正确:
/usr/local/hadoop-2.7.3/bin/hadoop
上一小结对Hadoop单机模式的安装进行了讲解,下面对Hadoopd伪分布式的安装进行讲解。这里会用到对JDK和Hadoop环境变量的配置,配置方式和上一小结相同,不再赘述。下面讲述在配置环境变量文件生效后,对Hadoop配置文件的配置及其后面的步骤。
1.配置hadoop-env.sh文件
(1)切换到/usr/local/hadoop-2.7.3/etc/hadoop/目录下,打开hadoop-env.sh文件。
[root@localhost ~]# cd /usr/local/hadoop-2.7.3/etc/hadoop/
[root@localhost hadoop]# vi hadoop-env.sh
(2)在hadoop-env.sh文件中,将export JAVA_HOME=${JAVA_HOME}修改为以下内容。
export JAVA_HOME=/usr/java/jdk1.8.0_121/
2.配置core-site.xml文件
(1)打开core-site.xml文件
[root@localhost hadoop]# vi core-site.xml
(2)在core-site.xml文件中输入以下内容。
3.配置HDFS的hdfs-site.xml文件
(1)打开hdfs-site.xml文件。
[root@localhost hadoop]# vi hdfs-site.xml
(2)在hdfs-site.xml文件中输入以下内容。
4.配置MapReduce的mapred-site.xml文件
(1)创建mapred-site.xml文件。
[root@localhost hadoop]# vi mapred-site.xml
(2)在mapred-site.xml文件中输入以下内容。
5.配置Yarn的yarn-site.xml文件
(1)打开yarn-site.xml文件。
[root@localhost hadoop]# vi yarn-site.xml
(2)在yarn-site.xml文件中输入以下内容。
6.格式化HDFS文件系统
[root@localhost hadoop]# hdfs namenode -format
...
18/11/09 19:53:26 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at bogon/192.168.11.11
************************************************************/
7.启动Hadoop集群
(1)启动Hadoop集群(分别启动HDFS和Yarn)。
提示:当出现password:时,输入密码按下回车键。
[root@localhost hadoop]# start-dfs.sh
[root@localhost hadoop]# start-yarn.sh
(2)用jps命令查看Hadoop集群的相关进程。
[root@localhost hadoop]# jps
6208 ResourceManager
5674 NameNode
6028 SecondaryNameNode
5823 DataNode
6527 NodeManager
6591 Jps
从上面结果可以看到相关进程全部启动。
8.检测
(1)上传当前文件夹下的mapred-site.xml.template文件到HDFS的/目录下。
[root@localhost hadoop]# hdfs dfs -put ./mapred-site.xml.template /
(2)查看上传的mapred-site.xml.template文件。
[root@localhost hadoop]# hdfs dfs -cat /mapred-site.xml.template
(3)查看本地mapred-site.xml.template文件。
[root@localhost hadoop]# cat mapred-site.xml.template
如果两个文件的内容一致,表明Hadoop的伪分布式集群搭建成功。
重要提示:在Hadoop全分布式搭建前,需要先关闭hadoop集群,关闭命令如下。
[root@localhost hadoop]# stop-dfs.sh
[root@localhost hadoop]# stop-yarn.sh
Hadoop全分布式搭建规划,如表3.2所示。
表3.2 Hadoop全分布式搭建规划
主机名 |
IP地址 |
Hadoop进程 |
qf01 |
192.168.11.11 |
NameNode、DataNode、ResourceManager、NodeManager |
qf02 |
192.168.11.12 |
DataNode、NodeManager |
qf03 |
192.168.11.13 |
DataNode、NodeManager、SecondaryNameNode |
本书的Hadoop全分布式搭建基于Hadoop伪分布式,具体步骤如下。
1.克隆虚拟机
克隆3台虚拟机qf01、qf02、qf03,具体克隆步骤,见第1章 1.5.2 克隆。
写步骤
2.修改主机名
分别修改虚拟机qf01、qf02、qf03的主机名(hostname)。
(1)分别打开虚拟机qf01、qf02、qf03的/etc/hostname文件。
[root@localhost ~]# vi /etc/hostname
(2)分别修改主机名,具体做法如下。
①将虚拟机qf01的hostname文件中的内容替换为qf01。
②将虚拟机qf02的hostname文件中的内容替换为qf02。
③将虚拟机qf03的hostname文件中的内容替换为qf03。
3.修改网络设置
(1)分别打开虚拟机qf01、qf02、qf03的/etc/sysconfig/network-scripts/ifcfg-ens33文件。
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
(2)分别修改网络设置,具体做法如下。
①将虚拟机qf01的ifcfg-ens33文件中的IPADDR=192.168.11.1修改为IPADDR=192.168.11.11。
②将虚拟机qf02的ifcfg-ens33文件中的IPADDR=192.168.11.1修改为IPADDR=192.168.11.12。
③将虚拟机qf03的ifcfg-ens33文件中的IPADDR=192.168.11.1修改为IPADDR=192.168.11.13。
(3)重启虚拟机qf01、qf02、qf03。
单击VMware Workstation中的▼下拉菜单,在出现的下拉菜单中,单击“重新启动客户机”选项。
4.修改/etc/resolv.conf文件
resolv.conf是指DNS域名解析配置文件。
(1)分别打开虚拟机qf01、qf02、qf03的/etc/resolv.conf文件。
[root@qf01 ~]# vi /etc/resolv.conf
[root@qf02 ~]# vi /etc/resolv.conf
[root@qf03 ~]# vi /etc/resolv.conf
(2)分别将文件中的内容替换为以下内容。
nameserver 192.168.11.2
5.分别关闭虚拟机qf01、qf02、qf03的防火墙
[root@localhost ~]# systemctl stop firewalld.service
临时关闭防火墙
6.配置SSH免密登录
此处的SSH免密登录是指虚拟机qf01通过SSH免密登录虚拟机qf02、qf03。
(1)分别删除虚拟机qf01、qf02、qf03的~/.ssh目录。注意:在使用rm -rf命令时,要特别小心,避免误删文件。
[root@qf01 ~]# rm -rf .ssh
[root@qf02 ~]# rm -rf .ssh
[root@qf03 ~]# rm -rf .ssh
(2)在虚拟机qf01上新建SSH公私秘钥对。
[root@qf01 ~]# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
(3)在虚拟机qf01上修改/etc/hosts文件。
①打开/etc/hosts文件。
[root@qf01 ~]# vi /etc/hosts
②在文件末尾,换行添加以下内容。
192.168.11.11 qf01
192.168.11.12 qf02
192.168.11.13 qf03
(4)在虚拟机qf01上配置免密登录虚拟机qf01、qf02、qf03。
在实际工作中,ssh-copy-id命令的作用:复制本地用户的公钥到远程主机指定用户的认证库中,实现本地用户通过SSH免密登录远程主机指定用户。本书进行模拟操作,实现虚拟机qf01(本地root用户)通过SSH免密登录虚拟机qf01、qf02、qf03(3台远程主机的root用户)。
[root@qf01 ~]# ssh-copy-id root@qf01
[root@qf01 ~]# ssh-copy-id root@qf02
[root@qf01 ~]# ssh-copy-id root@qf03
提示:出现(yes/no)?,输入yes,按下回车键。
(5)将虚拟机qf01的hosts文件分发到虚拟机qf02、qf03。
为了便于在虚拟机qf01向虚拟机qf02、qf03分发目录或文件,此处编写一个Shell脚本xsync.sh。
①在虚拟机qf01上的/usr/local/bin目录下新建xsync.sh文件。在/usr/local/bin目录下的Shell脚本文件可以在任意位置被调用,使用起来比较方便。
[root@qf01 ~]# cd /usr/local/bin
[root@qf01 bin]# vi xsync.sh
②在文件中输入以下内容。
#!/bin/bash
if [ $# -lt 1 ] ; then echo no params ; exit ; fi
user=`whoami`
# 取出目录(或文件)名称
filename=`basename $1`
dir=`dirname $1`
# 切换到目录(或文件)所在的路径下
cd $dir
# 获取当前路径的绝对路径
fullpath=`pwd -P`
for (( i=2; i<=3 ; i++ )) ; do
tput setaf 5
echo ============ qf0$i $@ ============
tput setaf 9
rsync -lr $filename $user@qf0$i:$fullpath
done
其中,rsync命令的作用是:实现本地用户和远程主机指定用户的文件同步和本地不同路径下文件的同步。
③为xsync.sh文件的所有者添加执行权限。
[root@qf01 bin]# chmod u+x xsync.sh
④使用xsync.sh将虚拟机qf01的/etc/hosts文件分发到虚拟机qf02、qf03。
[root@qf01 ~]# xsync.sh /etc/hosts
(6)验证SSH免密登录是否配置成功。
[root@qf01 bin]# ssh qf02
出现如下内容,表明虚拟机qf01通过SSH成功登录虚拟机qf02。
[root@qf02 ~]#
输入exit,按下回车键,退回到虚拟机qf01。
7.修改相关配置文件
(1)在虚拟机qf01上,切换到/usr/local/hadoop-2.7.3/etc/hadoop/目录下。
[root@qf01 ~]# cd /usr/local/hadoop-2.7.3/etc/hadoop/
(2)配置core-site.xml文件。
①打开core-site.xml文件。
[root@qf01 hadoop]# vi core-site.xml
②将core-site.xml文件中的内容替换为以下内容。
(3)配置hdfs-site.xml文件。
①打开hdfs-site.xml文件。
[root@qf01 hadoop]# vi hdfs-site.xml
②将hdfs-site.xml文件中的内容替换为以下内容。
(4)配置mapred-site.xml文件。
①打开mapred-site.xml文件。
[root@qf01 hadoop]# vi mapred-site.xml
②将mapred-site.xml文件中的内容替换为以下内容。
(5)配置yarn-site.xml。
①打开yarn-site.xml文件。
[root@qf01 hadoop]# vi yarn-site.xml
②将yarn-site.xml文件中的内容替换为以下内容。
(6)设置从节点(slave),即修改slaves文件。
①打开slaves文件。
[root@qf01 hadoop]# vi slaves
②此处填写所有需要配置成从节点的主机名。具体做法:将slaves文件中的内容替换为以下内容。注意:每个主机名占一行。
qf01
qf02
qf03
8.分发配置文件
[root@qf01 hadoop]# xsync.sh /usr/local/hadoop-2.7.3/etc/hadoop
9.初始化HDFS
初始化HDFS,只能进行一次,如果初始化HDFS不成功,需要重新搭建。由于Hadoop集群搭建涉及细节较多,建议在初始化HDFS之前,先对每个虚拟机拍摄快照。拍摄快照后,在虚拟机qf01的终端,输入以下命令,初始化HDFS。
[root@qf01 hadoop]# hdfs namenode -format
倒数第9行,出现INFO common.Storage: common.Storage: Storage directory /home/hadoopdata/dfs/name has been successfully formatted,表明初始化HDFS已成功。
重启
10.启动和查看Hadoop进程
(1)启动Hadoop进程。
[root@localhost hadoop]# start-dfs.sh
[root@localhost hadoop]# start-yarn.sh
(2)查看Hadoop进程。
①在虚拟机qf01中查看Hadoop进程。
[root@qf01 hadoop]# jps
17089 ResourceManager
17427 Jps
16917 SecondaryNameNode
16699 DataNode
17196 NodeManager
16590 NameNode
以17089 ResourceManager为例,17089是指进程ID。
②在虚拟机qf02中查看Hadoop进程。
[root@qf02 hadoop]# jps
3140 Jps
2968 NodeManager
2877 DataNode
③在虚拟机qf03中查看Hadoop进程。
[root@qf03 hadoop]# jps
16512 NodeManager
16682 Jps
16412 DataNode
如果看到规划的Hadoop进程均已启动,表明Hadoop全分布式搭建成功。
注意:由于只在root用户下搭建了Hadoop全分布式,再次启动虚拟机时,需要切换到root用户下,进行相关操作。
(3)编写脚本查看Hadoop进程。
目前在3台虚拟机上查看Hadoop进程,操作相对简单。在实际工作中,可能会查看几十台服务器上的Hadoop进程,操作起来就比较烦琐。以当前的Hadoop全分布式集群为例,可以编写Shell脚本xcmd.sh来简化操作。
xcmd.sh的具体用途:在虚拟机qf01上查看虚拟机qf01、qf02、qf03上执行相同命令操作的结果。编写xcmd.sh脚本和查看Hadoop进程的步骤如下。
①在虚拟机qf01上的/usr/local/bin目录下新建xcmd.sh文件,输入以下内容。
#!/bin/bash
if [ $# -lt 1 ] ; then echo no params ; exit ; fi
for (( i=1 ; i<=3 ; i++ )) ; do
tput setaf 5
echo ============ qf0$i $@ ============
tput setaf 9
ssh qf0$i "$@"
done
②为xcmd.sh文件的所有者添加执行权限。
[root@qf01 hadoop]# chmod u+x xcmd.sh
③在虚拟机qf01上,使用xcmd.sh脚本查看Hadoop的所有进程,具体如下。
[root@qf01 bin]# xcmd.sh jps
============ qf01 jps ============
25604 ResourceManager
25718 NodeManager
25147 NameNode
26221 Jps
25295 DataNode
============ qf02 jps ============
10731 Jps
10252 DataNode
10414 NodeManager
============ qf03 jps ============
21699 DataNode
21813 SecondaryNameNode
21948 NodeManager
22270 Jps
本书使用的是3.4.10版本的Zookeeper,或者从官网下载,网址为http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.10。用Java编写的Zookeeper运行在JVM上,需要提前安装JDK并配置好Java环境(在第3章 3.2 节已完成)。本书主要讲述Zookeeper的两种安装模式:单机模式和全分布式。
Zookeeper单机模式,安装步骤如下。
(1)将Zookeeper安装包zookeeper-3.4.10放到虚拟机qf01的/root/Downloads/目录下,切换到root用户,新建目录/mysoft,解压Zookeeper安装包到/mysoft目录下。
[root@qf01 ~]# mkdir /mysoft
[root@qf01 ~]# tar -zxvf /root/Downloads/zookeeper-3.4.10.tar.gz -C /mysoft/
(2)切换到/mysoft目录下,将zookeeper-3.4.10重命名为zookeeper。
[root@qf01 ~]# cd /mysoft/
[root@qf01 mysoft]# mv zookeeper-3.4.10 zookeeper
(3)打开/etc/profile文件,配置Zookeeper环境变量。
[root@qf01 mysoft]# vi /etc/profile
在文件末尾添加如下三行内容。
# Zookeeper environment variables
export ZOOKEEPER_HOME=/mysoft/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
(4)使环境变量生效。
[root@qf01 mysoft]# source /etc/profile
(5)将文件/mysoft/zookeeper/conf/zoo_sample.cfg重命名为zoo.cfg(Zookeeper的配置文件)。
[root@qf01 mysoft]# cd /mysoft/zookeeper/conf/
[root@qf01 conf]# mv zoo_sample.cfg zoo.cfg
(6)启动Zookeeper的服务器。
[root@qf01 conf]# zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /mysoft/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
(7)检测Zookeeper服务器是否启动成功有两种方法。
①查看Zookeeper服务器的启动状态。
[root@qf01 conf]# zkServer.sh status
出现如下内容表明Zookeeper服务器启动成功。
ZooKeeper JMX enabled by default
Using config: /mysoft/zookeeper/bin/../conf/zoo.cfg
Mode: standalone
②用jps命令查看Zookeeper服务器的QuorumPeerMain进程是否启动。
[root@qf01 conf]# jps
11716 Jps
10412 QuorumPeerMain
出现QuorumPeerMain进程表明Zookeeper服务器启动成功。QuorumPeerMain是zookeeper集群的启动入口。
(8)关闭Zookeeper服务器。
[root@qf01 conf]# zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /mysoft/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
1.安装步骤
Zookeeper全分布式,又称Zookeeper集群模式,安装步骤如下。
(1)修改Zookeeper的配置文件zoo.cfg。
[root@qf01 conf]# vi /mysoft/zookeeper/conf/zoo.cfg
①将dataDir=/tmp/zookeeper修改为如下内容。
dataDir=/mysoft/zookeeper/zkdata
②在文件末尾添加如下3行。
server.1=qf01:2888:3888
server.2=qf02:2888:3888
server.3=qf03:2888:3888
其中,1、2、3被称为myid,要求是在1~255之间的整数。qf01、qf02、qf03是指其对应的主机地址。
2888是leader端口,负责和follower进行通信。3888是follower端口,负责与其他节点推选leader。
(2)新建目录/mysoft/zookeeper/zkdata,在该目录下新建文件myid。
[root@qf01 conf]# mkdir /mysoft/zookeeper/zkdata
[root@qf01 conf]# vi /mysoft/zookeeper/zkdata/myid
在myid文件中填写如下内容。
1
(3)将/soft/zookeeper/分发到虚拟机qf02、qf03。
[root@qf01 conf]# xsync.sh /mysoft/zookeeper/
(4)修改虚拟机qf02的/mysoft/zookeeper/zkdata/myid文件。
[root@qf02 ~]# vi /mysoft/zookeeper/zkdata/myid
将myid文件中的内容替换为如下内容。
2
(5)修改虚拟机qf03的/mysoft/zookeeper/zkdata/myid文件。
[root@qf03 ~]# vi /mysoft/zookeeper/zkdata/myid
将myid文件中的内容替换为如下内容。
3
(6)将虚拟机qf01的系统环境变量分发到虚拟机qf02、qf03。
[root@qf01 conf]# xsync.sh /etc/profile
(7)分别使虚拟机qf02、qf03的环境变量生效。
[root@qf02 ~]# source /etc/profile
[root@qf03 ~]# source /etc/profile
(8)分别启动虚拟机qf01、qf02、qf03的Zookeeper服务器。
[root@qf01 conf]# zkServer.sh start
[root@qf02 ~]# zkServer.sh start
[root@qf03 ~]# zkServer.sh start
(9)分别查看各虚拟机的Zookeeper服务器启动状态。
①查看虚拟机qf01的Zookeeper服务器启动状态。
[root@qf01 conf]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /mysoft/zookeeper/bin/../conf/zoo.cfg
Mode: follower
②查看虚拟机qf02的Zookeeper服务器启动状态。
[root@qf02 ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /mysoft/zookeeper/bin/../conf/zoo.cfg
Mode: leader
③查看虚拟机qf02的Zookeeper服务器启动状态。
[root@qf03 ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /mysoft/zookeeper/bin/../conf/zoo.cfg
Mode: follower
查看启动状态返回的结果中,出现Mode: follower或Mode: leader,表明Zookeeper服务器启动成功。
注意:本次启动Zookeeper服务器,leader出现在虚拟机qf02上。由于Leader的选举是随机的,因此下次启动Zookeeper服务器时,Leader可能会出现在其他虚拟机上。
2. 启动和关闭Zookeeper集群
启动和关闭Zookeeper集群需要在每台虚拟机上启动和关闭Zookeeper服务器。在实际工作中,使用的服务器可能会比较多,在每个服务器上都进行相同的操作,效率不高。为了方便地启动和关闭Zookeeper集群,可以编写启动脚本xzk.sh,具体步骤如下。
(1)在虚拟机qf01的/usr/local/bin/目录下,新建xzk.sh脚本文件,xzk.sh文件内容如下。
#!/bin/bash
cmd=$1
if [ $# -gt 1 ] ; then echo param must be 1 ; exit ; fi
for (( i=1 ; i<=3 ; i++ )) ; do
tput setaf 5
echo ============ qf0$i $@ ============
tput setaf 9
ssh qf0$i "source /etc/profile ; zkServer.sh $cmd"
done
(2)为xzk.sh脚本拥有者添加执行权限。
[root@qf01 bin]# chmod u+x xzk.sh
(3)通过xzk.sh脚本的start和stop命令,在虚拟机qf01上同时启动和关闭虚拟机qf01、qf02、qf03的Zookeeper服务器。
[root@qf01 bin]# xzk.sh start
[root@qf01 bin]# xzk.sh stop
至此,Zookeeper全分布式安装完成。
Hadoop的HA模式是指在Hadoop全分布式基础上,利用Zookeeper等协调工具配置的高可用的Hadoop集群模式。
Hadoop的HA模式搭建规划,如表4.3所示。本书Hadoop的HA模式是通过Zookeeper来实现的,因此需要在Hadoop的配置文件里对Zookeeper进行相关设置。
表4.3 Hadoop的HA模式搭建规划
主机名 |
IP地址 |
相关进程 |
qf01 |
192.168.10.11 |
NameNode、DataNode、DFSZKFailoverController、QuorumPeerMain、JournalNode、ResourceManager、NodeManager |
qf02 |
192.168.10.12 |
NameNode、DataNode、DFSZKFailoverController、QuorumPeerMain、JournalNode、NodeManager |
qf03 |
192.168.10.13 |
DataNode、NodeManager、QuorumPeerMain、JournalNode |
Hadoop的HA模式包括两部分:HDFS的HA模式、Yarn的HA模式。
在HDFS的HA模式下,有两个NameNode,一个NameNode处于活跃(Active)状态,另一个NameNode处于备用(Standby)状态。活跃的NameNode负责Hadoop集群中的所有客户端操作,而备用的NameNode只是充当从属服务器,维持足够的状态以在必要时进行快速故障转移。
Hadoop的HA模式出现的原因是Hadoop集群存在“单点故障”问题。“单点故障”问题是指对于只有一个NameNode的Hadoop集群,如果NameNode出现故障,会导致Hadoop集群无法正常工作。HA模式下的Hadoop集群解决了单点故障问题,基本原理是:当一台NameNode出现故障时,HA模式下的Hadoop集群通过Zookeeper等协调工具快速启动备用的NameNode,确保Hadoop集群的高可用性。
1. HDFS的HA模式搭建
由于HDFS的HA模式搭建步骤较多,建议在搭建之前先对虚拟机qf01、qf02、qf03拍摄快照。如果搭建过程中系统报错,可以快速恢复到搭建以前的状态。
本书HDFS的HA模式搭建是在之前的Hadoop集群和Zookeeper集群基础上进行的,具体步骤如下。
(1)确保Hadoop集群和Zookeeper集群处于关闭状态。
(2)修改虚拟机qf01的/usr/local/hadoop-2.7.3/etc/hadoop/core-site.xml文件。
[root@qf01 ~]# vi /usr/local/hadoop-2.7.3/etc/hadoop/core-site.xml
将core-site.xml文件中的内容替换为如下内容。
(3)修改虚拟机qf01的/usr/local/hadoop-2.7.3/etc/hadoop/hdfs-site.xml文件。
[root@qf01 ~]# vi /usr/local/hadoop-2.7.3/etc/hadoop/hdfs-site.xml
将hdfs-site.xml文件中的内容替换为如下内容。
脑裂(split-brain)是指在高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏。
(4)将虚拟机qf01上的core-site.xml和hdfs-site.xml文件分发到虚拟机qf02、qf03。
[root@qf01 ~]# xsync.sh /usr/local/hadoop-2.7.3/etc/hadoop/core-site.xml
[root@qf01 ~]# xsync.sh /usr/local/hadoop-2.7.3/etc/hadoop/hdfs-site.xml
(5)在虚拟机qf02上新建SSH公私秘钥对。
[root@qf02 ~]# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
(6)在虚拟机qf02上配置免密登陆虚拟机qf01、qf02、qf03。
[root@qf02 ~]# ssh-copy-id root@qf01
[root@qf02 ~]# ssh-copy-id root@qf02
[root@qf02 ~]# ssh-copy-id root@qf03
(7)将虚拟机qf01上HDFS元数据的存储目录(/home/hadoopdata/dfs/name)分发到虚拟机qf02的/home/hadoopdata/dfs/目录下。
[root@qf01 ~]# rsync -lr /home/hadoopdata/dfs/name root@qf02:/home/hadoopdata/dfs/
2.启动HDFS的HA模式
首次启动HDFS的HA模式步骤较多,如果首次启动成功,后续启动操作相对简单。
(1)首次启动HDFS的HA模式,步骤如下。
①在虚拟机qf01上启动Zookeeper集群。
[root@qf01 ~]# xzk.sh start
②在虚拟机qf01上格式化Zookeeper。
[root@qf01 ~]# hdfs zkfc -formatZK
③分别在虚拟机qf01、qf02、qf03上启动JournalNode进程。
[root@qf01 ~]# hadoop-daemon.sh start journalnode
[root@qf02 ~]# hadoop-daemon.sh start journalnode
[root@qf03 ~]# hadoop-daemon.sh start journalnode
④在虚拟机qf01上初始化共享编辑日志。
[root@qf01 ~]# hdfs namenode -initializeSharedEdits
⑤在虚拟机qf01上启动HDFS进程。
[root@qf01 ~]# start-dfs.sh
(2)后续启动HDFS的HA模式,步骤如下。
①在虚拟机qf01上启动Zookeeper集群。
[root@qf01 ~]# xzk.sh start
②在虚拟机qf01上启动HDFS进程。
[root@qf01 ~]# start-dfs.sh
3.验证HDFS相关进程是否成功启动
在虚拟机qf01上查看虚拟机qf01、qf02、qf03的HDFS相关进程。
[root@qf01 ~]# xcmd.sh jps
============ qf01 jps ============
7024 DFSZKFailoverController
6515 NameNode
6633 DataNode
7161 Jps
5210 QuorumPeerMain
5818 JournalNode
============ qf02 jps ============
3191 QuorumPeerMain
3736 JournalNode
4362 DataNode
4698 Jps
4573 DFSZKFailoverController
4271 NameNode
============ qf03 jps ============
3122 QuorumPeerMain
3924 JournalNode
4356 Jps
4153 DataNode
出现以上进程,表明HDFS相关进程成功启动。
4.自动故障转移
HDFS的HA模式主要用于实现服务器的自动故障转移,保证HDFS的高可用性,而自动故障转移的实现依赖于ZooKeeper实现的如下功能。
(1)故障检测。在Hadoop集群中,每个NameNode所在的服务器都在ZooKeeper中维护一个持久会话。如果当前活跃的NameNode服务器出现故障,该服务器在ZooKeeper中维持的会话中断,并通知另一个NameNode触发故障转移。
(2)指定活跃的NameNode。如果当前活跃的NameNode服务器出现故障,则ZooKeeper指定备用的NameNode成为活跃的节点。
以上两个功能主要是通过QuorumPeerMain、JournalNode和DFSZKFailoverController(ZKFC)进程实现的。下面主要对JournalNode和DFSZKFailoverController进行讲解。
(1)JournalNode。
JournalNode主要用于两个NameNode实现数据同步,确保写入。两个NameNode为了实现数据同步,需要通过一组JournalNode的独立进程进行通信。当活跃的NameNode中的edits日志有任何修改时,会将修改记录持久地记录到大多数的JournalNode中;备用的NameNode会监控并读取JournalNode中的变更数据,确保与活跃的NameNode数据同步。
由于edits日志的变更必须写入大多数(一半以上)JournalNode,所以至少确保存在3个JournalNode进程,确保系统在单个主机出现故障时能够正常运行。一般设置JournalNode的数量为奇数。
对于HA模式下的Hadoop群集而言,需要确保一次只有一个NameNode处于活跃状态,否则数据可能丢失或集群不能正常工作。为了防止脑裂情景的出现,JournalNode只允许一个NameNode处于活跃状态,并对其进行相关的写操作。在故障转移期间,将要变为活跃状态的NameNode会简单地接管写入JournalNode的角色,这有效地阻止了其他NameNode继续处于活跃状态,从而允许新的活跃安全地进行故障转移。
(2)DFSZKFailoverController。
DFSZKFailoverController是一个ZooKeeper客户端进程,主要负责监视NameNode的运行状态,管理ZooKeeper会话,进行基于ZooKeeper的选举。运行NameNode的每台服务器同时运行DFSZKFailoverController进程。
5.验证自动故障转移
(1)查看NameNode nn1和nn2的状态。
查看nn1和nn2的状态有两种方法。
①在虚拟机qf01上查看nn1和nn2的状态,首次查看状态,用时十几秒,之后查看状态只需几秒钟。
[root@qf01 ~]# hdfs haadmin -getServiceState nn1
active
[root@qf01 ~]# hdfs haadmin -getServiceState nn2
standby
当前nn1处于活跃状态,nn2处于备用状态。如果出现nn1处于备用状态,nn2处于活跃状态的情况,也是正确的,因为HA模式下,HDFS在启动时会随机指定一个NameNode处于活跃状态。
②访问NameNode Web界面来查看nn1和nn2的状态。
在windows的浏览器中,输入网址http://192.168.11.11:50070,看到nn1处于活跃状态,如图4.2所示。
在windows的浏览器中,输入网址http://192.168.11.12:50070,看到nn2处于备用状态,如图4.3所示。
图4.2 查看nn1的状态
图4.3 查看nn2的状态
(2)验证。
通过一些操作可以使活跃的nn1出现故障,查看是否可以成功将nn2切换到活跃状态。这些操作有:使用kill命令强制关闭NameNode进程来模拟JVM崩溃;通过关闭虚拟机或断开网络连接,可以模拟不同类型的停机故障等。
本书以使用kill命令强制关闭NameNode进程为例,进行模拟操作,具体步骤如下。
①在虚拟机qf02上,查看NameNode的进程ID。
[root@qf01 ~]# jps
3447 NameNode
2408 QuorumPeerMain
3529 DataNode
17625 Jps
3660 JournalNode
3806 DFSZKFailoverController
②使用kill命令强制关闭NameNode进程,使nn1出现故障。
[root@qf01 ~]# kill -9 3447
③在虚拟机qf01上查看nn2的状态。
[root@qf01 ~]# hdfs haadmin -getServiceState nn2
active
在几秒内nn2由原来的备用状态自动切换到活跃状态,表明HDFS实现了自动故障转移。至此,HDFS的HA模式搭建完毕。
如果nn2未切换到活跃状态,则表明HDFS的HA模式搭建不成功,相关配置可能存在错误。
Yarn的HA模式架构图,如图4.4所示,具体搭建步骤如下。
图4.4 Yarn的HA模式架构图
在Yarn的HA模式下,有多个ResourceManager ,一个ResourceManager处于活跃(Active)状态,一个或多个ResourceManager处于备用(Standby)状态。活跃的ResourceManager负责将其状态写进Zookeeper,当该ResourceManager出现故障时,另一个备用的ResourceManager切换到活跃状态,切换方式有两种:管理员手动切换和配置自动故障转移。本书以配置自动故障转移为例,进行Yarn的HA模式搭建。
1. Yarn的HA模式搭建
(1)确保Hadoop集群和Zookeeper集群处于关闭状态。
(2)修改虚拟机qf01的/usr/local/hadoop-2.7.3/etc/hadoop/yarn-site.xml文件,将yarn-site.xml文件中的内容替换为如下内容。
(3)将虚拟机qf01上的yarn -site.xml文件分发到虚拟机qf02、qf03。
[root@qf01 ~]# xsync.sh /usr/local/hadoop-2.7.3/etc/hadoop/yarn-site.xml
(4)在虚拟机qf01的/usr/local/hadoop-2.7.3/etc/hadoop/目录下新建文件rm_hosts。
[root@qf01 ~]# vi /usr/local/hadoop-2.7.3/etc/hadoop/rm_hosts
在rm_hosts文件中输入如下内容。
qf01
qf02
(5)将虚拟机qf01的/usr/local/hadoop-2.7.3/sbin/start-yarn.sh文件的倒数第5行替换为如下内容。
"$bin"/yarn-daemons.sh --config $YARN_CONF_DIR --hosts rm_hosts start resourcemanager
(6)将虚拟机qf01的/usr/local/hadoop-2.7.3/sbin/stop-yarn.sh文件的倒数第5行替换为如下内容。
"$bin"/yarn-daemons.sh --config $YARN_CONF_DIR --hosts rm_hosts stop resourcemanager
(7)将虚拟机qf01的rm_hosts、start-yarn.sh、stop-yarn.sh文件分发到虚拟机qf02、qf03。
[root@qf01 ~]# xsync.sh /usr/local/hadoop-2.7.3/etc/hadoop/rm_hosts
[root@qf01 ~]# xsync.sh /usr/local/hadoop-2.7.3/sbin/start-yarn.sh
[root@qf01 ~]# xsync.sh /usr/local/hadoop-2.7.3/sbin/stop-yarn.sh
2.启动Yarn的HA模式
先启动Zookeeper集群,后启动所有节点的Yarn进程。
[root@qf01 ~]# xzk.sh start
[root@qf01 ~]# start-yarn.sh
3.验证Yarn相关进程是否成功启动
在虚拟机qf01上查看虚拟机qf01、qf02、qf03的Yarn相关进程。
[root@qf01 sbin]# xcmd.sh jps
============ qf01 jps ============
13588 ResourceManager
6037 QuorumPeerMain
13770 Jps
13707 NodeManager
============ qf02 jps ============
5904 QuorumPeerMain
11441 NodeManager
11359 ResourceManager
11551 Jps
============ qf03 jps ============
5717 QuorumPeerMain
10662 Jps
10604 NodeManager
出现以上进程,表明Yarn相关进程成功启动。
4.验证自动故障转移
(1)查看rm1和rm2的状态。
查看rm1和rm2的状态有两种方法。
①在虚拟机qf01上查看rm1和rm2的状态,首次查看状态,用时十几秒,之后查看状态只需几秒钟。
[root@qf01 ~]# yarn rmadmin -getServiceState rm1
standby
[root@qf01 ~]# yarn rmadmin -getServiceState rm2
active
当前rm1处于备用状态,rm2处于活跃状态。与HDFS的HA模式类似,可能出现rm1处于活跃状态,rm2处于备用状态的情况。
②访问ResourceManager Web界面来查看rm1和rm2的状态。
在windows的浏览器中,输入网址http://192.168.11.11:8088,看到rm1处于备用状态,如图4.5所示。
在windows的浏览器中,输入网址http://192.168.11.12:8088,看到rm2处于活跃状态,如图4.6所示。
图4.5 查看rm1的状态
图4.6 查看rm2的状态
(2)验证。
使用kill命令强制关闭ResourceManager进程,模拟自动故障转移,具体步骤如下。
①在虚拟机qf02上,查看ResourceManager的进程ID。
[root@qf02 ~]# jps
5904 QuorumPeerMain
11441 NodeManager
14174 Jps
11359 ResourceManager
②使用kill命令强制关闭ResourceManager进程,使rm2出现故障。
[root@qf02 ~]# kill -9 11359
③查看rm1的状态。
[root@qf02 ~]# yarn rmadmin -getServiceState rm1
active
在几秒内rm1由原来的备用状态自动切换到活跃状态,表明Yarn实现了自动故障转移。至此,Yarn的HA模式搭建完毕。
(1)启动Hadoop的HA模式。
在虚拟机qf01上,先启动Zookeeper集群,后启动Hadoop集群。
[root@qf01 ~]# xzk.sh start
[root@qf01 ~]# start-dfs.sh
[root@qf01 ~]# start-yarn.sh
(2)查看相关进程。
[root@qf01 sbin]# xcmd.sh jps
============ qf01 jps ============
17316 NameNode
6037 QuorumPeerMain
17670 DFSZKFailoverController
18134 Jps
17767 ResourceManager
17863 NodeManager
17532 JournalNode
17405 DataNode
============ qf02 jps ============
5904 QuorumPeerMain
15985 ResourceManager
15250 NameNode
15620 JournalNode
16116 NodeManager
16600 Jps
15372 DataNode
15823 DFSZKFailoverController
============ qf03 jps ============
13890 DataNode
14594 Jps
5717 QuorumPeerMain
14157 NodeManager
14014 JournalNode
(3)关闭Hadoop的HA模式。
在虚拟机qf01上,先关闭Hadoop集群,后关闭Zookeeper集群。
[root@qf01 ~]# stop-dfs.sh
[root@qf01 ~]# stop-yarn.sh
[root@qf01 ~]# xzk.sh stop
本书使用的是2.1.1版本的Hive,Hive的具体安装步骤如下。
1.安装Hive
(1)将Hive安装包apache-hive-2.1.1-bin.tar.gz放到虚拟机qf01的/root/Downloads/目录下,切换到root用户,解压Hive安装包到/mysoft目录(该目录在安装Zookeeper时已创建)下。
[root@qf01 ~]# tar -zxvf /root/Downloads/apache-hive-2.1.1-bin.tar.gz -C /mysoft/
(2)切换到/mysoft目录下,将apache-hive-2.1.1-bin重命名为hive。
[root@qf01 ~]# cd /mysoft/
[root@qf01 mysoft]# mv apache-hive-2.1.1-bin hive
(3)打开/etc/profile文件,配置Hive环境变量。
[root@qf01 mysoft]# vi /etc/profile
在文件末尾添加如下三行内容。
# Hive environment variables
export HIVE_HOME=/mysoft/hive
export PATH=$PATH:$HIVE_HOME/bin
(4)使环境变量生效。
[root@qf01 mysoft]# source /etc/profile
2.安装MySQL
本书默认本书使用的是5.6版本的MySQL。
(1)将MySQL相关的两个文件mysql-community-release-el7-5.noarch.rpm、mysql-connector-java-5.1.41.jar和mysql目录(见附录A)放到虚拟机qf01的/root/Downloads/目录下。
(2)切换到/root/Downloads/目录下,安装mysql-community-release-el7-5.noarch.rpm文件。
[root@qf01 mysoft]# cd /root/Downloads/
[root@qf01 Downloads]# rpm -ivh mysql-community-release-el7-5.noarch.rpm
(3)切换到mysql目录,安装MySQL。
[root@qf01 Downloads]# cd mysql
[root@qf01 mysql]# yum localinstall *
(4)启动MySQL进程,将其设置为开机启动。
[root@qf01 mysql]# systemctl start mysqld
[root@qf01 mysql]# systemctl enable mysqld
(5)查看MySQL进程是否启动成功,如果出现“Active: active (running)”,表明MySQL进程启动成功。
[root@qf01 mysql]# systemctl status mysqld
● mysqld.service - MySQL Community Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running)
...
(6)进入MySQL。
[root@qf01 mysql]# mysql
(7)设置MySQL的root用户的密码为root。
mysql> update mysql.user set password=password('root');
(8)更新权限。
mysql> flush privileges;
(9)退出MySQL。
mysql> exit
(10)配置密码后,进入MySQL的命令如下。
[root@qf01 mysql]# mysql -uroot -p
Enter password:
...
mysql>
提示:出现Enter password后,输入root。
至此,MySQL安装完成。
3.配置Hive
通过配置Hive,将Hive的存储Metastore数据的数据库由Derby替换为MySQL。
(1)切换到/mysoft/hive/conf目录,修改如下两个配置文件的名称。
[root@qf01 mysql]# cd /mysoft/hive/conf
[root@qf01 conf]# mv hive-env.sh.template hive-env.sh
[root@qf01 conf]# mv hive-default.xml.template hive-site.xml
(2)修改hive-env.sh文件。将“# HADOOP_HOME=${bin}/../../hadoop”一行替换为如下内容。
HADOOP_HOME=/usr/local/hadoop-2.7.3
(3)修改hive-site.xml文件。
①修改hive-site.xml文件中的MySQL数据库信息:驱动、连接、账号、密码。查找以下4行内容:
依次替换为以下4行内容:
②使用vi编辑器的替换字符串功能,将hive-site.xml文件中的${system:java.io.tmpdir}替换为/root/hivetemp,${system:user.name}替换为root。
:%s#${system:java.io.tmpdir}#/root/hivetemp#g
:%s#${system:user.name}#root#g
(4)将MySQL的驱动文件mysql-connector-java-5.1.41.jar复制到/mysoft/hive/lib目录下。
[root@qf01 conf]# cp /root/Downloads/mysql-connector-java-5.1.41.jar /mysoft/hive/lib
(5)初始化Metastore。
[root@qf01 conf]# schematool -initSchema -dbType mysql
4.启动Hive的Cli客户端
(1)在启动Hive的Cli客户端之前,需要先启动Hadoop的HA模式。
[root@qf01 conf]# xzk.sh start
[root@qf01 conf]# start-dfs.sh
[root@qf01 conf]# start-yarn.sh
[root@qf01 conf]# hive
...
hive>
(2)进行简单的测试,验证Hive是否安装成功。
①查看数据库。
hive> show databases;
OK
default
Time taken: 1.388 seconds, Fetched: 1 row(s)
②创建数据库,并查看数据库是否成功创建。
hive> create database if not exists qfdb01;
hive> show databases;
OK
qfdb01
default
Time taken: 0.012 seconds, Fetched: 2 row(s)
如果两个测试的返回结果如上所示,表明Hive安装成功。
(3)退出Hive的Cli客户端。
hive> exit;
5.启动Hive的Beeline客户端
(1)关闭Hadoop的HDFS和Yarn进程,Zookeeper的相关进程不用关闭。
[root@qf01 ~]# stop-dfs.sh
[root@qf01 ~]# stop-yarn.sh
(2)在虚拟机qf01上修改/usr/local/hadoop-2.7.3/etc/hadoop目录下的core-site.xml文件。
[root@qf01 ~]# vi /usr/local/hadoop-2.7.3/etc/hadoop/core-site.xml
(3)在core-site.xml中的一行之前,添加如下几行内容。
(3)将core-site.xml文件分发到虚拟机qf02、qf03。
[root@qf01 ~]# xsync.sh /usr/local/hadoop-2.7.3/etc/hadoop/core-site.xml
(4)启动Hadoop的HDFS和Yarn进程。
[root@qf01 ~]# start-dfs.sh
[root@qf01 ~]# start-yarn.sh
(5)在虚拟机qf01上启动Hive的Hiveserver2服务。
[root@qf01 ~]# hiveserver2
...
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
启动Hive的Hiveserver2服务后,命令行处于塞住状态,等待客户端的接入。
(6)在虚拟机qf01上,重新打开一个终端(Terminal)窗口,启动Hive的Beeline客户端。
[root@qf01 ~]# beeline
...
beeline>
(7)Beeline使用JDBC驱动连接Hiveserver2服务。
Beelin 使用JDBC驱动连接hiveserver2服务的方法有以下两种。
①方法一:分步骤连接。
beeline> !connect jdbc:hive2://localhost:10000
提示:出现Enter username for jdbc:hive2://localhost:10000:时,按下回车键;出现Enter password for jdbc:hive2://localhost:10000:时,按下回车键。
出现以下内容,表明成功连接hiveserver2服务。
0: jdbc:hive2://localhost:10000>
注意:Hiveserver2默认使用的端口号是10000。
②方法二:在CentOS的命令行输入以下命令直接连接。
[root@qf01 ~]# beeline -u jdbc:hive2://localhost:10000 -n root
...
0: jdbc:hive2://localhost:10000>
本书为了方便把表述,以下内容中使用jdbc:hive2://>代替0: jdbc:hive2://localhost:10000>。
本书使用的是1.2.6版本的HBase。HBase的安装模式有单机模式、伪分布式、完全分布式、HA模式。本书主要讲述HBase的单机模式、HA模式的安装步骤。
HBase单机模式的安装步骤如下。
(1)将HBase安装包hbase-1.2.6-bin.tar.gz放到虚拟机qf01的/root/Downloads/目录下,切换到root用户,解压HBase安装包到/mysoft目录下。
[root@qf01 ~]# tar -zxvf /root/Downloads/hbase-1.2.6-bin.tar.gz -C /mysoft/
(2)切换到/mysoft目录下,将hbase-1.2.6重命名为hbase。
[root@qf01 ~]# cd /mysoft/
[root@qf01 mysoft]# mv hbase-1.2.6 hbase
(3)打开/etc/profile文件,配置HBase环境变量。
[root@qf01 mysoft]# vi /etc/profile
在文件末尾添加如下三行内容。
# HBase environment variables
export HBASE_HOME=/mysoft/hbase
export PATH=$PATH:$HBASE_HOME/bin
(4)使环境变量生效。
[root@qf01 mysoft]# source /etc/profile
(5)切换到/soft/hbase/conf目录下,修改文件hbase-env.sh。
[root@qf01 mysoft]# cd /mysoft/hbase/conf
[root@qf01 conf]# vi hbase-env.sh
(6)将# export JAVA_HOME=/usr/java/jdk1.6.0/一行替换为如下内容。
export JAVA_HOME=/usr/java/jdk1.8.0_121
(7)修改hbase-site.xml文件,将
(8)启动HBase单机模式。
[root@qf01 conf]# start-hbase.sh
(9)使用jps命令查看HBase进程。
[root@qf01 conf]# jps
8260 Jps
8157 HMaster
HMaster进程就是HBase的主进程。HMaster进程启动表明HBase单机模式启动成功。
(10)查看HBase的Web界面(如图7.2所示),在浏览器中输入以下网址。
http://192.168.11.11:16010
图7.2 HBase的Web界面
(11)关闭HBase。
[root@qf01 conf]# stop-hbase.sh
stopping hbase...................
关闭HBase时会出现自动打点,需要耐心等待。
1. 安装规划
HBase的HA模式安装规划,如表7.1所示。
表7.1 HBase的HA模式安装规划
主机名 |
IP地址 |
相关进程 |
qf01 |
192.168.10.11 |
NameNode、DataNode、NodeManager、ResourceManager DFSZKFailoverController、QuorumPeerMain、JournalNode、HMaster、HRegionServer |
qf02 |
192.168.10.12 |
NameNode、DataNode、NodeManager、ResourceManager DFSZKFailoverController、QuorumPeerMain、JournalNode、HMaster、HRegionServer |
qf03 |
192.168.10.13 |
DataNode、NodeManager、QuorumPeerMain、JournalNode、HRegionServer |
2. 安装步骤
HBase的HA模式安装步骤如下。
(1)在虚拟机qf01上修改/mysoft/hbase/conf/hbase-site.xml文件,将
(2)修改/mysoft/hbase/conf/hbase-env.sh文件。
① 将# export HBASE_MANAGES_ZK=true一行替换为如下内容,目的是设置HBase不使用内置的Zookeeper,而使用外部安装的Zookeeper集群。
export HBASE_MANAGES_ZK=false
② 将如下内容删除,或者在两个export前各添加一个#(即改为注释)。
export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"
export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"
(3)修改/mysoft/hbase/conf/regionservers文件,将文件中的内容替换为如下内容。
qf01
qf02
qf03
(4)在/mysoft/hbase/conf目录下新建文件backup-masters,用于备份HBbase的主节点qf01,当主节点崩溃后,HBbase自动启用备份节点。
[root@qf01 conf]# vi backup-masters
在backup-masters中添加如下内容。
qf02
(5)将Hadoop的配置文件目录(/usr/local/hadoop-2.7.3/etc/hadoop)下的core-site.xml和hdfs-site.xml复制到/mysoft/hbase/conf目录下。
[root@qf01 conf]# cd /usr/local/hadoop-2.7.3/etc/hadoop/
[root@qf01 hadoop]# cp core-site.xml hdfs-site.xml /mysoft/hbase/conf
(6)将HBase的安装目录复制到虚拟机qf02和qf03。
[root@qf01 hadoop]# xsync.sh /mysoft/hbase
(7)启动HBase的HA模式,需要先启动Zookeeper和Hadoop集群。
[root@qf01 ~]# xzk.sh start
[root@qf01 ~]# start-dfs.sh
[root@qf01 ~]# start-yarn.sh
[root@qf01 ~]# start-hbase.sh
starting master, logging to /mysoft/hbase/logs/hbase-root-master-qf01.out
qf03: starting regionserver, logging to /mysoft/hbase/bin/../logs/hbase-root-regionserver-qf03.out
qf02: starting regionserver, logging to /mysoft/hbase/bin/../logs/hbase-root-regionserver-qf02.out
qf01: starting regionserver, logging to /mysoft/hbase/bin/../logs/hbase-root-regionserver-qf01.out
qf02: starting master, logging to /mysoft/hbase/bin/../logs/hbase-root-master-qf02.out
(8)使用jps命令查看进程。
[root@qf01 conf]# xcmd.sh jps
============ qf01 jps ============
5570 ResourceManager
2339 QuorumPeerMain
4887 NameNode
6183 HMaster
5224 JournalNode
5417 DFSZKFailoverController
5705 NodeManager
6329 HRegionServer
5004 DataNode
6623 Jps
============ qf02 jps ============
3984 DFSZKFailoverController
4082 ResourceManager
4709 Jps
4167 NodeManager
3658 NameNode
3851 JournalNode
3741 DataNode
4382 HRegionServer
4462 HMaster
2367 QuorumPeerMain
============ qf03 jps ============
3664 NodeManager
3425 DataNode
4034 Jps
3860 HRegionServer
2541 QuorumPeerMain
3535 JournalNode
出现以上进程表明HBase的HA模式启动成功。
3.启动和关闭HBase进程
启动和关闭HBase进程的常用命令及含义,如表3.3所示。
表3.3 启动和关闭Hadoop进程的常用命令及含义
命 令 |
含 义 |
start-hbase.sh |
启动HBase的所有HMaster、HRegionserver、备份的HMaster进程 |
stop-hbase.sh |
关闭HBase的所有HMaster、HRegionserver、备份的HMaster进程 |
hbase-daemon.sh start master |
单独启动HMaster进程 |
hbase-daemon.sh stop master |
单独关闭HMaster进程 |
hbase-daemons.sh start regionserver |
启动所有的HRegionserver进程 |
hbase-daemons.sh stop regionserver |
关闭所有的HRegionserver进程 |
hbase-daemons.sh start master-backup |
启动所有备份的HMaster进程 |
hbase-daemons.sh stop master-backup |
关闭所有备份的HMaster进程 |
本书使用的是1.8.0版本的Flume。Flume的安装步骤如下。
(1)将Flume安装包apache-flume-1.8.0-bin.tar.gz放到虚拟机qf01的/root/Downloads/目录下,切换到root用户,解压Flume安装包到/mysoft目录下。
[root@qf01 ~]# tar -zxvf /root/Downloads/apache-flume-1.8.0-bin.tar.gz -C /mysoft/
(2)切换到/mysoft目录下,将apache-flume-1.8.0-bin重命名为flume。
[root@qf01 ~]# cd /mysoft/
[root@qf01 mysoft]# mv apache-flume-1.8.0-bin flume
(3)打开/etc/profile文件,配置Flume环境变量。
[root@qf01 mysoft]# vi /etc/profile
在文件末尾添加如下三行内容。
# Flume environment variables
export FLUME_HOME=/mysoft/flume
export PATH=$PATH:$FLUME_HOME/bin
(4)使环境变量生效。
[root@qf01 mysoft]# source /etc/profile
(5)修改Flume的配置文件。
① 切换到/mysoft/flume/conf目录下。
[root@qf01 mysoft]# cd /mysoft/flume/conf
② 将flume-env.ps1.template重命名为flume-env.ps1。
[root@qf01 conf]# mv flume-env.ps1.template flume-env.ps1
③ 将flume-env.sh.template重命名为flume-env.sh。
[root@qf01 conf]# mv flume-env.sh.template flume-env.sh
④ 修改flume-env.sh,将# export JAVA_HOME=/usr/lib/jvm/java-8-oracle一行替换为如下内容。
export JAVA_HOME=/usr/java/jdk1.8.0_121
(6)查看Flume的版本信息。
[root@qf01 conf]# flume-ng version
Flume 1.8.0
Source code repository: https://git-wip-us.apache.org/repos/asf/flume.git
Revision: 99f591994468633fc6f8701c5fc53e0214b6da4f
Compiled by denes on Fri Sep 15 14:58:00 CEST 2017
From source with checksum fbb44c8c8fb63a49be0a59e27316833d
至此,Flume安装完成。
Sqoop的版本为1.4.7。注意:Sqoop的1.4.7版本底层适配的是Hadoop2.6.0版本,本书使用的是Hadoop2.7.3版本。虽然使用的Hadoop版本不同,但是Hadoop的2.7.3版本兼容2.6.0版本。Sqoop的安装步骤如下。
(1)启动Zookeeper集群、Hadoop集群、MySQL。
[root@qf01 ~]# xzk.sh start
[root@qf01 ~]# start-dfs.sh
[root@qf01 ~]# start-yarn.sh
[root@qf01 ~]# mysql -uroot -p
Enter password:
...
mysql>
提示:当本书中出现Enter password:时输入root,按下回车键。
(2)将Sqoop安装包sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz放到虚拟机qf01的/root/Downloads/目录下。在虚拟机qf01上,重新打开一个终端,解压Sqoop安装包到/mysoft目录下。
[root@qf01 ~]# tar -zxvf /root/Downloads/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /mysoft/
(3)切换到/mysoft目录下,将sqoop-1.4.7.bin__hadoop-2.6.0重命名为sqoop。
[root@qf01 ~]# cd /mysoft/
[root@qf01 mysoft]# mv sqoop-1.4.7.bin__hadoop-2.6.0 sqoop
(4)打开/etc/profile文件,配置Sqoop环境变量。
[root@qf01 mysoft]# vi /etc/profile
在文件末尾添加如下三行内容。
# Sqoop environment variables
export SQOOP_HOME=/mysoft/sqoop
export PATH=$PATH:$SQOOP_HOME/bin
(5)使环境变量生效。
[root@qf01 mysoft]# source /etc/profile
(6)将/root/Downloads目录下的MySQL的驱动文件mysql-connector-java-5.1.41.jar,复制到虚拟机qf01的/mysoft/sqoop/lib目录下。
[root@qf01 mysoft]# cp /root/Downloads/mysql-connector-java-5.1.41.jar /mysoft/sqoop/lib
(7)修改Sqoop的配置文件,具体做法如下。
① 切换到/mysoft/sqoop/conf目录下,将文件sqoop-env-template.sh重命名为sqoop-env.sh。
[root@qf01 mysoft]# cd /mysoft/sqoop/conf
[root@qf01 conf]# mv sqoop-env-template.sh sqoop-env.sh
② 修改sqoop-env.sh文件。
[root@qf01 conf]# vi sqoop-env.sh
将sqoop-env.sh文件的如下几行内容
#export HADOOP_COMMON_HOME=
#export HADOOP_MAPRED_HOME=
#export HBASE_HOME=
#export HIVE_HOME=
#export ZOOCFGDIR=
分别替换为
export HADOOP_COMMON_HOME=/usr/local/hadoop-2.7.3
export HADOOP_MAPRED_HOME=/usr/local/hadoop-2.7.3
export HBASE_HOME=/mysoft/hbase
export HIVE_HOME=/mysoft/hive
export ZOOCFGDIR=/mysoft/zookeeper/conf
(8)查看当前Sqoop的版本信息。
[root@qf01 conf]# sqoop version
Warning: /mysoft/sqoop/../hcatalog does not exist! HCatalog jobs will fail.
Please set $HCAT_HOME to the root of your HCatalog installation.
Warning: /mysoft/sqoop/../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
18/10/26 13:45:04 INFO sqoop.Sqoop: Running Sqoop version: 1.4.7
Sqoop 1.4.7
git commit id 2328971411f57f0cb683dfb79d19d4d19d185dd8
Compiled by maugli on Thu Dec 21 15:59:58 STD 2017
出现Sqoop 1.4.7一行,表明Sqoop安装成功。
(9)去除警告信息。
因为没有设置HCAT_HOME(HCatalog的家目录)、ACCUMULO_HOME,所以出现了相关的警告信息。本书对于HCatalog和Accumulo不作介绍,感兴趣的读者可以自行查找相关信息,因此进行如下操作去除警告信息。
① 修改/mysoft/sqoop/bin目录下的configure-sqoop文件。
[root@qf01 conf]# cd /mysoft/sqoop/bin
[root@qf01 bin]# vi configure-sqoop
使用#注释掉HCAT_HOME和ACCUMULO_HOME的相关信息,具体如下所示。
#if [ ! -d "${HCAT_HOME}" ]; then
# echo "Warning: $HCAT_HOME does not exist! HCatalog jobs will fail."
# echo 'Please set $HCAT_HOME to the root of your HCatalog installation.'
#fi
#
#if [ ! -d "${ACCUMULO_HOME}" ]; then
# echo "Warning: $ACCUMULO_HOME does not exist! Accumulo imports will fail."
# echo 'Please set $ACCUMULO_HOME to the root of your Accumulo installation.'
#fi
② 查看Sqoop的版本信息,警告信息已去除。
[root@qf01 bin]# sqoop version
18/10/26 13:50:20 INFO sqoop.Sqoop: Running Sqoop version: 1.4.7
Sqoop 1.4.7
git commit id 2328971411f57f0cb683dfb79d19d4d19d185dd8
Compiled by maugli on Thu Dec 21 15:59:58 STD 2017
至此,Sqoop安装完成。