HDFS集群规划:
| 内网IP地址 | 主机名 | 部署服务 |
|---|---|---|
| 172.31.152.253 | master | NameNode,DataNode,JobHistoryServer |
| 172.31.152.251 | slave1 | DataNode |
| 172.31.152.252 | slave2 | DataNode,SecondaryNameNode |
YARN集群规划:
| 内网IP地址 | 主机名 | 部署服务 |
|---|---|---|
| 172.31.152.253 | master | ResourceManager,NodeManager |
| 172.31.152.251 | slave1 | NodeManager |
| 172.31.152.252 | slave2 | NodeManager |
在master节点上配置主机名:
hostnamectl set-hostname master
在slave1节点上配置主机名:
hostnamectl set-hostname slave1
在slave2节点上配置主机名:
hostnamectl set-hostname slave2
在所有节点上配置hosts文件:
vim /etc/hosts
# 添加以下内容
172.31.152.253 master
172.31.152.251 slave1
172.31.152.252 slave2
在master节点上生成SSH密钥:
ssh-keygen
将公钥分发到所有节点:
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2
验证SSH免密登录:
ssh master "echo SSH to master succeeded"
ssh slave1 "echo SSH to slave1 succeeded"
ssh slave2 "echo SSH to slave2 succeeded"
在master节点上安装JDK:
mkdir -p /opt/software
cd /opt/software
wget https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
tar -zxvf openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz -C /opt/
mv /opt/java-se-8u41-ri/ /opt/java8
配置Java环境变量:
vim /etc/profile
# 添加以下内容
export JAVA_HOME=/opt/java8
export PATH=$PATH:$JAVA_HOME/bin
# 使环境变量生效
source /etc/profile
验证Java安装:
java -version
将Java环境复制到slave节点:
scp -r /opt/java8 slave1:/opt/
scp -r /opt/java8 slave2:/opt/
scp -r /etc/profile slave1:/etc/
scp -r /etc/profile slave2:/etc/
在slave节点上使环境变量生效:
# 分别在slave1和slave2上执行
source /etc/profile
java -version
在master节点上下载并解压Hadoop:
cd /opt/software
curl -# -O https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
tar -zxvf hadoop-3.3.6.tar.gz -C /opt/
mv /opt/hadoop-3.3.6 /opt/hadoop
配置Hadoop环境变量:
vim /etc/profile
# 添加以下内容
export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# 使环境变量生效
source /etc/profile
验证Hadoop安装:
hadoop version
将Hadoop复制到slave节点:
scp -r /opt/hadoop slave1:/opt/
scp -r /opt/hadoop slave2:/opt/
scp -r /etc/profile slave1:/etc/
scp -r /etc/profile slave2:/etc/
在slave节点上使环境变量生效:
# 分别在slave1和slave2上执行
source /etc/profile
hadoop version
配置core-site.xml:
vim /opt/hadoop/etc/hadoop/core-site.xml
# 添加以下内容
<configuration>
<!-- 指定HDFS文件系统主节点地址和端口 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>
<!-- 指定Hadoop临时文件存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/hdfs/tmp</value>
</property>
<!-- 允许root用户通过代理访问任何主机 -->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<!-- 允许root用户通过代理访问任何用户组 -->
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
</configuration>
配置hdfs-site.xml:
vim /opt/hadoop/etc/hadoop/hdfs-site.xml
# 添加以下内容
<configuration>
<!-- 设置文件块副本数量为3,表示每个数据块在集群中保存3份 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定NameNode元数据存储目录 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/hadoop/hdfs/name</value>
<final>true</final>
</property>
<!-- 指定DataNode数据存储目录 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/hadoop/hdfs/data</value>
<final>true</final>
</property>
<!-- 设置NameNode Web界面的访问地址和端口 -->
<property>
<name>dfs.namenode.http-address</name>
<value>master:9870</value>
</property>
<!-- 设置SecondaryNameNode Web界面的访问地址和端口 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave2:9868</value>
</property>
<!-- 关闭HDFS权限检查,简化开发环境使用 -->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
配置yarn-site.xml:
vim /opt/hadoop/etc/hadoop/yarn-site.xml
# 添加以下内容
<configuration>
<!-- 指定ResourceManager所在节点的主机名 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<!-- 指定NodeManager上运行的附属服务,这里配置提供MapReduce的shuffle服务 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 设置YARN历史日志服务器的地址,用于访问应用程序的日志 -->
<property>
<name>yarn.log.server.url</name>
<value>http://master:19888/jobhistory/logs</value>
</property>
<!-- 开启日志聚集功能,将分散在各个节点的日志统一收集到HDFS -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
</configuration>
配置mapred-site.xml:
vim /opt/hadoop/etc/hadoop/mapred-site.xml
# 添加以下内容
<configuration>
<!-- 指定MapReduce程序运行在YARN上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 设置MapReduce JobHistory Server的RPC地址和端口 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<!-- 设置MapReduce JobHistory Server的Web界面地址和端口 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
<!-- 设置MapReduce ApplicationMaster的环境变量 -->
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<!-- 设置Map任务的环境变量 -->
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<!-- 设置Reduce任务的环境变量 -->
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
</configuration>
配置hadoop-env.sh:
vim /opt/hadoop/etc/hadoop/hadoop-env.sh
# 添加以下内容
export JAVA_HOME=/opt/java8
export HADOOP_HOME=/opt/hadoop
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
配置workers文件:
vim /opt/hadoop/etc/hadoop/workers
# 添加以下内容(删除localhost)
master
slave1
slave2
将配置文件同步到所有slave节点:
scp -r /opt/hadoop/etc/hadoop/* slave1:/opt/hadoop/etc/hadoop/
scp -r /opt/hadoop/etc/hadoop/* slave2:/opt/hadoop/etc/hadoop/
在master节点上格式化NameNode:
hdfs namenode -format
启动HDFS:
start-dfs.sh
启动YARN:
start-yarn.sh
启动历史服务器:
mapred --daemon start historyserver
验证服务启动状态:
# 在master节点上
jps
# 应显示:NameNode、DataNode、ResourceManager、NodeManager、JobHistoryServer
# 在slave1节点上
jps
# 应显示:DataNode、NodeManager
# 在slave2节点上
jps
# 应显示:DataNode、SecondaryNameNode、NodeManager
# HDFS管理界面
http://<master公网IP>:9870/
# YARN资源管理界面
http://<master公网IP>:8088/
# JobHistory界面
http://<master公网IP>:19888/
停止所有服务:
# 停止历史服务器
mapred --daemon stop historyserver
# 停止YARN
stop-yarn.sh
# 停止HDFS
stop-dfs.sh
# 验证所有进程已停止
jps