Hive大数据存储与处理
上QQ阅读APP看书,第一时间看更新

2.1.4 Hadoop集群部署

在完成单台主机的CentOS的安装后,还需要为CentOS设置镜像文件路径和设置YUM安装软件源,以便后续在安装新程序时,能够较为快速地找到安装文件并安装。

另外为了节省时间,本书采用克隆虚拟机的方式完成3台Slave节点机器的配置。

1.CentOS镜像设置

为CentOS设置镜像文件路径的步骤如下。

(1)确认镜像文件已添加。CentOS的镜像文件指的就是安装CentOS的ISO映像文件,可在虚拟机设置里查看该文件。单击图2-23所示界面中的“编辑虚拟机设置”超链接,在弹出的“虚拟机设置”对话框中单击“CD/DVD(IDE)”超链接,如图2-46所示。需要勾选“已连接”和“启动时连接”复选框,并确认已经指定相应的ISO映像文件路径。此后在安装新程序时,会从ISO映像文件中优先加载。

图2-46 “虚拟机设置”对话框

(2)修改repo配置文件。将/etc/yum.repos.d/目录下原有的repo配置文件(CentOS Media.repo除外)的扩展名改为.bak,如代码2-2所示,部分执行结果如图2-47所示。

代码2-2 修改repo配置文件

mv  CentOS-Base.repo  CentOS-Base.repo.bak
mv  CentOS-Debuginfo.repo  CentOS-Debuginfo.repo.bak
mv  CentOS-fasttrack.repo  CentOS-fasttrack.repo.bak
mv  CentOS-Vault.repo  CentOS-Vault.repo.bak
ll

图2-47 修改repo配置文件结果

(3)配置CentOS-Media.repo文件。执行命令“vi CentOS-Media.repo”修改配置文件CentOS-Media.repo,修改后的内容如代码2-3所示。

代码2-3 修改后的CentOS-Media.repo文件

[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///media/
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

挂载镜像文件至目录/media。执行命令“mount/dev/dvd/media/”将镜像文件挂载到/media,如图2-48所示。

图2-48 挂载镜像文件至目录/media

2.通过yum命令安装常用软件

在CentOS中可使用yum命令安装新软件,虚拟机会先在镜像文件中寻找安装包,当找不到时,则在YUM安装软件源定义的线上资源下载。为了方便后续的克隆操作,需要为虚拟机安装一些软件。执行命令“yum-y install ntp openssh-clients openssh-server vim”安装常用软件,如图2-49所示。

图2-49 通过yum命令安装常用软件

3.安装JDK开发包

Hadoop集群需要使用JDK,本书采用JDK 1.8(安装包为jdk-8u221-linux-x64.rpm),读者可自行到其官网下载。安装JDK的过程如下。

(1)上传并安装。上传JDK安装包到虚拟机/opt目录,进入/opt目录,执行命令“rpm-ivh jdk-8u221-linux-x64.rpm”安装JDK。

(2)添加环境变量。为了让系统可直接访问JDK的安装目录,在/etc/profile文件中添加环境变量,如代码2-4所示。添加完成并保存、退出后需执行命令“source/etc/profile”,使配置马上生效。

代码2-4 在/etc/profile文件中添加环境变量

export  JAVA_HOME=/usr/java/jdk1.8.0_221-amd64
export  PATH=$PATH:$JAVA_HOME/bin

(3)验证。验证JDK是否配置成功,执行命令“java-version”,配置成功则会显示所安装的JDK版本,如图2-50所示。

图2-50 验证JDK是否配置成功

4.通过VMware克隆Slave节点

可通过对配置好的虚拟机进行克隆操作生成Hadoop集群中的Slave节点。下面以克隆slave1虚拟机为例进行介绍,克隆虚拟机的具体步骤如下。

(1)在VMware主界面,选择虚拟机“master”,单击右键,选择“管理”命令,再选择“克隆”命令,如图2-51所示(注:克隆虚拟机前需要关闭被克隆的主机)。

图2-51 克隆虚拟机菜单

(2)选择克隆源为“虚拟机中的当前状态”,如图2-52所示,单击“下一步”按钮。

图2-52 选择克隆源

(3)选择克隆类型为“创建完整克隆”,如图2-53所示,单击“下一步”按钮。

图2-53 选择克隆类型

(4)设置新虚拟机的名称为“slave1”,将存储位置设为“D:\Hive\VM\hadoop2”(读者可自行设置),如图2-54所示。然后单击“完成”按钮,完成slave1虚拟机的克隆,slave2、slave3虚拟机的克隆步骤可参考slave1的克隆。

5.修改Slave主机IP地址配置

完成克隆虚拟机后,需要对Slave主机的IP地址配置进行修改。其中,slave1虚拟机的IP地址配置步骤如下。

图2-54 设置新虚拟机的名称和存储位置

(1)打开新虚拟机,执行命令“ifconfig -a”,将查看到的eth1和HWaddr后面的内容记录下来,如图2-55所示。

图2-55 查看网络接口配置

(2)修改“/etc/sysconfig/network-scripts/ifcfg-eth0”,将其中的DEVICE、HWADDR中的值改成第(1)步查看到的内容,并根据表2-1修改IPADDR后面的IP地址,如图2-56所示。

图2-56 设置ifcfg-eth0配置文件

(3)修改“/etc/sysconfig/network”,修改主机名为“slave1”。

(4)执行命令“service network restart”使网络配置立即生效。

(5)执行“ip addr”命令查看IP地址是否被修改,如图2-57所示。

图2-57 查看slave1的IP地址

(6)执行命令“reboot”重启虚拟机。

(7)使用Xshell工具连接新的虚拟机,操作过程请参考2.1.3小节中的内容。后续操作默认在Xshell界面进行。

至此slave1主机的IP地址配置已完成,slave2、slave3主机IP地址配置的步骤参考前述步骤。

6.设置IP映射

在master和3台slave机器中执行“vi/etc/hosts”命令,编辑hosts文件配置IP地址映射,如代码2-5所示,目的是让系统在没有域名系统(Domain Name System,DNS)服务的情况下,可通过主机名访问对应的机器节点。

代码2-5 /etc/hosts文件配置IP地址映射

192.168.128.130  master
192.168.128.131  slave1
192.168.128.132  slave2
192.168.128.133  slave3

7.配置SSH无密码登录

Hadoop集群中,Hadoop要对Linux系统进行脚本控制,需要使用SSH无密码登录。SSH无密码登录的配置步骤如下。

(1)执行“ssh-keygen”命令生成公钥与私钥对。输入命令“ssh-keygen-t rsa”,接着按3次Enter键,将生成私钥id_rsa和公钥id_rsa.pub两个文件,参数“-t”用于指定创建的SSH密钥采用RSA加密方式。

(2)将公钥复制到各主机。执行“ssh-copy-id-i/root/.ssh/id_rsa.pub主机名”命令将master生成的公钥复制到各主机(包括master)中,复制公钥到各主机的命令如代码2-6所示。

代码2-6 复制公钥到各主机的命令

ssh-copy-id -i  /root/.ssh/id_rsa.pub  master   //依次输入yes,123456(root用户的登录密码)
ssh-copy-id -i  /root/.ssh/id_rsa.pub  slave1
ssh-copy-id -i  /root/.ssh/id_rsa.pub  slave2
ssh-copy-id -i  /root/.ssh/id_rsa.pub  slave3

(3)验证是否成功设置SSH无密码登录。在master中,依次执行“ssh slave1”“ssh slave2”“ssh slave3”命令,可验证是否能远程进行SSH无密码连接。当登录其他主机时不提示输入密码,则说明SSH无密码登录已设置成功,可用“exit”命令退出远程登录,如图2-58所示。

图2-58 验证SSH无密码登录

8.配置时间同步服务

Hadoop集群对时间要求很高,主节点与各个从节点的时间都必须同步,故为了实现集群间的时间同步,需要在每台主机配置时间同步服务,即网络时间协议(Network Time Protocol,NTP)服务。NTP服务的配置步骤如下。

(1)安装NTP服务。直接使用YUM安装NTP服务,在各节点使用“yum install-y ntp”命令即可。若出现了“Complete”信息,则说明安装NTP服务成功。若安装出现问题,则需要使用“mount/dev/sr0/media”命令重新挂载本地YUM源操作。

(2)对主机master修改时间同步设置。可设置master节点为NTP服务主节点。执行“vim/etc/ntp.conf”命令打开/etc/ntp.conf文件,注释掉以server开头的行,并添加如代码2-7所示的代码。

代码2-7 为主机master配置NTP服务

restrict  192.168.128.2  mask  255.255.255.0  nomodify  notrap
server  127.127.1.0
fudge  127.127.1.0  stratum  10

(3)在主机slaveX中配置NTP服务。分别在slave1、slave2、slave3中配置NTP服务,同样修改/etc/ntp.conf文件,注释掉server开头的行,并添加如代码2-8所示的代码。

代码2-8 为主机slaveX配置NTP服务

server  master

(4)关闭防火墙。由于防火墙的限制会影响NTP服务的运行,可执行“service iptables stop”“chkconfig iptables off”命令永久关闭防火墙,注意主节点和从节点同时关闭(CentOS 7.X关闭防火墙的命令为“systemctl stop firewalld.service”“systemctl disable firewalld.service”)。

(5)启动NTP服务。启动NTP服务的步骤如下。

① 在master上执行“service ntpd start”“chkconfig ntpd on”命令。

② 在slaveX上执行“ntpdate master”即可同步时间。

③ 在slaveX上分别执行“service ntpd start”“chkconfig ntpd on”命令即可启动并永久启动NTP服务。

9.Hadoop安装及配置

Hadoop的版本较多,本书以Hadoop 3.1.4为例,讲解其主要的安装及配置步骤,其他版本可参照进行。另外为节省安装、配置时间,本书将先配置master主机,再通过远程复制文件的scp命令配置其他Slave主机。

(1)上传文件。通过远程文件传输工具Xftp连接到master主机,上传hadoop-3.1.4.tar.gz文件至/opt目录下。

(2)解压hadoop-3.1.4.tar.gz文件。执行“tar-zxf hadoop-3.1.4.tar.gz-C/usr/local/”命令,将hadoop-3.1.4.tar.gz文件解压至/usr/local/目录下。

(3)配置Hadoop文件。Hadoop配置文件的修改、添加步骤如下。

① 执行“cd/usr/local/hadoop-3.1.4/etc/hadoop/”命令切换目录。

② 依次修改配置文件core-site.xml、hadoop-env.sh、hdfs-site.xml、mapred-site.xml、yarn-site.xml、yarn-env.sh和workers。

a. core-site.xml配置内容如代码2-9所示。

代码2-9 core-site.xml配置内容

<configuration>
     <property>
             <name>fs.defaultFS</name>
             <value>hdfs://master:9820</value>       ## (旧端口:8020)
     </property>
     <property>
             <name>hadoop.tmp.dir</name>
             <value>/var/log/hadoop/tmp</value>
             <description>Abase for other temporary directories.</description>
     </property>
</configuration>

b. hadoop-env.sh配置内容如代码2-10所示。

代码2-10 hadoop-env.sh配置内容

export JAVA_HOME=/usr/java/jdk1.8.0_221-amd64  #目录依据安装版本不同而有所不同

c. hdfs-site.xml配置内容如代码2-11所示。

代码2-11 hdfs-site.xml配置内容

<configuration>
<property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///data/hadoop/hdfs/name</value>
</property>
<property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///data/hadoop/hdfs/data</value>
</property>
<property>
     <name>dfs.namenode.secondary.http-address</name>
     <value>master:9868</value>     ## (旧端口:50090)
</property>
<property>
     <name>dfs.replication</name>
     <value>3</value>
</property>
</configuration>

d. mapred-site.xml配置内容如代码2-12所示。

代码2-12 mapred-site.xml配置内容

<configuration>
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
<!-- jobhistory properties -->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>master:10020</value>
</property>
<property>
     <name>mapreduce.jobhistory.webapp.address</name>
     <value>master:19888</value>
</property>
</configuration>

e. yarn-site.xml配置内容如代码2-13所示。

代码2-13 yarn-site.xml配置内容

<configuration>
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>master</value>
  </property>
  <property>
    <name>yarn.resourcemanager.address</name>
    <value>${yarn.resourcemanager.hostname}:8032</value>
  </property>
  <property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>${yarn.resourcemanager.hostname}:8030</value>
  </property>
  <property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>${yarn.resourcemanager.hostname}:8088</value>
  </property>
  <property>
    <name>yarn.resourcemanager.webapp.https.address</name>
    <value>${yarn.resourcemanager.hostname}:8090</value>
  </property>
  <property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>${yarn.resourcemanager.hostname}:8031</value>
  </property>
  <property>
    <name>yarn.resourcemanager.admin.address</name>
    <value>${yarn.resourcemanager.hostname}:8033</value>
  </property>
  <property>
    <name>yarn.nodemanager.local-dirs</name>
    <value>/data/hadoop/yarn/local</value>
  </property>
  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
  </property>
  <property>
    <name>yarn.nodemanager.remote-app-log-dir</name>
    <value>/data/tmp/logs</value>
  </property>
<property>
 <name>yarn.log.server.url</name>
 <value>http://master:19888/jobhistory/logs/</value>
 <description>URL for job history server</description>
</property>
<property>
   <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
  </property>
 <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
      <value>org.apache.hadoop.mapred.ShuffleHandler</value>
      </property>
<property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>2048</value>
 </property>
 <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>512</value>
 </property>
 <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>4096</value>
 </property>
 <property>
    <name>mapreduce.map.memory.mb</name>
    <value>2048</value>
 </property>
 <property>
    <name>mapreduce.reduce.memory.mb</name>
    <value>2048</value>
 </property>
 <property>
    <name>yarn.nodemanager.resource.cpu-vcores</name>
    <value>1</value>
 </property>
</configuration>

f. yarn-env.sh配置内容如代码2-14所示。

代码2-14 yarn-env.sh配置内容

export JAVA_HOME=/usr/java/jdk1.8.0_221-amd64

g. 配置workers文件时需先删除原有的localhost,再添加配置内容,workers配置内容如代码2-15所示。

代码2-15 workers配置内容

slave1
slave2
slave3

(4)复制Hadoop安装文件至集群Slave节点。通过scp命令将Hadoop安装文件远程分发至另外3台Slave主机,如代码2-16所示。

代码2-16 分发安装文件至Slave主机命令

scp -r /usr/local/hadoop-3.1.4 slave1:/usr/local
scp -r /usr/local/hadoop-3.1.4 slave2:/usr/local
scp -r /usr/local/hadoop-3.1.4 slave3:/usr/local

(5)配置Hadoop环境变量。执行“vi/etc/profile”命令修改profile文件的配置,如代码2-17所示。修改完成并保存退出后执行“source/etc/profile”命令使环境变量生效。

代码2-17 配置profile文件内容

export HADOOP_HOME=/usr/local/hadoop-3.1.4
export PATH=$HADOOP_HOME/bin:$PATH
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_JOURNALNODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

(6)格式化NameNode。进入Hadoop命令目录“cd/usr/local/hadoop-3.1.4/bin”,再执行格式化“./hdfs namenode-format”命令,当出现“Storage directory/data/hadoop/hdfs/name has been successfully formatted”提示时,表示完成NameNode格式化工作,如图2-59所示。

图2-59 完成NameNode格式化工作

(7)启动Hadoop集群。在主节点和从节点中执行“cd/usr/local/hadoop-3.1.4/sbin”命令,进入脚本目录。启动Hadoop集群,如代码2-18所示。

代码2-18 启动Hadoop集群

./start-dfs.sh
./start-yarn.sh
./mr-jobhistory-daemon.sh start historyserver

(8)查看Java进程。Hadoop集群启动后,在4个节点中执行“jps”命令,可以查看到表2-2所示的主从节点进程列表。

表2-2 主从节点进程列表

(9)在本地计算机添加IP地址和域名映射。为方便在本地(desktop)访问Hadoop集群中的主机,需要在本地计算机的“C:\Windows\System32\drivers\etc\hosts”文件中添加IP地址和域名映射,hosts文件配置内容如代码2-19所示。

代码2-19 hosts文件配置内容

192.168.128.130 master master.centos.com
192.168.128.131 slave1 slave1.centos.com
192.168.128.132 slave2 slave2.centos.com
192.168.128.133 slave3 slave3.centos.com

(10)使用浏览器查看服务情况。在desktop客户端浏览器查看服务的地址如下。

① HDFS服务地址:http://master:9870。

② YARN资源服务地址:http://master:8088。

(11)处理异常问题。当集群格式化或启动出现问题时,可以按如下方法进行处理。

① 若启动后主节点Jps正常,子节点Jps中DataNode没有启动,则复制主节点的data/hadoop/hdfs/name/current/VERSION中的Cluster_ID,以替换其他子节点的data/hadoop/hdfs/data/current/VERSION中的Cluster_ID。

② 若出现其他问题,则检查相关配置文件。可通过查看格式化NameNode的报错信息、集群启动日志文件等具体信息进行排查,其中集群启动日志文件的路径参见执行启动命令后的输出信息提示。