Hadoop 3.2.4 云服务器ECS部署:阿里云3节点集群配置与安全组规则详解
1. 云原生环境下的Hadoop集群规划
在阿里云ECS上部署Hadoop集群,首先需要明确资源规划。与本地虚拟机部署不同,云环境需要考虑实例规格、网络拓扑和存储类型的选型。以下是针对中型数据处理场景的推荐配置:
| 节点角色 | 实例规格 | 系统盘 | 数据盘 | 数量 | 备注 |
|---|---|---|---|---|---|
| NameNode | ecs.g6e.xlarge | 100GB | 500GB ESSD | 1 | 高可用可选Secondary NN |
| ResourceManager | ecs.g6e.xlarge | 100GB | - | 1 | 与NameNode分设提高可用性 |
| DataNode | ecs.d1ne.2xlarge | 100GB | 4TB×2 HDD | 3 | 本地SSD提升I/O性能 |
关键配置建议:
- 网络规划:所有节点应部署在同一可用区,使用专有网络VPC确保低延迟通信
- 存储策略:
- NameNode使用ESSD云盘保证元数据访问速度
- DataNode挂载本地HDD盘实现高吞吐数据存储
- 系统优化:关闭swap分区,设置vm.swappiness=1,避免GC时触发swap
提示:生产环境建议DataNode节点不少于3个,HDFS副本数设置为3以保证数据可靠性
2. ECS实例初始化配置
2.1 系统基础环境准备
所有节点需执行以下初始化操作:
# 更新系统并安装基础工具 sudo yum update -y sudo yum install -y epel-release sudo yum install -y jq telnet ncdu tree lsof # 优化内核参数 echo "vm.swappiness = 1" | sudo tee -a /etc/sysctl.conf echo "net.ipv4.tcp_tw_reuse = 1" | sudo tee -a /etc/sysctl.conf sudo sysctl -p # 创建专用用户 sudo groupadd hadoop sudo useradd -g hadoop hadoop echo "hadoop ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/hadoop2.2 JDK环境部署
Hadoop 3.2.4需要JDK8+环境,推荐使用OpenJDK:
# 安装OpenJDK sudo yum install -y java-1.8.0-openjdk-devel # 配置环境变量 echo 'export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk' | sudo tee -a /etc/profile echo 'export PATH=$JAVA_HOME/bin:$PATH' | sudo tee -a /etc/profile source /etc/profile验证安装:
java -version # 应输出:openjdk version "1.8.0_362"3. 安全组与网络配置
3.1 安全组入方向规则
阿里云安全组需开放以下端口:
| 端口范围 | 协议 | 授权对象 | 用途说明 |
|---|---|---|---|
| 22 | TCP | 管理IP段 | SSH管理 |
| 9870 | TCP | 0.0.0.0/0 | NameNode Web UI |
| 8088 | TCP | 0.0.0.0/0 | ResourceManager Web UI |
| 9864-9869 | TCP | 集群内网段 | DataNode数据传输 |
| 8030-8033 | TCP | 集群内网段 | YARN服务通信 |
配置示例代码:
# 创建安全组(如果不存在) ALIYUN_SG_ID=$(aliyun ecs CreateSecurityGroup \ --RegionId cn-hangzhou \ --SecurityGroupName hadoop-cluster-sg \ --VpcId vpc-xxxxxx \ --Description "Hadoop Cluster Security Group" | jq -r '.SecurityGroupId') # 添加入方向规则 for port in 22 9870 8088 {9864..9869} {8030..8033}; do aliyun ecs AuthorizeSecurityGroup \ --RegionId cn-hangzhou \ --SecurityGroupId $ALIYUN_SG_ID \ --IpProtocol tcp \ --PortRange $port/$port \ --SourceCidrIp 0.0.0.0/0 done3.2 跨节点SSH免密登录
在NameNode节点执行:
# 生成密钥对 sudo -u hadoop ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa # 分发公钥到所有节点 for node in namenode resourcemanager datanode{1..3}; do sudo -u hadoop ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@$node done # 测试免密登录 sudo -u hadoop ssh datanode1 "hostname"4. Hadoop集群部署实战
4.1 软件包分发与安装
在NameNode节点操作:
# 下载Hadoop 3.2.4 wget https://archive.apache.org/dist/hadoop/common/hadoop-3.2.4/hadoop-3.2.4.tar.gz tar -zxvf hadoop-3.2.4.tar.gz -C /opt/ chown -R hadoop:hadoop /opt/hadoop-3.2.4 ln -s /opt/hadoop-3.2.4 /opt/hadoop # 同步到其他节点 for node in resourcemanager datanode{1..3}; do rsync -avz /opt/hadoop-3.2.4/ $node:/opt/hadoop-3.2.4/ ssh $node "ln -s /opt/hadoop-3.2.4 /opt/hadoop" done4.2 关键配置文件优化
core-site.xml:
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://namenode:8020</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/data/hadoop/tmp</value> </property> <property> <name>hadoop.proxyuser.hadoop.groups</name> <value>*</value> </property> </configuration>hdfs-site.xml:
<configuration> <property> <name>dfs.namenode.name.dir</name> <value>/data/hadoop/namenode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/data/hadoop/datanode</value> </property> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.client.use.datanode.hostname</name> <value>true</value> </property> </configuration>yarn-site.xml:
<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>resourcemanager</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>12288</value> </property> </configuration>4.3 集群初始化与启动
# 格式化HDFS(仅在首次执行) sudo -u hadoop hdfs namenode -format # 启动HDFS sudo -u hadoop start-dfs.sh # 启动YARN sudo -u hadoop start-yarn.sh # 验证服务 jps # NameNode应显示:NameNode、SecondaryNameNode # DataNode应显示:DataNode # ResourceManager应显示:ResourceManager # NodeManager应显示:NodeManager5. 运维监控与调优
5.1 基础监控指标
| 组件 | 关键指标 | 监控方法 |
|---|---|---|
| NameNode | 堆内存使用、文件系统容量 | JMX端口:9870 |
| DataNode | 磁盘使用率、块报告延迟 | dfs.datanode.https.port=9864 |
| ResourceManager | 应用队列状态、容器分配 | Web UI:8088 |
| NodeManager | 容器资源使用、健康状态 | yarn.nodemanager.webapp.address:8042 |
5.2 性能调优参数
hadoop-env.sh内存配置:
export HDFS_NAMENODE_OPTS="-Xmx8g -Xms8g" export HDFS_DATANODE_OPTS="-Xmx4g -Xms4g" export YARN_RESOURCEMANAGER_OPTS="-Xmx4g -Xms4g" export YARN_NODEMANAGER_OPTS="-Xmx4g -Xms4g"mapred-site.xml优化:
<property> <name>mapreduce.map.memory.mb</name> <value>2048</value> </property> <property> <name>mapreduce.reduce.memory.mb</name> <value>4096</value> </property>