基于阿里云服务器的Hadoop完全分布式集群安装流程
一、服务器准备
-
进入阿里云官网:https://www.aliyun.com/
-
选择【产品】下的【云服务器ECS】->【立即购买】

-
按需选择配置以,其中价格【包年包月】>【按量付费】>【抢占式实例】
-
【包年包月】一次性付费
-
【按量付费】用多少付多少
-
【抢占式实例】一次用完,超过1小时后面再用可能实例被释放了
-
-
【地域】选一个离所在地近的,或者便宜的,这里我选择 广州

-
实例和镜像

-
扩展程序不选择(如果懒得自己装Java,也可以这里直接选上)
-
存储:100GB

-
网络和安全

-
管理设置:【自定义密码】(后面远程链接虚拟机的密码)

-
确认下单即可

-
进入【产品控制台】可以看到刚刚下单的机器

二、统一基础环境配置(所有节点执行)
0.集群规划
| 节点名称 | 角色分配 | 内网IP(示例) |
| namenode | NameNode、DataNode、ResourceManager、NodeManager、HistoryServer | 172.16.0.10 |
| datanode1 | DataNode、SecondaryNameNode、NodeManager | 172.16.0.11 |
| datanode2 | DataNode、NodeManager | 172.16.0.12 |
1. 连接服务器(这里我用的是xshell链接)

-
来到【用户身份验证】:用户名:root、密码:刚刚购买界面设定的密码

2. 创建标准目录结构
# 创建软件压缩包存放目录
sudo mkdir -p /opt/software
# 创建软件安装目录
sudo mkdir -p /opt/module
# 修改目录权限为当前用户
sudo chown -R $USER:$USER /opt/software
sudo chown -R $USER:$USER /opt/module
3. 关闭防火墙
# 停止防火墙
sudo ufw stop
# 禁用防火墙开机自启
sudo ufw disable
# 验证防火墙状态(显示inactive)
sudo ufw status
4. 关闭SELinux
# 临时关闭
sudo setenforce 0
# 永久关闭
sudo vim /etc/selinux/config
将SELINUX=enforcing修改为SELINUX=disabled,保存退出后重启:
sudo reboot
5. 配置主机名
namenode节点:
sudo vim /etc/hostname
删除原有内容,输入:namenode,保存退出后重启:
sudo reboot
datanode1节点:
sudo vim /etc/hostname
删除原有内容,输入:datanode1,保存退出后重启:
sudo reboot
datanode2节点:
sudo vim /etc/hostname
删除原有内容,输入:datanode2,保存退出后重启:
sudo reboot
6. 配置主机映射
所有节点执行:
sudo vim /etc/hosts
添加以下内容(替换为实际内网IP,不是公网IP):
172.16.0.10 namenode
172.16.0.11 datanode1
172.16.0.12 datanode2
验证配置:
ping datanode1 -c 3 # 应能正常ping通
ping datanode2 -c 3
7. 配置SSH免密登录
namenode节点操作:
# 生成密钥对(连续按三次回车)
ssh-keygen -t rsa
# 分发公钥到所有节点
ssh-copy-id namenode
ssh-copy-id datanode1
ssh-copy-id datanode2
(执行过程中需要输入对应节点的登录密码)
datanode1节点操作:
ssh-keygen -t rsa
ssh-copy-id namenode
ssh-copy-id datanode1
ssh-copy-id datanode2
datanode2节点操作:
ssh-keygen -t rsa
ssh-copy-id namenode
ssh-copy-id datanode1
ssh-copy-id datanode2
验证免密登录(以namenode节点为例):
ssh datanode1 # 无需密码即可登录
exit # 退出登录
ssh datanode2
exit
三、JDK安装与配置
1. namenode节点操作
# 上传JDK压缩包到/opt/software(可使用SFTP工具如:Xftp)
# 解压JDK到/opt/module目录
cd /opt/software
tar -zxvf jdk-8u311-linux-x64.tar.gz -C /opt/module/
# 重命名JDK目录
cd /opt/module
mv jdk1.8.0_311 jdk
2. 同步JDK到从节点
在namenode节点执行:
# 同步到datanode1
scp -r /opt/module/jdk datanode1:/opt/module/
scp /opt/software/jdk-8u311-linux-x64.tar.gz datanode1:/opt/software/
# 同步到datanode2
scp -r /opt/module/jdk datanode2:/opt/module/
scp /opt/software/jdk-8u311-linux-x64.tar.gz datanode2:/opt/software/
3. 配置JDK环境变量(所有节点)
sudo vim /etc/profile
在文件末尾添加:
# JDK环境变量
export JAVA_HOME=/opt/module/jdk
export PATH=$JAVA_HOME/bin:$PATH
# Hadoop环境变量
export HADOOP_HOME=/opt/module/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
使配置生效:
source /etc/profile
验证JDK安装:
java -version # 应显示java version "1.8.0_311"
四、Hadoop安装与配置
-
实现下载好Hadoop安装包:https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/
1. namenode节点操作
# 上传hadoop-2.10.2.tar.gz到/opt/software(可使用SFTP工具)
# 解压Hadoop到/opt/module目录
cd /opt/software
tar -zxvf hadoop-2.10.2.tar.gz -C /opt/module/
# 重命名Hadoop目录
cd /opt/module
mv hadoop-2.10.2 hadoop
2. 配置Hadoop(仅namenode节点)
进入Hadoop配置文件目录:
cd /opt/module/hadoop/etc/hadoop
(1)修改hadoop-env.sh
vim hadoop-env.sh
找到并修改:
export JAVA_HOME=/opt/module/jdk
(2)修改mapred-env.sh
vim mapred-env.sh
添加:
export JAVA_HOME=/opt/module/jdk
(3)修改yarn-env.sh
vim yarn-env.sh
添加:
export JAVA_HOME=/opt/module/jdk
-
下列xml配置文件中的端口以及后续访问UI端口,注意hadoop2.x和hadoop3.x差别
(4)修改core-site.xml
vim core-site.xml
在<configuration>标签内添加:
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://namenode:9000</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop/data/tmp</value>
</property>
(5)修改hdfs-site.xml
vim hdfs-site.xml
在<configuration>标签内添加:
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- nn web端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>namenode:50070</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>datanode1:50090</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/module/hadoop/data/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/module/hadoop/data/datanode</value>
</property>
(6)修改mapred-site.xml
# 复制模板文件
cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
在<configuration>标签内添加:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>namenode:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>namenode:19888</value>
</property>
(7)修改yarn-site.xml
vim yarn-site.xml
在<configuration>标签内添加:
<!-- 指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>namenode</value>
</property>
<!-- 指定MR走shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</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>
-
执行用户配置start-dfs.sh、stop-dfs.sh、start-yarn.sh、stop-yarn.sh
vim start-dfs.sh
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
vim stop-dfs.sh
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
vim start-yarn.sh
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
vim stop-yarn.sh
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
(8)修改slaves文件
vim slaves
删除原有内容,添加:
namenode
datanode1
datanode2
(9)创建数据目录
mkdir -p /opt/module/hadoop/data/tmp
mkdir -p /opt/module/hadoop/data/namenode
mkdir -p /opt/module/hadoop/data/datanode
3. 同步Hadoop到从节点
在namenode节点执行:
# 同步Hadoop安装目录到datanode1
scp -r /opt/module/hadoop datanode1:/opt/module/
scp /opt/software/hadoop-2.10.2.tar.gz datanode1:/opt/software/
# 同步Hadoop安装目录到datanode2
scp -r /opt/module/hadoop datanode2:/opt/module/
scp /opt/software/hadoop-2.10.2.tar.gz datanode2:/opt/software/
4. 从节点补充操作
datanode1和datanode2节点分别执行:
# 创建数据目录
mkdir -p /opt/module/hadoop/data/tmp
mkdir -p /opt/module/hadoop/data/datanode
# 确保环境变量生效
source /etc/profile
五、Hadoop集群初始化与启动
1. 格式化HDFS(仅namenode节点)
hdfs namenode -format
出现INFO common.Storage: Storage directory /opt/module/hadoop/data/namenode has been successfully formatted.提示即为成功。
2. 启动HDFS集群(namenode节点)
${HADOOP_HOME}/sbin/start-dfs.sh
3. 启动YARN集群(namenode节点)
${HADOOP_HOME}/sbin/start-yarn.sh
4. 启动历史服务器(namenode节点)
${HADOOP_HOME}/sbin/mr-jobhistory-daemon.sh start historyserver
5.若datanode未正常启动,可在每个节点单独执行以下命令
${HADOOP_HOME}/sbin/hadoop-daemon.sh start datanode
-
如果成功,后续注意排查secure机制以及start-dfs.sh后的执行日志
-
如果失败,需要另外查询初始化或者其他执行logs
六、集群状态验证
1. 进程验证
namenode节点执行jps:
应显示以下进程:
NameNode
DataNode
ResourceManager
NodeManager
JobHistoryServer
Jps
datanode1节点执行jps:
应显示以下进程:
DataNode
SecondaryNameNode
NodeManager
Jps
datanode2节点执行jps:
应显示以下进程:
DataNode
NodeManager
Jps
2. 网页验证
HDFS管理界面:
在本地浏览器访问:http://namenode公网IP:50070\
-
检查左侧导航栏"Datanodes",应显示3个节点
-
检查集群状态应为"Live Nodes: 3"
YARN管理界面:
在本地浏览器访问:http://namenode公网IP:8088\
-
检查左侧导航栏"Nodes",应显示3个节点
-
集群健康状态应为"healthy"
历史服务器界面:
在本地浏览器访问:http://namenode公网IP:19888\
-
可查看已完成的MapReduce作业历史
3. 功能验证(namenode节点)
# 在HDFS上创建测试目录
hdfs dfs -mkdir /test
# 上传本地文件到HDFS
hdfs dfs -put /etc/profile /test
# 查看HDFS文件
hdfs dfs -ls /test
# 从HDFS下载文件
hdfs dfs -get /test/profile /tmp/profile_download
# 检查下载文件
ls -l /tmp/profile_download
七、集群停止命令(如需)
在namenode节点执行:
# 停止历史服务器
mr-jobhistory-daemon.sh stop historyserver
# 停止YARN集群
stop-yarn.sh
# 停止HDFS集群
stop-dfs.sh
至此,基于阿里云ECS的Hadoop 2.10.2完全分布式集群安装完成并验证通过。
更多推荐



所有评论(0)