2.2.3 Hadoop集群安装
上一节(2.2.2节)所述的内容只是在单台服务器上安装Hadoop,但是实际情况下都会选择运行Hadoop集群环境。为了快速地搭建集群以及分发成功的运行脚本,我们先创建一个集群分发文件同步脚本,为集群分发脚本设置环境变量以及为当前三台服务器设置免密登录,然后在此基础上进行Hadoop集群安装。
1.创建集群分发脚本
步骤01 在/home/clay目录中创建一个文件名为xsync的分发脚本。相关命令如下:
#切换到/home/clay目录 cd /home/clay #创建一个名为bin的目录 mkdir bin #进入bin目录 cd bin #创建xsync文件 vim xsync
步骤02 在xsync文件中写入如下脚本命令:
#!/bin/bash if [ $#-lt 1 ] then echo Not Enough Argument! exit; fi for host in hadoop101 hadoop102 hadoop103 do echo ==================== $host ==================== for file in $@ do if [ -e $file ] then pdir=$(cd -P $(dirname $file); pwd) fname=$(basename $file) ssh $host "mkdir -p $pdir" rsync -av $pdir/$fname $host:$pdir else echo $file does not exists! fi done done
步骤03 此文件的注释版本如下:
#!/bin/bash #判断参数个数 if [ $#-lt 1 ] then echo Not Enough Argument! exit; fi #遍历服务名为hadoop101, hadoop102, hadoop103的服务器 for host in hadoop101 hadoop102 hadoop103 do echo ==================== $host ==================== #遍历所有目录,并且发送内容到此目录 for file in $@ do #判断文件是否存在 if [ -e $file ] then #获取父目录 pdir=$(cd -P $(dirname $file); pwd) #获取当前文件的名称 fname=$(basename $file) #远程登录此服务器,并创建对应的目录 ssh $host "mkdir -p $pdir" rsync -av $pdir/$fname $host:$pdir else echo $file does not exists! fi done done
提示
在xsync文件中尽量不要写中文,否则会因为乱码问题导致文件程序错误。
2.设置分发脚本的环境变量
步骤01 通过clay用户执行下面的命令以进行环境变量的配置:
sudo vim /etc/profile.d/my_env.sh
步骤02 在文件中添加如下变量:
#xsync export PATH=$PATH:/home/clay/bin
步骤03 执行下面的命令以使环境变量生效:
source /etc/profile
步骤04 执行下面的命令给分发脚本设置权限:
chown clay:clay /home/clay/bin/xsync chown clay:clay /home/clay/bin/xsync
步骤05 执行下面的命令,把xsync脚本分发到当前三台服务器中。这样就可以让每一台服务器都具有分发文件的功能。
xsync /home/clay/bin
步骤06 为了让每台机器都有操作权限,需要同步当前服务器上已经修改好的环境变量,执行如下命令以同步环境变量:
sudo./bin/xsync /etc/profile.d/my_env.sh
步骤07 分别在每一台服务器上执行下面的命令,以使环境变量生效。
source /etc/profile
3.配置SSH免密登录
上述操作完成后,在进行文件分发时,首先需要登录需要同步文件的服务器账号。为了简化此操作,我们可以为多台服务器配置免密登录,也就是说,在配置完免密登录之后,每次分发文件的时候都不需要再进行登录操作。
步骤01 首先我们需要保证,hadoop102、hadoop103中存在与hadoop101一样的目录/home/clay/.ssh和相同的clay账号。
步骤02 在每一台机器上都执行如下命令以生成证书:
#把操作用户切换为clay用户 su clay #切换到/.ssh 目录 cd /home/clay/.ssh #生成证书 ssh-keygen -t rsa
提示
在执行生成证书的过程中,只需连续按三次回车键即可生成证书。
步骤03 在每一台服务器中的同名/home/clay/.ssh目录中,每一台服务器都执行下面的三条命令。
#证书复制到dadoop101服务器中 ssh-copy-id hadoop101 #证书复制到dadoop102服务器中 ssh-copy-id hadoop102 #证书复制到dadoop103服务器中 ssh-copy-id hadoop103
4. Hadoop集群安装
在搭建Hadoop集群过程中,最核心的四个配置文件分别是core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml。接下来在hadoop101服务器上对这四个文件进行配置。
(1)配置core-site.xml文件
步骤01 执行下面的命令,切换到Hadoop安装包所在的目录。
#切换目录 cd $HADOOP_HOME/etc/hadoop
步骤02 修改此文件,执行如下命令:
#修改文件 vi core-site.xml
此配置文件的最终内容如下:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 指定 NameNode 的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop101:8020</value> </property> <!-- 指定 hadoop 数据的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-3.3.1/data</value> </property> <!-- 配置 HDFS 网页登录使用的静态用户为 clay --> <property> <name>hadoop.http.staticuser.user</name> <value>clay</value> </property> </configuration>
(2)配置hdfs-site.xml文件
步骤01 执行下面的命令,切换到Hadoop安装包所在的目录。
#切换目录 cd $HADOOP_HOME/etc/hadoop
步骤02 修改此文件,执行如下命令:
#修改文件 vi hdfs-site.xml
此配置文件最终的内容如下:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- namenode web 端访问地址--> <property> <name>dfs.namenode.http-address</name> <value>hadoop101:9870</value> </property> <!-- namenode.secondary web 端访问地址--> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop103:9868</value> </property> </configuration>
(3)配置yarn-site.xml文件
步骤01 执行下面的命令,切换到Hadoop安装包所在的目录。
#切换目录 cd $HADOOP_HOME/etc/hadoop
步骤02 修改此文件,执行如下命令:
#修改文件 vi yarn-site.xml
此配置文件最终的内容如下:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 指定nodemanager走shuffle --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定 ResourceManager 的地址--> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop102</value> </property> <!-- 环境变量的继承 --> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP RED_HOME</value> </property> </configuration>
(4)配置mapred-site.xml文件
步骤01 执行下面的命令,切换到Hadoop安装包所在的目录。
#切换目录 cd $HADOOP_HOME/etc/hadoop
步骤02 修改此文件,执行如下命令:
#修改文件 vi mapred-site.xml
此配置文件最终的内容如下:
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME={hadoopclasspath}</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME={hadoopclasspath}</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME={hadoopclasspath}</value> </property> <!-- 历史服务器端地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop101:10020</value> </property> <!-- 历史服务器 web 端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop101:19888</value> </property> </configuration>
在上述配置中要注意的是:需要把配置文件中三处“{hadoopclasspath}”替换为在当前服务器上执行“hadoop classpath”命令返回的查询结果。
笔者的服务器的完整配置文件内容如下:
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. See accompanying LICENSE file. --> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.3.1/etc/hadoop:/opt/module/hadoop-3.3.1/share/hadoop/common/lib/*:/opt/module/hadoop-3.3.1/share/hadoop/common/*:/opt/module/hadoop-3.3.1/share/hadoop/hdfs:/opt/module/hadoop-3.3.1/share/hadoop/hdfs/lib/*:/opt/module/hadoop-3.3.1/share/hadoop/hdfs/*:/opt/module/hadoop-3.3.1/share/hadoop/mapreduce/lib/*:/opt/module/hadoop-3.3.1/share/hadoop/mapreduce/*:/opt/module/hadoop-3.3.1/share/hadoop/yarn:/opt/module/hadoop-3.3.1/share/hadoop/yarn/lib/*:/opt/module/hadoop-3.3.1/share/hadoop/yarn/*</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.3.1/etc/hadoop:/opt/module/hadoop-3.3.1/share/hadoop/common/lib/*:/opt/module/hadoop-3.3.1/share/hadoop/common/*:/opt/module/hadoop-3.3.1/share/hadoop/hdfs:/opt/module/hadoop-3.3.1/share/hadoop/hdfs/lib/*:/opt/module/hadoop-3.3.1/share/hadoop/hdfs/*:/opt/module/hadoop-3.3.1/share/hadoop/mapreduce/lib/*:/opt/module/hadoop-3.3.1/share/hadoop/mapreduce/*:/opt/module/hadoop-3.3.1/share/hadoop/yarn:/opt/module/hadoop-3.3.1/share/hadoop/yarn/lib/*:/opt/module/hadoop-3.3.1/share/hadoop/yarn/*</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.3.1/etc/hadoop:/opt/module/hadoop-3.3.1/share/hadoop/common/lib/*:/opt/module/hadoop-3.3.1/share/hadoop/common/*:/opt/module/hadoop-3.3.1/share/hadoop/hdfs:/opt/module/hadoop-3.3.1/share/hadoop/hdfs/lib/*:/opt/module/hadoop-3.3.1/share/hadoop/hdfs/*:/opt/module/hadoop-3.3.1/share/hadoop/mapreduce/lib/*:/opt/module/hadoop-3.3.1/share/hadoop/mapreduce/*:/opt/module/hadoop-3.3.1/share/hadoop/yarn:/opt/module/hadoop-3.3.1/share/hadoop/yarn/lib/*:/opt/module/hadoop-3.3.1/share/hadoop/yarn/*</value> </property> <!-- 历史服务器端地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop101:10020</value> </property> <!-- 历史服务器 web 端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop101:19888</value> </property> </configuration>
(5)分发Hadoop程序的相关文件
当hadoop101的四个配置文件都配置完成之后,我们只需向hadoop102和hadoop103服务器上分发这些配置文件和相关程序。
步骤01 在hadoop101服务器上执行如下命令,进行内容的分发:
#切换操作用户到clay用户 su clay #分发hadoop文件夹下面的所有目录和文件 xsync /opt/module/hadoop-3.3.1/etc/hadoop/
步骤02 分发完成之后,在hadoop102和hadoop103服务器上执行下面的命令,查看其中的配置文件是否存在以及内容是否正确。
cat /opt/module/hadoop-3.3.1/etc/hadoop/core-site.xml cat /opt/module/hadoop-3.3.1/etc/hadoop/hdfs-site.xml cat /opt/module/hadoop-3.3.1/etc/hadoop/yarn-site.xml cat /opt/module/hadoop-3.3.1/etc/hadoop/ mapred-site.xml
(6)配置Hadoop集群
Hadoop相关文件分发完成之后就需要配置Hadoop集群。
步骤01 在hadoop101服务器上执行如下命令进行配置。
#在hadoop101服务器上进行hadoop集群配置 vi /opt/module/hadoop-3.3.1/etc/hadoop/workers
配置文件的内容设置如下:
hadoop101 hadoop102 hadoop103
步骤02 给其他服务器分发此配置文件,执行如下命令:
xsync /opt/module/hadoop-3.3.1/etc
(7)启动Hadoop集群
上述配置完成之后,只需要在各个服务器上启动对应的服务。
步骤01 在hadoop101服务器上执行下面的命令:
su clay cd /opt/module/hadoop-3.3.1/bin #格式化NameNode hdfs namenode -format cd /opt/module/hadoop-3.3.1 #启动HDFS sbin/start-dfs.sh
步骤02 在hadoop102服务器上执行下面的命令:
su clay cd /opt/module/hadoop-3.3.1/ sbin/start-yarn.sh
至此,hadoop集群环境搭建成功。在浏览器中输入地址http://hadoop101:9870,如果出现的结果如图2-10所示,就表示启动成功。
图2-10 Hadoop控制台