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的报错信息、集群启动日志文件等具体信息进行排查,其中集群启动日志文件的路径参见执行启动命令后的输出信息提示。