Skip to content

Instantly share code, notes, and snippets.

@kangvcar
Last active May 6, 2025 10:45
Show Gist options
  • Select an option

  • Save kangvcar/3df6c79ac9695dcb702a3797e2fd383c to your computer and use it in GitHub Desktop.

Select an option

Save kangvcar/3df6c79ac9695dcb702a3797e2fd383c to your computer and use it in GitHub Desktop.

在阿里云服务器上部署Hadoop分布式集群

一、集群规划

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

三、配置SSH免密登录

在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"

四、安装Java环境

在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

五、安装Hadoop

在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

六、配置Hadoop集群

配置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/

七、启动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

八、验证集群Web界面:

# HDFS管理界面
http://<master公网IP>:9870/

# YARN资源管理界面
http://<master公网IP>:8088/

# JobHistory界面
http://<master公网IP>:19888/

九、关闭Hadoop集群

停止所有服务:

# 停止历史服务器
mapred --daemon stop historyserver

# 停止YARN
stop-yarn.sh

# 停止HDFS
stop-dfs.sh

# 验证所有进程已停止
jps
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment