Hadoop完全分布式部署
Hadoop下载地址:https://archive.apache.org/dist/hadoop/common/
Hadoop各组件常用端口说明
服务规划
注:NameNode和SecondaryNameNode和ResourceManager尽量不要安装在同一台服务器,很耗内存
该部署以Red Hat 7为例
安装前提
需先配置好1.8的JAVA环境,可参考JDK的安装配置(Windows、Linux),Hadoop和Java版本对应关系可参考https://blog.csdn.net/m0_67393619/article/details/123933614
关闭防火墙和SELinux(所有设备)
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
vi /etc/selinux/config
SELINUX=enforcing改为SELINUX=disabled
配置IP地址和主机名之间的映射(所有设备)
vi /etc/hosts
192.168.111.129 node1 192.168.111.130 node2 192.168.111.131 node3
需重启设备生效
创建用户(所有设备)
useradd hadoop
passwd hadoop
SSH免密登录配置(所有设备互相进行配置)
su - hadoop
ssh-keygen -t rsa
ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3
Hadoop完全分布式部署
Hadoop完全分布式的数据是存储在hadoop上的,并且是多台服务器进行的工作
先在192.168.111.129上的操作
1.解压安装包
tar -zxvf hadoop-3.0.3.tar.gz -C /usr/local/
2.修改环境变量
vim /etc/profile
export HADOOP_HOME=/usr/local/hadoop-3.0.3 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile
3.修改hadoop配置文件
cd /usr/local/hadoop-3.0.3/etc/hadoop
vim hadoop-env.sh
export JAVA_HOME=/usr/local/java/jdk1.8.0_60
核心配置文件
vim core-site.xml
<configuration> <!-- 指定 NameNode 的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://node1:8020</value> </property> <!-- 指定 hadoop 数据的存储目录,凡是上传到Hadoop上的文件都会存储至该路径 --> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop-3.0.3/data</value> </property> <!-- 配置 HDFS 网页登录使用的静态用户为 hadoop --> <property> <name>hadoop.http.staticuser.user</name> <value>hadoop</value> </property> </configuration>
HDFS配置文件
vim hdfs-site.xml
<configuration> <!-- NameNode web 端访问地址--> <property> <name>dfs.namenode.http-address</name> <value>node1:9870</value> </property> <!-- SecondaryNameNode web 端访问地址--> <property> <name>dfs.namenode.secondary.http-address</name> <value>node3:9868</value> </property> <!-- 数据文件的副本数量, 默认就是3--> <property> <name>dfs.replication</name> <value>3</value> </property> </configuration>
YARN配置文件
vim yarn-site.xml
<configuration> <!-- 指定 MapReduce 走 shuffle --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定 ResourceManager 的地址--> <property> <name>yarn.resourcemanager.hostname</name> <value>node2</value> </property> <!-- 环境变量的继承,好像是个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> </configuration>
MapReduce配置文件
vim mapred-site.xml
<configuration> <!-- 指定 MapReduce 程序运行在 Yarn 上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
workers节点文件(hadoop3.0以下版本为slave文件)
vim workers
node1 node2 node3
4.创建相关目录
mkdir -p /usr/local/hadoop-3.0.3/data
5.给Hadoop目录授权
chown -R hadoop:hadoop /usr/local/hadoop-3.0.3
6.复制Hadoop目录至其他节点
scp -r /usr/local/hadoop-3.0.3 node2:/usr/local
scp -r /usr/local/hadoop-3.0.3 node3:/usr/local
复制完成后记得去其他设备上给hadoop目录授权(chown -R hadoop:hadoop /usr/local/hadoop-3.0.3)
7.初始化HDFS
#第一次启动HDFS需要先进行格式化,需要在NameNode节点上执行
su - hadoop
cd /usr/local/hadoop-3.0.3/bin
./hdfs namenode -format
8.启动HDFS
#hadoop用户启动
cd /usr/local/hadoop-3.0.3/sbin
./start-dfs.sh
9.启动YARN
#来到配置了 ResourceManager 的节点启动,这里我的是node2
#hadoop用户启动
cd /usr/local/hadoop-3.0.3/sbin
./start-yarn.sh
10.查看启动情况
分别登陆三个节点使用jps命令查看
####192.168.111.129(node1) jps 39264 NodeManager 38836 NameNode 39367 Jps 38954 DataNode ####192.168.111.130(node2) jps 3937 NodeManager 4296 Jps 3417 DataNode 3820 ResourceManager ####192.168.111.131(node3) jps 5412 Jps 5206 SecondaryNameNode 5096 DataNode 5309 NodeManager
11.访问页面是否正常
访问HDFS的NameNode WEB:http://192.168.111.129:9870/
访问YARN的ResourceManager WEB:http://192.168.111.130:8088/
#当我们有MapReduce任务执行时,在该页面上即可查看到
12.Hadoop集群奔溃处理方式
#若练习的时候出现奔溃,可以使用以下方式,生产环境的话就算了
删除每个hadoop下的data和logs文件,然后重新格式化HDFS并启动即可
13.配置历史服务器(在此我们配置在node1上)
作用:可以查看到程序的历史运行情况
cd /usr/local/hadoop-3.0.3/etc/hadoop
MapReduce配置文件
vim mapred-site.xml
<!-- 历史服务器端地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>node1:10020</value> </property> <!-- 历史服务器 web 端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>node1:19888</value> </property>
启动历史服务器
cd /usr/local/hadoop-3.0.3/bin
./mapred --daemon start historyserver
jps 39264 NodeManager 38836 NameNode 40501 Jps 38954 DataNode 40444 JobHistoryServer
访问JobHistoryServer WEB: http://192.168.111.129:19888/
配置了历史服务器后,我们YARN的ResourceManager WEB页面里的历史任务才可以进行查看
#需重启YARN(在此我们是在node2上操作)
cd /usr/local/hadoop-3.0.3/sbin
./stop-yarn.sh
./start-yarn.sh
#不过对于我目前的这个环节单单重启YARN还不够,因为我hadoop配置的都是域名,所以需要在本机进行域名配置,修改C:\Windows\System32\drivers\etc下的hosts文件
然后通过ResourceManager WEB中的任务history选项即可进行跳转
14.配置日志聚集功能(所有节点)
可以看到上方jobhistory有个logs选项,该选项是记录我们程序的运行日志,不过只有配置了日志聚集功能才可以查看,日志聚集功能会将所有服务器日志聚集到HDFS上
cd /usr/local/hadoop-3.0.3/etc/hadoop
vim yarn-site.xml
<!-- 开启日志聚集功能 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 设置日志聚集服务器地址 --> <property> <name>yarn.log.server.url</name> <value>http://node1:19888/jobhistory/logs</value> </property> <!-- 设置日志保留时间为 7 天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property>
注:开启日志聚集功能,需重新启动Yarn、HistoryServer
#重启HistoryServer(在此我们是在node1上操作)
cd /usr/local/hadoop-3.0.3/bin
./mapred --daemon stop historyserver
./mapred --daemon start historyserver
#重启YARN(在此我们是在node2上操作)
cd /usr/local/hadoop-3.0.3/sbin
./stop-yarn.sh
./start-yarn.sh
#然后新增的任务就可以通过ResourceManager WEB中的任务history选项进行跳转至History,再跳转至logs。不过这里必须是新增的,之前的任务还是不可以。logs跳转后的页面如下所示
15.Hadoop集群启动/停止方式总结
整体启动/停止 HDFS
start-dfs.sh/stop-dfs.sh
整体启动/停止 YARN
start-yarn.sh/stop-yarn.sh
逐一启动/停止 HDFS 组件
hdfs --daemon start/stop namenode/datanode/secondarynamenode
逐一启动/停止 YARN 组件
yarn --daemon start/stop resourcemanager/nodemanager
逐一启动/停止 historyserver 组件
mapred --daemon stop historyserver