logo

YARN单机部署全攻略:从环境准备到生产调优

作者:很菜不狗2025.09.17 10:41浏览量:2

简介:本文详细介绍YARN单机部署的全流程,涵盖环境配置、安装步骤、配置优化及故障排查,助力开发者快速构建本地资源管理环境。

YARN单机部署全攻略:从环境准备到生产调优

一、为什么需要YARN单机部署?

YARN(Yet Another Resource Negotiator)作为Hadoop生态的核心组件,负责集群资源管理与任务调度。单机部署场景下,开发者可通过最小化环境模拟生产集群行为,实现以下价值:

  1. 本地化开发验证:在无集群环境下测试MapReduce/Spark作业逻辑
  2. 教学与实验:快速搭建学习环境,理解YARN架构原理
  3. 轻量级CI/CD:集成到持续集成流程中进行单元测试
  4. 资源隔离实验:验证不同资源分配策略的效果

相较于伪分布式部署,单机部署更强调资源管理的纯粹性,通过单节点模拟多节点调度行为,特别适合资源调度算法验证和性能基准测试。

二、环境准备与依赖安装

1. 基础环境要求

组件 版本要求 推荐配置
OS Linux/MacOS Ubuntu 20.04 LTS
Java JDK 8/11 OpenJDK 11.0.12
内存 最低4GB 8GB+(含交换分区)
磁盘 20GB可用空间 SSD优先

2. 依赖安装步骤

  1. # 安装OpenJDK(以Ubuntu为例)
  2. sudo apt update
  3. sudo apt install openjdk-11-jdk -y
  4. # 验证安装
  5. java -version
  6. # 应输出:openjdk version "11.0.12"
  7. # 配置JAVA_HOME
  8. echo 'export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64' >> ~/.bashrc
  9. source ~/.bashrc

三、YARN单机部署核心流程

1. 下载与解压

  1. # 下载Hadoop 3.3.4(含YARN)
  2. wget https://downloads.apache.org/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
  3. tar -xzvf hadoop-3.3.4.tar.gz -C /opt/
  4. cd /opt/hadoop-3.3.4

2. 核心配置文件修改

etc/hadoop/yarn-site.xml

  1. <configuration>
  2. <!-- 启用单机模式 -->
  3. <property>
  4. <name>yarn.resourcemanager.ha.enabled</name>
  5. <value>false</value>
  6. </property>
  7. <!-- 配置NodeManager内存 -->
  8. <property>
  9. <name>yarn.nodemanager.resource.memory-mb</name>
  10. <value>2048</value> <!-- 根据实际内存调整 -->
  11. </property>
  12. <!-- 日志聚合配置 -->
  13. <property>
  14. <name>yarn.log-aggregation-enable</name>
  15. <value>true</value>
  16. </property>
  17. </configuration>

etc/hadoop/mapred-site.xml

  1. <configuration>
  2. <!-- 指定YARN为MapReduce运行框架 -->
  3. <property>
  4. <name>mapreduce.framework.name</name>
  5. <value>yarn</value>
  6. </property>
  7. <!-- 历史服务器配置 -->
  8. <property>
  9. <name>mapreduce.jobhistory.address</name>
  10. <value>0.0.0.0:10020</value>
  11. </property>
  12. </configuration>

3. 环境变量配置

  1. # 编辑hadoop-env.sh
  2. vi etc/hadoop/hadoop-env.sh
  3. # 添加以下内容(根据实际路径调整)
  4. export HADOOP_HOME=/opt/hadoop-3.3.4
  5. export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  6. export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

4. 格式化与启动

  1. # 首次运行前格式化(仅需执行一次)
  2. bin/hdfs namenode -format
  3. # 启动YARN服务
  4. sbin/start-yarn.sh
  5. # 验证服务状态
  6. jps
  7. # 应看到以下进程:
  8. # NodeManager
  9. # ResourceManager
  10. # 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. 线程池调优

  1. <!-- 在yarn-site.xml中添加 -->
  2. <property>
  3. <name>yarn.nodemanager.linux-container-executor.cgroups.strict-resource-usage</name>
  4. <value>true</value>
  5. </property>
  6. <property>
  7. <name>yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage</name>
  8. <value>90</value>
  9. </property>

3. 日志管理策略

  1. # 配置日志滚动策略(在log4j.properties中)
  2. log4j.appender.DRFA.MaxBackupIndex=10
  3. log4j.appender.DRFA.MaxFileSize=10MB
  4. # 设置日志聚合保留周期(yarn-site.xml)
  5. <property>
  6. <name>yarn.log-aggregation.retain-seconds</name>
  7. <value>86400</value> <!-- 1 -->
  8. </property>

五、常见问题解决方案

1. 端口冲突处理

现象:启动时报错Address already in use
解决方案

  1. # 查找冲突端口
  2. netstat -tulnp | grep <端口号>
  3. # 修改YARN端口配置
  4. vi etc/hadoop/yarn-site.xml
  5. <property>
  6. <name>yarn.resourcemanager.address</name>
  7. <value>0.0.0.0:8033</value> <!-- 修改为未占用端口 -->
  8. </property>

2. 内存不足错误

现象Container [pid=...] is running beyond physical memory limits
解决方案

  1. 调整yarn.nodemanager.vmem-pmem-ratio(默认2.1)
  2. 增加mapreduce.map.memory.mbmapreduce.reduce.memory.mb
  3. 检查系统swap配置:
    1. # 创建交换文件
    2. sudo fallocate -l 2G /swapfile
    3. sudo chmod 600 /swapfile
    4. sudo mkswap /swapfile
    5. sudo swapon /swapfile

3. 作业提交失败排查

步骤

  1. 检查ResourceManager UI(默认8088端口)
  2. 查看NodeManager日志:
    1. tail -f logs/yarn-*-nodemanager-*.log
  3. 验证HDFS权限:
    1. hadoop fs -ls /
    2. # 若无权限,执行:
    3. hadoop fs -chmod -R 777 /

六、进阶使用技巧

1. 动态资源调整

  1. # 通过REST API修改队列资源
  2. curl -X PUT "http://localhost:8088/ws/v1/cluster/scheduler" \
  3. -H "Content-Type: application/json" \
  4. -d '{"queue":{"queueName":"default","capacity":60}}'

2. 本地模式加速

mapred-site.xml中添加:

  1. <property>
  2. <name>mapreduce.map.output.compress</name>
  3. <value>true</value>
  4. </property>
  5. <property>
  6. <name>mapreduce.map.output.compress.codec</name>
  7. <value>org.apache.hadoop.io.compress.SnappyCodec</value>
  8. </property>

3. 监控集成

配置Prometheus+Grafana监控:

  1. 启用JMX导出:
    1. # 在hadoop-env.sh中添加
    2. export HADOOP_JMX_OPTS="-Dcom.sun.management.jmxremote.port=1099 \
    3. -Dcom.sun.management.jmxremote.authenticate=false \
    4. -Dcom.sun.management.jmxremote.ssl=false"
  2. 配置Prometheus的JMX exporter

七、总结与最佳实践

  1. 资源隔离:使用cgroups限制容器资源使用
  2. 版本匹配:确保Hadoop版本与JDK版本兼容(Hadoop 3.x推荐JDK 11)
  3. 安全配置:生产环境应启用Kerberos认证
  4. 备份策略:定期备份$HADOOP_HOME/etc/hadoop配置目录
  5. 升级路径:小版本升级可直接替换二进制文件,大版本升级需测试兼容性

通过本文的详细指导,开发者可完成从环境搭建到生产调优的全流程操作。实际部署时建议先在测试环境验证配置,再逐步迁移到生产环境。对于资源敏感型应用,建议结合Docker容器化部署以实现更好的资源隔离。

相关文章推荐

发表评论