YARN单机部署全攻略:从环境准备到生产调优
2025.09.17 10:41浏览量:2简介:本文详细介绍YARN单机部署的全流程,涵盖环境配置、安装步骤、配置优化及故障排查,助力开发者快速构建本地资源管理环境。
YARN单机部署全攻略:从环境准备到生产调优
一、为什么需要YARN单机部署?
YARN(Yet Another Resource Negotiator)作为Hadoop生态的核心组件,负责集群资源管理与任务调度。单机部署场景下,开发者可通过最小化环境模拟生产集群行为,实现以下价值:
- 本地化开发验证:在无集群环境下测试MapReduce/Spark作业逻辑
- 教学与实验:快速搭建学习环境,理解YARN架构原理
- 轻量级CI/CD:集成到持续集成流程中进行单元测试
- 资源隔离实验:验证不同资源分配策略的效果
相较于伪分布式部署,单机部署更强调资源管理的纯粹性,通过单节点模拟多节点调度行为,特别适合资源调度算法验证和性能基准测试。
二、环境准备与依赖安装
1. 基础环境要求
组件 | 版本要求 | 推荐配置 |
---|---|---|
OS | Linux/MacOS | Ubuntu 20.04 LTS |
Java | JDK 8/11 | OpenJDK 11.0.12 |
内存 | 最低4GB | 8GB+(含交换分区) |
磁盘 | 20GB可用空间 | SSD优先 |
2. 依赖安装步骤
# 安装OpenJDK(以Ubuntu为例)
sudo apt update
sudo apt install openjdk-11-jdk -y
# 验证安装
java -version
# 应输出:openjdk version "11.0.12"
# 配置JAVA_HOME
echo 'export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64' >> ~/.bashrc
source ~/.bashrc
三、YARN单机部署核心流程
1. 下载与解压
# 下载Hadoop 3.3.4(含YARN)
wget https://downloads.apache.org/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
tar -xzvf hadoop-3.3.4.tar.gz -C /opt/
cd /opt/hadoop-3.3.4
2. 核心配置文件修改
etc/hadoop/yarn-site.xml
<configuration>
<!-- 启用单机模式 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>false</value>
</property>
<!-- 配置NodeManager内存 -->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value> <!-- 根据实际内存调整 -->
</property>
<!-- 日志聚合配置 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
</configuration>
etc/hadoop/mapred-site.xml
<configuration>
<!-- 指定YARN为MapReduce运行框架 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 历史服务器配置 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>0.0.0.0:10020</value>
</property>
</configuration>
3. 环境变量配置
# 编辑hadoop-env.sh
vi etc/hadoop/hadoop-env.sh
# 添加以下内容(根据实际路径调整)
export HADOOP_HOME=/opt/hadoop-3.3.4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
4. 格式化与启动
# 首次运行前格式化(仅需执行一次)
bin/hdfs namenode -format
# 启动YARN服务
sbin/start-yarn.sh
# 验证服务状态
jps
# 应看到以下进程:
# NodeManager
# ResourceManager
# Jps
四、生产环境调优实践
1. 内存配置优化
参数 | 默认值 | 推荐值(4GB内存) | 说明 |
---|---|---|---|
yarn.nodemanager.resource.memory-mb | 8192 | 2048 | 单机建议不超过物理内存50% |
yarn.scheduler.maximum-allocation-mb | 8192 | 1536 | 单个容器最大内存 |
yarn.app.mapreduce.am.resource.mb | 1536 | 512 | ApplicationMaster内存 |
2. 线程池调优
<!-- 在yarn-site.xml中添加 -->
<property>
<name>yarn.nodemanager.linux-container-executor.cgroups.strict-resource-usage</name>
<value>true</value>
</property>
<property>
<name>yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage</name>
<value>90</value>
</property>
3. 日志管理策略
# 配置日志滚动策略(在log4j.properties中)
log4j.appender.DRFA.MaxBackupIndex=10
log4j.appender.DRFA.MaxFileSize=10MB
# 设置日志聚合保留周期(yarn-site.xml)
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value> <!-- 1天 -->
</property>
五、常见问题解决方案
1. 端口冲突处理
现象:启动时报错Address already in use
解决方案:
# 查找冲突端口
netstat -tulnp | grep <端口号>
# 修改YARN端口配置
vi etc/hadoop/yarn-site.xml
<property>
<name>yarn.resourcemanager.address</name>
<value>0.0.0.0:8033</value> <!-- 修改为未占用端口 -->
</property>
2. 内存不足错误
现象:Container [pid=...] is running beyond physical memory limits
解决方案:
- 调整
yarn.nodemanager.vmem-pmem-ratio
(默认2.1) - 增加
mapreduce.map.memory.mb
和mapreduce.reduce.memory.mb
值 - 检查系统swap配置:
# 创建交换文件
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
3. 作业提交失败排查
步骤:
- 检查ResourceManager UI(默认8088端口)
- 查看NodeManager日志:
tail -f logs/yarn-*-nodemanager-*.log
- 验证HDFS权限:
hadoop fs -ls /
# 若无权限,执行:
hadoop fs -chmod -R 777 /
六、进阶使用技巧
1. 动态资源调整
# 通过REST API修改队列资源
curl -X PUT "http://localhost:8088/ws/v1/cluster/scheduler" \
-H "Content-Type: application/json" \
-d '{"queue":{"queueName":"default","capacity":60}}'
2. 本地模式加速
在mapred-site.xml
中添加:
<property>
<name>mapreduce.map.output.compress</name>
<value>true</value>
</property>
<property>
<name>mapreduce.map.output.compress.codec</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
3. 监控集成
配置Prometheus+Grafana监控:
- 启用JMX导出:
# 在hadoop-env.sh中添加
export HADOOP_JMX_OPTS="-Dcom.sun.management.jmxremote.port=1099 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false"
- 配置Prometheus的JMX exporter
七、总结与最佳实践
- 资源隔离:使用cgroups限制容器资源使用
- 版本匹配:确保Hadoop版本与JDK版本兼容(Hadoop 3.x推荐JDK 11)
- 安全配置:生产环境应启用Kerberos认证
- 备份策略:定期备份
$HADOOP_HOME/etc/hadoop
配置目录 - 升级路径:小版本升级可直接替换二进制文件,大版本升级需测试兼容性
通过本文的详细指导,开发者可完成从环境搭建到生产调优的全流程操作。实际部署时建议先在测试环境验证配置,再逐步迁移到生产环境。对于资源敏感型应用,建议结合Docker容器化部署以实现更好的资源隔离。
发表评论
登录后可评论,请前往 登录 或 注册