二、Hadoop集群搭建
2.1、Hadoop安装
- 将Hadoop安装包导入hadoop102的/opt/software文件夹下
- 将Hadoop安装包解压至/opt/module文件夹下
[atguigu@hadoop102 software]$ tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
- 配置Hadoop的环境变量
在/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
- 分发Hadoop以及环境变量
[atguigu@hadoop102 module]$ my_xsync /opt/module/hadoop-3.1.3
[atguigu@hadoop102 module]$ sudo my_xsync /etc/profile.d/my_env.sh
- 环境变量立即生效(所有主机)
[atguigu@hadoop102 software]$ source /etc/profile.d/my_env.sh
- Hadoop测试
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop version
2.2、完全分布式运行模式
2.2.1、集群配置
- 集群部署规划
NameNode、SecondaryNameNode、ResourceManager非常消耗计算机资源,不要配置在同一台机器上
hadoop102 | hadoop103 | hadoop104 | |
HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode |
YARN | NodeManager | ResourceManager NodeManager | NodeManager |
- 配置文件修改
①默认配置文件
要获取的默认文件 | 文件存放在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路径下
<1>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://hadoop102:8020</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置HDFS网页登录使用的静态用户为atguigu -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>atguigu</value>
</property>
</configuration>
<2>hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- nn web端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- 2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
</configuration>
<3>yarn-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定MR走shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
<4>mapred-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
③配置workers
修改/opt/module/hadoop-3.1.3/etc/hadoop/workers文件内容为
hadoop102
hadoop103
hadoop104
- 分发配置文件
[atguigu@hadoop102 hadoop]$ my_xsync /opt/module/hadoop-3.1.3/etc
2.2.2、群起集群
- 配置历史服务器
配置历史服务器用于查看程序的历史运行情况
在mapred-site.xml中添加如下配置并分发至集群
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
- 配置日志的聚集
日志聚集可以方便查看程序的运行详情,方便开发调试
在yarn-site.xml中添加如下配置并分发至集群
注:单独配置日志聚集功能后需要重新启动NodeManager 、ResourceManager和HistoryServer
<!-- 开启日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
- 集群启动、停止的方式
①各个模块分开启动、停止
<1>整体启动、停止HDFS
start-dfs.sh/stop-dfs.sh
<2>整体启动、停止YARN
start-yarn.sh/stop-yarn.sh
<3>单独启动、停止历史服务器
[atguigu@hadoop102 hadoop-3.1.3]$ mapred --daemon start/stop historyserver
②各组件逐一启动、停止
<1>分别启动、停止HDFS组件
hdfs --daemon start/stop namenode/datanode/secondarynamenode
<2>分别启动、停止YARN组件
yarn --daemon start/stop resourcemanager/nodemanager
<3>单独启动、停止历史服务器
[atguigu@hadoop102 hadoop-3.1.3]$ mapred --daemon start/stop historyserver
③集群启停脚本
在/home/atguigu/bin目录下新建Hadoop集群启停脚本文件:my_hadoop,编写后修改权限
#!/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
④集群启动与初始化
<1>启动
[atguigu@hadoop102 hadoop-3.1.3]$ my_hadoop start
<2>初始化NameNode
[atguigu@hadoop102 hadoop-3.1.3]$ hdfs namenode -format
注:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化
⑤Web端查看
<1>Web端查看HDFS的NameNode
http://hadoop102:9870
<2>Web端查看YARN的ResourceManager
http://hadoop103:8088
<3>Web端查看查看JobHistory