Hadoop 集群搭建实战
Hadoop 集群搭建实战
环境准备:
1. VMware 搭建三台CentOS 7.8主机
2. 静态IP,关闭防火墙,修改主机名,配置免密登录,集群时间同步
3. 在/opt目录下创建文件夹
mkdir -p /opt/apps/software --软件安装包存放目录
mkdir -p /opt/apps/servers --软件安装目录
4. Hadoop下载地址:
https://archive.apache.org/dist/hadoop/common/hadoop-2.9.2/
5. 上传hadoop安装文件到/opt/apps/software
集群规划:
| 框架 | hadoop-121 | hadoop-122 | hadoop-123 |
|---|---|---|---|
| HDFS | NameNode、DataNode | DataNode | SecondaryNameNode、DataNode |
| YARN | NodeManager | NodeManager | NodeManager、ResourceManager |
安装Hadoop
-
登录hadoop-121节点,进入/opt/apps/software,解压安装文件到/opt/apps/servers
tar -zxvf hadoop-2.9.2.tar.gz -C /opt/apps/servers -
查看是否解压成功
ls /opt/apps/servers/ -
添加Hadoop到环境变量 vim /etc/profile
# hadoop export HADOOP_HOME=/opt/apps/servers/hadoop-2.9.2 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin -
使环境变量生效
source /etc/profile -
验证hadoop是否安装成功
hadoop version -
hadoop安装目录下各个文件
drwxr-xr-x. 2 501 dialout 194 Nov 13 2018 bin drwxr-xr-x. 3 501 dialout 20 Nov 13 2018 etc drwxr-xr-x. 2 501 dialout 106 Nov 13 2018 include drwxr-xr-x. 3 501 dialout 20 Nov 13 2018 lib drwxr-xr-x. 2 501 dialout 239 Nov 13 2018 libexec -rw-r--r--. 1 501 dialout 106210 Nov 13 2018 LICENSE.txt -rw-r--r--. 1 501 dialout 15917 Nov 13 2018 NOTICE.txt -rw-r--r--. 1 501 dialout 1366 Nov 13 2018 README.txt drwxr-xr-x. 3 501 dialout 4096 Nov 13 2018 sbin drwxr-xr-x. 4 501 dialout 31 Nov 13 2018 share 主要目录介绍如下: 1. bin目录:对Hadoop进行操作的相关命令,如hadoop,hdfs等 2. etc目录:Hadoop的配置文件目录,入hdfs-site.xml,core-site.xml等 3. lib目录:Hadoop本地库(解压缩的依赖) 4. sbin目录:存放的是Hadoop集群启动停止相关脚本,命令 5. share目录:Hadoop的一些jar,官方案例jar,文档等
集群配置
Hadoop集群配置 = HDFS集群配置 + MapReduce集群配置 + Yarn集群配置
HDFS集群配置
-
将JDK路径明确配置给HDFS(修改hadoop-env.sh)
-
指定NameNode节点以及数据存储目录(修改core-site.xml)
-
指定SecondaryNameNode节点(修改hdfs-site.xml)
-
指定DataNode从节点(修改etc/hadoop/slaves文件,每个节点配置信息占一行)
MapReduce集群配置
-
将JDK路径明确配置给MapReduce(修改mapred-env.sh)
-
指定MapReduce计算框架运行Yarn资源调度框架(修改mapred-site.xml)
Yarn集群配置
-
将JDK路径明确配置给Yarn(修改yarn-env.sh)
-
指定ResourceManager老大节点所在计算机节点(修改yarn-site.xml)
-
指定NodeManager节点(会通过slaves文件内容确定)
集群配置具体步骤:
HDFS集群配置
~# cd /opt/apps/servers/hadoop-2.9.2/etc/hadoop/
-
配置hadoop-env.sh,将JDK路径明确配置给HDFS
~# vim hadoop-env.sh export JAVA_HOME=/usr/local/apps/jdk/jdk1.8.0_301 -
指定NameNode节点以及数据存储目录(修改core-site.xml)
~# vim core-site.xml<configuration> <!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop-121:9000</value> </property> <!-- 指定Hadoop运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/apps/servers/hadoop-2.9.2/data/tmp</value> </property </configuration>core-site.xml的默认配置
https://hadoop.apache.org/docs/r2.9.2/hadoop-project-dist/hadoop-common/core-default.xml -
指定secondarynamenode节点(修改hdfs-site.xml)
~# vim hdfs-site.xml<configuration> <!-- 指定Hadoop辅助名称节点主机配置 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop-123:50090</value> </property> <!--副本数量 --> <property> <name>dfs.replication</name> <value>3</value> </property> </configuration>hdfs-site.xml的默认配置
https://hadoop.apache.org/docs/r2.9.2/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml -
指定datanode从节点(修改slaves文件,每个节点配置信息占一行)
~# vim slaves hadoop-121 hadoop-122 hadoop-123注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
MapReduce集群配置
-
指定MapReduce使用的jdk路径(修改mapred-env.sh)
~# vim mapred-env.sh export JAVA_HOME=/usr/local/apps/jdk/jdk1.8.0_301 -
指定MapReduce计算框架运行Yarn资源调度框架(修改mapred-site.xml)
~# mv mapred-site.xml.template mapred-site.xml ~# vim mapred-site.xml<configuration> <!-- 指定MR运行在Yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>mapred-site.xml默认配置
https://hadoop.apache.org/docs/r2.9.2/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml
Yarn集群配置
-
指定JDK路径
~# vim yarn-env.sh export JAVA_HOME=/usr/local/apps/jdk/jdk1.8.0_301 -
指定ResourceManager的master节点信息(修改yarn-site.xml)
~# vim yarn-site.xml<configuration> <!-- 指定YARN的ResourceManager的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop-123</value> </property> <!-- Reducer获取数据的方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>yarn-site.xml的默认配置
https://hadoop.apache.org/docs/r2.9.2/hadoop-yarn/hadoop-yarn-common/yarn-default.xml -
指定NodeManager节点(slaves文件已修改)
注意:
Hadoop安装目录所属用户和所属用户组信息,默认是501 dialout,而我们操作Hadoop集群的用户使用的是虚拟机的root用户,所以为了避免出现信息混乱,修改Hadoop安装目录所属用户和用户组。
~# chown -R root:root /opt/apps/servers/hadoop-2.9.2
分发配置
编写集群分发脚本rsync-script
-
rsync 远程同步工具
rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
-
基本语法
rsync -rvl $pdir/$fname $user@$host:$pdir/$fname -
选项参数说明
选项 功能 -r 递归 -v 显示复制过程 -l 拷贝符号连接
-
-
rsync案例
-
三台虚拟机安装rsync (执行安装需要保证机器联网)
[root@hadoop-121 ~]# yum install -y rsync -
把hadoop-121机器上的/opt/apps/software目录同步到hadoop-122服务器的root用户下的/opt/目录
[root@hadoop-121 ~]# rsync -rvl /opt/apps/software/ root@hadoop-122:/opt/apps/software
-
-
脚本实现
-
在/usr/local/bin目录下创建文件rsync-script,文件内容如下:
[root@hadoop-121 bin]# vim rsync-script #!/bin/bash #1 获取命令输入参数的个数,如果个数为0,直接退出命令 paramnum=$# if((paramnum==0)); then echo no params; exit; fi #2 根据传入参数获取文件名称 p1=$1 file_name=`basename $p1` echo fname=$file_name #3 获取输入参数的绝对路径 pdir=`cd -P $(dirname $p1); pwd` echo pdir=$pdir #4 获取用户名称 user=`whoami` #5 循环执行rsync for((host=121; host<124; host++)); do echo ------------------- hadoop-$host -------------- rsync -rvl $pdir/$file_name $user@hadoop-$host:$pdir done -
修改rsync-script具有执行权限
[root@hadoop-121 bin]# chmod 777 rsync-script -
调用脚本分发Hadoop安装目录到其他节点
[root@hadoop-121 ~]# rsync-script /opt/apps/servers/hadoop-2.9.2
-
启动集群
单节点启动
第一次启动需先格式化NameNode,非第一次不用执行格式化NameNode操作
[root@hadoop-121 hadoop-2.9.2]# hadoop namenode -format
格式化效果:

格式化后创建的文件:/opt/apps/servers/hadoop-2.9.2/data/tmp/dfs/name/current

-
在hadoop-121上启动NameNode
[root@hadoop-121 hadoop-2.9.2]# hadoop-daemon.sh start namenode starting namenode, logging to /opt/apps/servers/hadoop-2.9.2/logs/hadoop-root-namenode-hadoop-01.out [root@hadoop-121 hadoop-2.9.2]# jps 5378 Jps 5302 NameNode -
在hadoop-121、hadoop-122、hadoop-123节点分别启动DataNode
# hadoop-121 [root@hadoop-121 hadoop-2.9.2]# hadoop-daemon.sh start datanode starting datanode, logging to /opt/apps/servers/hadoop-2.9.2/logs/hadoop-root-datanode-hadoop-01.out [root@hadoop-121 hadoop-2.9.2]# jps 5302 NameNode 5565 DataNode 5647 Jps # hadoop-122 [root@hadoop-122 hadoop-2.9.2]# hadoop-daemon.sh start datanode starting datanode, logging to /opt/apps/servers/hadoop-2.9.2/logs/hadoop-root-datanode-hadoop-122.out [root@hadoop-122 hadoop-2.9.2]# jps 4324 DataNode 4406 Jps # hadoop-123 [root@hadoop-123 hadoop-2.9.2]# hadoop-daemon.sh start datanode starting datanode, logging to /opt/apps/servers/hadoop-2.9.2/logs/hadoop-root-datanode-hadoop-123.out [root@hadoop-123 hadoop-2.9.2]# jps 4140 DataNode 4222 Jps -
web端查看Hdfs界面

-
Yarn集群单节点启动
# hadoop-123 [root@hadoop-123 hadoop-2.9.2]# yarn-daemon.sh start resourcemanager starting resourcemanager, logging to /opt/apps/servers/hadoop-2.9.2/logs/yarn-root-resourcemanager-hadoop-123.out [root@hadoop-123 hadoop-2.9.2]# jps 4484 Jps 4140 DataNode 4269 ResourceManager # hadoop-122 [root@hadoop-122 hadoop-2.9.2]# yarn-daemon.sh start nodemanager starting nodemanager, logging to /opt/apps/servers/hadoop-2.9.2/logs/yarn-root-nodemanager-hadoop-122.out [root@hadoop-122 hadoop-2.9.2]# jps 4324 DataNode 4516 Jps 4453 NodeManager # hadoop-121 [root@hadoop-121 hadoop-2.9.2]# yarn-daemon.sh start nodemanager starting nodemanager, logging to /opt/apps/servers/hadoop-2.9.2/logs/yarn-root-nodemanager-hadoop-01.out [root@hadoop-121 hadoop-2.9.2]# jps 5763 Jps 5700 NodeManager 5302 NameNode 5565 DataNode思考:Hadoop集群每次需要一个一个节点的启动,如果节点数量增加至成千上万,那该如何?
集群群起
-
如果之前还未进行NameNode的格式化,需要进行格式化
hadoop namenode -format -
启动HDFS
# hadoop-121 [root@hadoop-121 hadoop-2.9.2]# start-dfs.sh [root@hadoop-121 hadoop-2.9.2]# jps 6657 DataNode 6520 NameNode 7080 Jps 6943 NodeManager # hadoop-122 [root@hadoop-122 hadoop-2.9.2]# jps 4812 DataNode 4942 Jps # hadoop-123 [root@hadoop-123 hadoop-2.9.2]# jps 5250 NodeManager 4837 SecondaryNameNode 5369 Jps 4955 ResourceManager 4733 DataNode -
启动YARN
[root@hadoop-123 hadoop-2.9.2]# start-yarn.sh
注意: NameNode和ResourceManger不是在同一台机器,不能在NameNode上启动YARN,应该在ResouceManager所在的机器上启动YARN。
Hadoop集群启动停止命令汇总
-
各个服务组件逐一启动/停止
-
分别启动/停止HDFS组件
hadoop-daemon.sh start / stop namenode / datanode / secondarynamenode -
启动/停止YARN
yarn-daemon.sh start / stop resourcemanager / nodemanager
-
-
各个模块分开启动/停止(配置ssh是前提)常用
-
整体启动/停止HDFS
start-dfs.sh / stop-dfs.sh -
整体启动/停止YARN
start-yarn.sh / stop-yarn.sh
-
集群测试
-
HDFS分布式存储初体验
从Linux本地文件系统上传下载文件验证HDFS集群是否工作正常
~# hdfs dfs -mkdir -p /test/input #本地home目录创建一个文件 ~# cd /root ~# vim test.txt hello hdfs #上传linxu文件到Hdfs ~# hdfs dfs -put /root/test.txt /test/input #从Hdfs下载文件到linux本地 ~# hdfs dfs -get /test/input/test.txt

2. MapReduce分布式计算初体验
-
在HDFS文件系统根目录下创建一个wcinput文件夹
[root@hadoop-121 ~]# hdfs dfs -put wc.txt /wcinput -
在/root/目录下创建一个wc.txt文件(本地文件系统)
[root@hadoop-121 ~]# vim wc.txt hadoop mapreduce yarn hdfs hadoop mapreduce mapreduce yarn lagou lagou lagou -
上传wc.txt到Hdfs目录/wcinput下
hdfs dfs -put wc.txt /wcinput -
回到Hadoop目录/opt/apps/servers/hadoop-2.9.2,执行程序
[root@hadoop-121 hadoop-2.9.2]# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar wordcount /wcinput /wcoutput -
查看结果
[root@hadoop-121 hadoop-2.9.2]# hdfs dfs -cat /wcoutput/part-r-00000 hadoop 2 hdfs 1 lagou 3 mapreduce 3 yarn 2