Hadoop大数据组件安装 史上最详细教程 手把手教会你安装

Hadoop安装--大数据组件安装--史上最完整教程--手把手教会你安装 

——彻底揭开大数据技术的面纱,让小白彻底进入大数据技术领域

交个朋友,微:zytbft

安装的Hadoop的生态圈组件有如下几个(以后会不断补充完善起来了)。

(1)Hadoop(单机模式独立,伪分布式伪分布式,全分布式全分布式)

(2)Zookeeper(单机模式,全分布式)

(3)Hadoop的HA模式

(4)Hive

(5)HBase安装(单机模式,HA模式)

(6)Flume

(7)Sqoop

获取本教程所有安装包,百度网盘链接:https://pan.baidu.com/s/1TedUdOETU8bSRMIuIr_9SQ 
提取码:b5qg 

注意:我使用的安装包是目前较新的,适合当下企业需求(时间:2018.11.22)。

1.1 Hadoop的安装模式

使用Hadoop才能更好地理解其特点,在使用之前,首先要了解Hadoop的安装模式,Hadoop的安装模式分为单机模式(Standalone)、伪分布式(Pseudo-Distributed)、全分布式(Fully-Distributed)三种模式。在虚拟机qfedu上安装Hadoop。

1.1.1 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

1.1.2 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文件中输入以下内容。

   

   

        fs.defaultFS

        hdfs://localhost:9000

   

3.配置HDFS的hdfs-site.xml文件

(1)打开hdfs-site.xml文件。

[root@localhost hadoop]# vi hdfs-site.xml

(2)在hdfs-site.xml文件中输入以下内容。

   

   

       dfs.replication

       1

   

4.配置MapReduce的mapred-site.xml文件

(1)创建mapred-site.xml文件。

[root@localhost hadoop]# vi mapred-site.xml

(2)在mapred-site.xml文件中输入以下内容。

   

   

        mapreduce.framework.name

        yarn

   

5.配置Yarn的yarn-site.xml文件

(1)打开yarn-site.xml文件。

[root@localhost hadoop]# vi yarn-site.xml

(2)在yarn-site.xml文件中输入以下内容。

   

   

        yarn.nodemanager.aux-services

        mapreduce_shuffle

   

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的伪分布式集群搭建成功。

1.1.3 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文件中的内容替换为以下内容。

   

   

        fs.defaultFS

        hdfs://qf01:9000

   

   

   

        hadoop.tmp.dir

        /tmp/hadoop-qf01

   

   

   

        io.file.buffer.size

        4096

   

(3)配置hdfs-site.xml文件。

①打开hdfs-site.xml文件。

[root@qf01 hadoop]# vi hdfs-site.xml

②将hdfs-site.xml文件中的内容替换为以下内容。

   

   

        dfs.replication

        3

   

   

   

        dfs.blocksize

        134217728

   

   

   

        dfs.namenode.name.dir

        /home/hadoopdata/dfs/name

   

   

   

        dfs.datanode.data.dir

        /home/hadoopdata/dfs/data

   

   

   

       dfs.namenode.http-address

       qf01:50070

    

   

   

       dfs.namenode.secondary.http-address

       qf03:50090

   

   

   

        dfs.webhdfs.enabled

        true

   

   

   

        dfs.permissions.enabled

        false

   

(4)配置mapred-site.xml文件。

①打开mapred-site.xml文件。

[root@qf01 hadoop]# vi mapred-site.xml

②将mapred-site.xml文件中的内容替换为以下内容。

   

   

        mapreduce.framework.name

        yarn

   

(5)配置yarn-site.xml。

①打开yarn-site.xml文件。

[root@qf01 hadoop]# vi yarn-site.xml

②将yarn-site.xml文件中的内容替换为以下内容。

   

   

        yarn.resourcemanager.hostname

        qf01

   

   

   

        yarn.nodemanager.aux-services

        mapreduce_shuffle

   

   

   

        yarn.resourcemanager.address

        qf01:8032

   

   

   

        yarn.resourcemanager.scheduler.address

        qf01:8030

   

   

   

        yarn.resourcemanager.resource-tracker.address

        qf01:8031

   

   

   

        yarn.resourcemanager.admin.address

        qf01:8033

   

   

   

        yarn.resourcemanager.webapp.address

        qf01:8088

   

(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

 

2.1 Zookeeper的安装和常用命令

本书使用的是3.4.10版本的Zookeeper,或者从官网下载,网址为http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.10。用Java编写的Zookeeper运行在JVM上,需要提前安装JDK并配置好Java环境(在第3章 3.2 节已完成)。本书主要讲述Zookeeper的两种安装模式:单机模式和全分布式。

2.1.1 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

2.1.2 Zookeeper全分布式

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全分布式安装完成。

 

 

 

 

 

3.1 Hadoop的HA模式

3.1.1 HA模式简介

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模式。

3.1.2 HDFS的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文件中的内容替换为如下内容。

   

   

        fs.defaultFS

        hdfs://qianfeng

   

   

   

        hadoop.tmp.dir

        /tmp/hadoop-qf01

   

   

   

        ha.zookeeper.quorum

        qf01:2181,qf02:2181,qf03:2181

   

   

   

        io.file.buffer.size

        4096

   

(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文件中的内容替换为如下内容。

   

   

        dfs.replication

        3

   

   

   

        dfs.blocksize

        134217728

   

   

   

        dfs.namenode.name.dir

        /home/hadoopdata/dfs/name

   

   

   

        dfs.datanode.data.dir

        /home/hadoopdata/dfs/data

   

  

   

        dfs.webhdfs.enabled

        true

   

   

   

        dfs.permissions.enabled

        false

   

   

   

        dfs.nameservices

        qianfeng

   

   

   

        dfs.ha.namenodes.qianfeng

        nn1,nn2

   

   

   

        dfs.namenode.rpc-address.qianfeng.nn1

        qf01:8020

   

   

   

        dfs.namenode.rpc-address.qianfeng.nn2

        qf02:8020

   

   

   

        dfs.namenode.http-address.qianfeng.nn1

        qf01:50070

   

   

   

        dfs.namenode.http-address.qianfeng.nn2

        qf02:50070

   

   

   

        dfs.namenode.shared.edits.dir

        qjournal://qf01:8485;qf02:8485;qf03:8485/qianfeng

   

   

   

        dfs.client.failover.proxy.provider.qianfeng

        org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider

   

   

   

        dfs.ha.automatic-failover.enabled

        true

   

   

   

        dfs.ha.fencing.methods

        shell(/bin/true)

   

脑裂(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模式搭建不成功,相关配置可能存在错误。

3.1.3 Yarn的HA模式

Yarn的HA模式架构图,如图4.4所示,具体搭建步骤如下。

 

Hadoop大数据组件安装 史上最详细教程 手把手教会你安装_第1张图片

图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文件中的内容替换为如下内容。

   

   

        yarn.nodemanager.aux-services

        mapreduce_shuffle

   

   

      

        yarn.resourcemanager.ha.enabled  

        true

   

   

      

        yarn.resourcemanager.cluster-id  

        qianfeng

   

   

      

        yarn.resourcemanager.ha.rm-ids  

        rm1,rm2

   

   

      

        yarn.resourcemanager.hostname.rm1  

        qf01

   

      

      

        yarn.resourcemanager.hostname.rm2  

        qf02

   

   

      

        yarn.resourcemanager.webapp.address.rm1  

        qf01:8088

   

   

      

        yarn.resourcemanager.webapp.address.rm2  

        qf02:8088

   

   

      

        yarn.resourcemanager.zk-address  

        qf01:2181,qf02:2181,qf03:2181

   

(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模式搭建完毕。

3.1.4 启动和关闭Hadoop的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

4.1 Hive安装

本书使用的是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行内容:

org.apache.derby.jdbc.EmbeddedDriver

jdbc:derby:;databaseName=metastore_db;create=true

APP

mine

依次替换为以下4行内容:

com.mysql.jdbc.Driver

jdbc:mysql://qf01:3306/hive?createDatabaseIfNotExist=true

root

root

       ②使用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中的一行之前,添加如下几行内容。

   

        hadoop.proxyuser.root.hosts    

        *

   

        

        hadoop.proxyuser.root.groups    

        *

   

(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>。

5.1 HBase安装

本书使用的是1.2.6版本的HBase。HBase的安装模式有单机模式、伪分布式、完全分布式、HA模式。本书主要讲述HBase的单机模式、HA模式的安装步骤。

5.1.1 HBase单机模式

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文件,将两行替换为如下内容。

   

   

        hbase.rootdir

        file:///root/hbasedir/hbase

   

      

   

        hbase.zookeeper.property.dataDir

        /root/hbasedir/hbase/zkdir

   

(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时会出现自动打点,需要耐心等待。

5.1.2 HBase的HA模式

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文件,将的内容替换为以下内容。

   

   

        hbase.cluster.distributed

        true

    

   

        hbase.zookeeper.property.dataDir

        /home/hadoopdata/hbase/zkdir

   

   

   

        hbase.zookeeper.quorum

        qf01,qf02,qf03

   

(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进程

6.1 Flume安装

本书使用的是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安装完成。

7.1 Sqoop安装

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安装完成。

想进一步了解大数据技术,尽情来撩。V信:壹壹伍贰七一八壹叁叁(改为数字添加好友即可)。

你可能感兴趣的:(大数据开发,大数据组件安装)