虚拟机环境
192.168.10.100 hadoop100 192.168.10.101 hadoop101 192.168.10.102 hadoop102 192.168.10.103 hadoop103 192.168.10.104 hadoop104
搭建前准备
- 安装 epel-releaseyum install -y epel-release Extra Packages for Enterprise Linux 是为“红帽系”的操作系统提供额外的软件包,适用于 RHEL、CentOS 和 Scientific Linux。相当于是一个软件仓库,大多数 rpm 包在官方repository 中是找不到的)
- 关闭防火墙,关闭防火墙开机自启systemctl stop firewalld systemctl disable firewalld.service
- 卸载虚拟机自带的 JDKrpm -qa | grep -i java | xargs -n1 rpm -e —nodeps
- rpm -qa:查询所安装的所有 rpm 软件包
- grep -i:忽略大小写
- xargs -n1:表示每次只传递一个参数
- rpm -e –nodeps:强制卸载软件
- 修改 IP vim /etc/sysconfig/network-scripts/ifcfg-ens33 BOOTPROTO=static NAME=”ens33” IPADDR=192.168.10.100 PREFIX=24 GATEWAY=192.168.10.2 DNS1=192.168.10.2
- 修改主机名vim /etc/hostname hadoop100
- 配置 Linux 克隆机主机名称映射 hosts 文件,打开/etc/hostsvim /etc/hosts 192.168.10.100 hadoop100 192.168.10.101 hadoop101 192.168.10.102 hadoop102
- 安装 JDK(略)
- 重启虚拟机reboot
hadoop101、hadoop102虚拟机步骤和上面一致,但是IP地址和主机名要对应修改
安装 Hadoop
- 下载Hadoopcd /opt/software/ wget https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.2.2/hadoop-3.2.2.tar.gz
- 解压安装文件到/opt/module 下面tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
- 将 Hadoop 添加到环境变量vim /etc/profile.d/my_env.sh #HADOOP_HOME export HADOOP_HOME=/opt/module/hadoop-3.1.3 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin
- 让修改后的文件生效source /etc/profile
-
Hadoop 目录结构
总用量 52 drwxr-xr-x. 2 atguigu atguigu 4096 5 月 22 2017 bin drwxr-xr-x. 3 atguigu atguigu 4096 5 月 22 2017 etc drwxr-xr-x. 2 atguigu atguigu 4096 5 月 22 2017 include drwxr-xr-x. 3 atguigu atguigu 4096 5 月 22 2017 lib drwxr-xr-x. 2 atguigu atguigu 4096 5 月 22 2017 libexec -rw-r—r—. 1 atguigu atguigu 15429 5 月 22 2017 LICENSE.txt -rw-r—r—. 1 atguigu atguigu 101 5 月 22 2017 NOTICE.txt -rw-r—r—. 1 atguigu atguigu 1366 5 月 22 2017 README.txt drwxr-xr-x. 2 atguigu atguigu 4096 5 月 22 2017 sbin drwxr-xr-x. 4 atguigu atguigu 4096 5 月 22 2017 share
重要目录 bin 目录:存放对 Hadoop 相关服务(hdfs,yarn,mapred)进行操作的脚本
- etc 目录:Hadoop 的配置文件目录,存放 Hadoop 的配置文件
- lib 目录:存放 adoop 的本地库(对数据进行压缩解压缩功能)
- sbin 目录:存放启动或停止 Hadoop 相关服务的脚本
share 目录:存放 Hadoop 的依赖 jar 包、文档、和官方案例
Hadoop 运行模式
Hadoop 运行模式包括:本地模式、伪分布式模式以及完全分布式模式。
本地模式:单机运行,只是用来演示一下官方案例。生产环境不用。
- 伪分布式模式:也是单机运行,但是具备 Hadoop 集群的所有功能,一台服务器模拟一个分布式的环境。个别缺钱的公司用来测试,生产环境不用。
-
本地运行模式(官方 WordCount)
创建在 hadoop-3.1.3 文件下面创建一个 wcinput 文件夹mkdir wcinput
- 在 wcinput 文件下创建一个 word.txt 文件cd wcinput
- 编辑 word.txt 文件vim word.txt hadoop yarn hadoop mapreduce atguigu atguigu
- 回到 Hadoop 目录/opt/module/hadoop-3.1.3
- 执行程序hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput wcoutput
查看结果cat wcoutput/part-r-00000 atguigu 2 hadoop 2 mapreduce 1 yarn 1
完全分布式运行模式
环境:
准备 3 台客户机(关闭防火墙、静态 IP、主机名称)
- 安装 JDK
- 配置环境变量
- 安装 Hadoop
- 配置环境变量
- 配置集群
- 单点启动
- 配置 ssh
-
编写集群分发脚本 xsync
在/home/atguigu/bin 目录下创建 xsync 文件cd /home/atguigu mkdir bin cd bin vim xsync
在该文件中编写如下代码#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4. 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host “mkdir -p $pdir”
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done修改脚本 xsync 具有执行权限chmod +x xsync
- 将脚本复制到/bin 中,以便全局调用sudo cp xsync /bin/
- 同步环境变量配置(root 所有者)sudo ./bin/xsync
-
集群配置
集群部署规划
注意:
NameNode 和 SecondaryNameNode 不要安装在同一台服务器
- ResourceManager 也很消耗内存,不要和 NameNode、SecondaryNameNode 配置在同一台机器上。
| | hadoop102 | hadoop103 | hadoop104 |
| —- | —- | —- | —- |
| HDFS | NameNode
DataNode | DataNode | SecondaryNameNode
DataNode | | YARN | NodeManager | ResourceManager
NodeManager | NodeManager |
配置文件说明
Hadoop 配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。
默认配置文件: | 要获取的默认文件 | 文件存放在 Hadoop 的 jar 包中的位置 | | —- | —- | | [core-default.xml] | hadoop-common-3.1.3.jar/core-default.xml | | [hdfs-default.xml] | hadoop-hdfs-3.1.3.jar/hdfs-default.xml | | [yarn-default.xml] | hadoop-yarn-common-3.1.3.jar/yarn-default.xml | | [mapred-default.xml] | hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml |
自定义配置文件:core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 四个配置文件存放在$HADOOP_HOME/etc/hadoop 这个路径上,用户可以根据项目需求重新进行修改配置。
配置集群
核心配置文件
配置 core-site.xmlcd $HADOOP_HOME/etc/hadoop vim core-site.xml <?xml version=”1.0” encoding=”UTF-8”?>
<?xml-stylesheet type=”text/xsl” href=”configuration.xsl”?>
fs.defaultFS
hdfs://hadoop102:8020
hadoop.tmp.dir
/opt/module/hadoop-3.1.3/data
hadoop.http.staticuser.user
atguigu
HDFS 配置文件配置 hdfs-site.xmlvim hdfs-site.xml <?xml version=”1.0” encoding=”UTF-8”?>
<?xml-stylesheet type=”text/xsl” href=”configuration.xsl”?>
dfs.namenode.http-address
hadoop102:9870
dfs.namenode.secondary.http-address
hadoop104:9868
YARN 配置文件配置 yarn-site.xmlvim yarn-site.xml <?xml version=”1.0” encoding=”UTF-8”?>
<?xml-stylesheet type=”text/xsl” href=”configuration.xsl”?>
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.hostname
hadoop103
yarn.nodemanager.env-whitelist
JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO
NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
RED_HOME
MapReduce 配置文件配置 mapred-site.xmlvim mapred-site.xml <?xml version=”1.0” encoding=”UTF-8”?>
<?xml-stylesheet type=”text/xsl” href=”configuration.xsl”?>
mapreduce.framework.name
yarn
在集群上分发配置好的 Hadoop 配置文件xsync /opt/module/hadoop-3.1.3/etc/hadoop/
群起集群
配置 workersvim /opt/module/hadoop-3.1.3/etc/hadoop/workers hadoop102 hadoop103 hadoop104 注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。同步所有节点配置文件xsync /opt/module/hadoop-3.1.3/etc
- 启动集群
- 如果集群是第一次启动,需要在 hadoop102 节点格式化 NameNode(注意:格式化 NameNode,会产生新的集群 id,导致 NameNode 和 DataNode 的集群 id 不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化 NameNode 的话,一定要先停 止 namenode 和 datanode 进程,并且要删除所有机器的 data 和 logs 目录,然后再进行格式化。)hdfs namenode -format
- 启动 HDFSsbin/start-dfs.sh
- 在配置了 ResourceManager 的节点(hadoop103)启动 YARNsbin/start-yarn.sh
- Web 端查看 HDFS 的 NameNode
- 浏览器中输入:http://hadoop102:9870
- 查看 HDFS 上存储的数据信息
- Web 端查看 YARN 的 ResourceManager
- 浏览器中输入:http://hadoop103:8088
- 查看 YARN 上运行的 Job 信息
集群基本测试
- 上传文件到集群
- 上传小文件hadoop fs -mkdir /input hadoop fs -put $HADOOP_HOME/wcinput/word.txt /input
- 上传大文件hadoop fs -put /opt/software/jdk-8u212-linux-x64.tar.gz /
- 上传文件后查看文件存放在什么位置
- 上传文件到集群
配置 mapred-site.xmlvim mapred-site.xml 在该文件里面增加如下配置
mapreduce.jobhistory.address
hadoop102:10020
mapreduce.jobhistory.webapp.address
hadoop102:19888 分发配置xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
- 在 hadoop102 启动历史服务器mapred —daemon start historyserver
- 查看历史服务器是否启动jps
查看 JobHistoryhttp://hadoop102:19888/jobhistory
配置日志的聚集
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到 HDFS 系统上。

日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能,需要重新启动 NodeManager 、ResourceManager 和HistoryServer。
开启日志聚集功能具体步骤如下:配置 yarn-site.xmlvim yarn-site.xml
yarn.log-aggregation-enable
true
yarn.log.server.url
http://hadoop102:19888/jobhistory/logs
yarn.log-aggregation.retain-seconds
604800 分发配置xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml
- 关闭 NodeManager 、ResourceManager 和 HistoryServersbin/stop-yarn.sh mapred —daemon stop historyserver
- 启动 NodeManager 、ResourceManage 和 HistoryServerstart-yarn.sh mapred —daemon start historyserver
- 删除 HDFS 上已经存在的输出文件hadoop fs -rm -r /output
- 执行 WordCount 程序hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output
查看日志
- 历史服务器地址http://hadoop102:19888/jobhistory
- 历史任务列表

- 查看任务运行日志

- 运行日志详情
集群启动/停止方式总结
各个模块分开启动/停止(配置 ssh 是前提)
- 整体启动/停止 HDFSstart-dfs.sh/stop-dfs.sh
- 整体启动/停止 YARNstart-yarn.sh/stop-yarn.sh
各个服务组件逐一启动/停止
Hadoop 集群启停脚本(包含 HDFS,Yarn,Historyserver):myhadoop.shcd /home/atguigu/bin vim myhadoop.sh #!/bin/bash
if [ $# -lt 1 ]
then
echo “No Args Input…”
exit ;
fi
case $1 in
“start”)
echo “ =================== 启动 hadoop 集群 ===================”
echo “ ———————- 启动 hdfs ———————-“
ssh hadoop102 “/opt/module/hadoop-3.1.3/sbin/start-dfs.sh”
echo “ ———————- 启动 yarn ———————-“
ssh hadoop103 “/opt/module/hadoop-3.1.3/sbin/start-yarn.sh”
echo “ ———————- 启动 historyserver ———————-“
ssh hadoop102 “/opt/module/hadoop-3.1.3/bin/mapred —daemon start
historyserver”
;;
“stop”)
echo “ =================== 关闭 hadoop 集群 ===================”
echo “ ———————- 关闭 historyserver ———————-“
ssh hadoop102 “/opt/module/hadoop-3.1.3/bin/mapred —daemon stop
historyserver”
echo “ ———————- 关闭 yarn ———————-“
ssh hadoop103 “/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh”
echo “ ———————- 关闭 hdfs ———————-“
ssh hadoop102 “/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh”
;;
*)
echo “Input Args Error…”
;;
esac
保存后退出,然后赋予脚本执行权限chmod +x myhadoop.sh- 查看三台服务器 Java 进程脚本:jpsallcd /home/atguigu/bin vim jpsall #!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo =============== $host ===============
ssh $host jps
done
保存后退出,然后赋予脚本执行权限chmod +x jpsall - 分发/home/atguigu/bin 目录,保证自定义脚本在三台机器上都可以使用xsync /home/atguigu/bin/
常用端口号说明
| 端口名称 | Hadoop2.x | Hadoop3.x | | —- | —- | —- | | NameNode 内部通信端口 | 8020 / 9000 | 8020 / 9000/9820 | | NameNode HTTP UI | 50070 | 9870 | | MapReduce 查看执行任务端口 | 8088 | 8088 | | 历史服务器通信端口 | 19888 | 19888 |
