Hadoop3x_0">Hadoop3.x从入门到放弃,第二章:集群环境搭建
一、安装JDK并配置环境变量
/etc/profile中部分代码如下:
for循环profile.d中的sh文件并使之生效,所以我们只需要在profile.d文件夹下配置我们的my_env.sh文件就好了
vim /etc/profile.d/my_env.sh
##java conf
export JAVA_HOME=/opt/module/jdk1.8.0_271
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile 使配置文件生效
Hadoop_23">二、安装Hadoop并配置环境变量
vim /etc/profile.d/my_env.sh
##hadoop conf
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目录功能
bin : 里面有hadoop的各种命令工具,如:hdfs存储 mapred计算 yarn调度
etc : 里面有大量的配置信息,如hdfs-site.xml mapred-site.xml yarn-site.xml core-site.xml works
sbin: 里面也有Hadoop的各种命令工具,如:start-dfs.sh start-yarn.sh hadoop-daemon.sh mr-jobhistory-daemon.sh
三、集群配置
【注意:】
NameNode \ 2NN \ ResourceManager 都比较耗内存,不能安装在同一台机器上。
##配置文件分两种:
1、默认配置文件:
存放在各自jar包中
hadoop-common-3.1.3.jar/core-default.xml
hadoop-hdfs-3.1.3.jar/hdfs-default.xml
hadoop-yarn-common-3.1.3.jar/yarn-default.xml
hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml
2、自定义配置文件
%HADOOP_HOME%/etc/hadoop/下
core-default.xml
hdfs-default.xml
yarn-default.xml
mapred-default.xml
1、核心配置文件core-site.xml
<!-- 指定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>root</value>
</property>
hdfssitexml_91">2、HDFS配置hdfs-site.xml
<!-- 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>
yarnsitexml_106">3、YARN配置yarn-site.xml
<!-- 指定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>
<!-- 环境变量的继承 HADOOP_MAPRED_HOME 是 3.1.3的一个小BUG 后续版本不需要配置-->
<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>
4、MapReduce配置mapred-site.xml
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
四、群起集群
1、配置workers
位置:%HADOOP_HOME%/etc/hadoop/workers
新增三台服务器的主机名称:
hadoop102
hadoop103
hadoop104
不允许有任何空格
2、启动集群
> 如果集群是第一次启动,需要在hadoop102节点格式化NameNode
格式化NameNode会产生新的集群ID,导致NameNode和D阿塔Node的集群id不一致,集群找不到以往的数据。
如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止NameNode和DataNode进程。
并且要删除所有机器的data和logs目录,然后再进行格式化
hdfs namenode -format
>启动HDFS (在一台上启动即可)
sbin/start-dfs.sh
启动后 jps
>在配置了ResourceManeger的节点启动yarn
sbin/start-dfs.sh
启动后 jps
>web端查看HDFS的NameNode
http://hadoop102:9870
可以查看hdfs上存储的数据信息
>web端查看yarn的resourceManeger
http://hadoop103:8088
可以查看yarn上运行的job信息
3、常见报错
hdfs启动报错
将start-dfs.sh,stop-dfs.sh(在hadoop安装目录的sbin里)两个文件顶部添加以下参数
#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
将start-yarn.sh,stop-yarn.sh(在hadoop安装目录的sbin里)两个文件顶部添加以下参数
#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
【注意:添加后,使用xsync 分发到每台机器上】
【之后就可以使用root账号登陆hdfs和yarn了】
如果服务崩溃了起不起来了怎么处理:
1、先停掉所有服务
./stop-yarn.sh ./stop-dfs.sh (实在不行就kill)
2、删掉 data 和 logs
rm -rf ./data ./logs
3、格式化 namenode
hdfs namenode -format
4、启动集群
sbin/start-dfs.sh 对应的服务器启动 sbin/start-yarn.sh
4、测试HDFS和YARN
##创建目录
hadoop fs -mkdir /wcinput
##上传文件
hadoop fs -put ./myfile/words.txt /wcinput
##测试yarn
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wcinput /wcoutput
5、配置历史服务器
为了查看程序的历史运行情况,需要配置下历史服务器。
(如查看http://hadoop103:8088 页面上对应任务的 history)
配置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>
【然后sync 同步至所有服务器】
【重新启动服务】
sbin/start-dfs.sh 对应服务器上 启动 sbin/start-yarn.sh
【启动历史服务器】
mapred --daemon start historyserver
(mapred这个命令 在%HADOOP_HOME%/bin目录下)
【查看进程】
jps
【查看历史服务】
http://hadoop102:19888
可 执行测试 任务
hadoop jar ../share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wcinput /wcoutput2
6、配置日志聚集功能
什么叫日志聚集:
应用运行完成以后,将程序运行日志信息上传到hdfs系统上
日志聚集好处:
方便查看程序运行详情,方便开发调试
注意:
开启日志聚集功能,需要重启NodeManager\ResourceManeger\HistoryServer
配置yarn-site.xml
<!--开启日志聚集功能-->
<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>
【分发配置】 把这个配置 分发到所有服务器上
【重启服务】
sbin/stop-yarn.sh
mapred --daemon top historyserver
sbin/stop-dfs.sh
7、集群常用脚本
#########1、各模块分开启动停止:
>整体启动/停止HDFS
start-dfs.sh / stop-dfs.sh
>整体启动/停止YARN
start-yarn.sh / stop-yarn.sh
>启动历史服务器
mapred --daemon start historyserver
##########2、各服务组件的逐一启动停止:
>分别启动/停止HDFS组件
hdfs -daemon start/stop 【namenode / datanode / secondarynamenode】
>启动/停止YARN
yarn -daemon start/stop 【resourcemanager / nodemanager】
【脚本如下】:
#!/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 "======================关闭HDFS==============================="
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
#########3、查看所有服务器 进程脚本
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo "====================$host====================="
ssh $host jps
done
8、常用的端口号
端口名称 | Hadoop2.x | Hadoop3.x |
---|---|---|
NameNode内部通信端口 | 8020/9000 | 8020/9000/9820 |
NameNode HTTP UI | 50070 | 9870 |
YARN查看执行任务端口 | 8088 | 8088 |
历史服务器通信端口 | 19888 | 19888 |
9、集群时间同步
#########查看所有节点ntpd服务转改和开机自启动状态############
systemctl status ntpd
systemctl start ntpd
systemctl is-enabled ntpd
########修改hadoop102的ntp.conf配置文件
vim /etc/ntp.conf
内容如下:
> 授权192.168.73.0~192.168.73.255网段上的所有机器可以从这台机器上查询和同步时间【注释 放开】
restrict 192.168.73.0 mask 255.255.255.0 nomodify notrap
> 集群在局域网中,不使用其他互联网上的时间 【注释掉】
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
> 当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为急群众的其他节点提供时间同步
server 127.127.1.0
fudge 127.127.1.0 stratum 10
> 修改hadoop102的/etc/sysconfig/ntpd文件
vim /etc/sysconfig/ntpd
增加如下内容(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
>重启ntpd服务
systemctl start ntpd
> 设置ntpd服务开机启动
systemctl enable ntpd
########其他机器操作#######
>关闭所有节点的ntp服务和自启动
systemctl stop ntpd
systemctl disable ntpd
> 其他机器配置1分钟与时间服务器同步一次
sudo crontab -e
*/1 * * * * /usr/sbin/ntpdate hadoop102
> 修改任意机器时间
sudo date -s "2024-04-07 11:11:11"
> 1分钟后查看机器是否与时间服务器同步
sudo date