Hadoop任务如何在Ubuntu上高效执行
导读:在 Ubuntu 上高效执行 Hadoop 任务的实用指南 一 环境与基础配置 安装 Java 8(Hadoop 3.x 常用稳定版本),并配置环境变量: 安装:sudo apt update && sudo apt i...
在 Ubuntu 上高效执行 Hadoop 任务的实用指南
一 环境与基础配置
- 安装 Java 8(Hadoop 3.x 常用稳定版本),并配置环境变量:
- 安装:
sudo apt update & & sudo apt install -y openjdk-8-jdk - 配置:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
- 安装:
- 安装并启用 SSH(伪分布式/集群需要节点间通信与免密登录):
- 安装:
sudo apt install -y openssh-server - 免密:
ssh-keygen -t rsa & & cat ~/.ssh/id_rsa.pub > > ~/.ssh/authorized_keys & & chmod 600 ~/.ssh/authorized_keys
- 安装:
- 下载并解压 Hadoop 3.3.x,设置环境变量:
- 示例:
export HADOOP_HOME=/usr/local/hadoop & & export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
- 示例:
- 基础配置要点(位于 $HADOOP_HOME/etc/hadoop):
- core-site.xml:
fs.defaultFS=hdfs://localhost:9000 - hdfs-site.xml:
dfs.replication=1(单机/伪分布式),dfs.namenode.name.dir与dfs.datanode.data.dir指向本地存储目录 - mapred-site.xml:
mapreduce.framework.name=yarn - yarn-site.xml:
yarn.nodemanager.aux-services=mapreduce_shuffle
- core-site.xml:
- 初始化与启动:
- 格式化:
hdfs namenode -format - 启动:
start-dfs.sh & & start-yarn.sh - 验证:
jps应看到 NameNode、DataNode、ResourceManager、NodeManager;访问 http://localhost:9870(HDFS)与 http://localhost:8088(YARN)。
- 格式化:
二 高效执行的关键配置
- 资源配置(yarn-site.xml)
- 依据节点内存/CPU 合理设置:
yarn.nodemanager.resource.memory-mb:为 NodeManager 分配的总内存(如:8192 MB)yarn.nodemanager.resource.cpu-vcores:为 NodeManager 分配的 vCore 数(如:8)
- 调度边界:
yarn.scheduler.minimum-allocation-mb、yarn.scheduler.maximum-allocation-mb
- 依据节点内存/CPU 合理设置:
- 存储与 I/O(hdfs-site.xml)
- 块大小:按数据规模与访问模式调整
dfs.blocksize(如:256MB 对应 268435456) - 存储介质:优先使用 SSD 作为 HDFS 数据目录,提高读写性能
- 块大小:按数据规模与访问模式调整
- 并行度与 JVM
- 并行度:可按数据量与集群规模设置
mapreduce.job.maps、mapreduce.job.reduces - 容器内存:结合容器规格设置
mapreduce.map.memory.mb、mapreduce.reduce.memory.mb - JVM 堆:通过
mapreduce.map.java.opts、mapreduce.reduce.java.opts设置堆大小(通常略小于容器内存,留出堆外开销)
- 并行度:可按数据量与集群规模设置
- 数据压缩(减少磁盘 I/O 与网络传输)
- 中间数据:
mapreduce.map.output.compress=true - 输出数据:
mapreduce.output.fileoutputformat.compress=true
- 中间数据:
- 数据本地化
- 适度等待本地数据:
mapreduce.job.locality.wait,提升 Map 任务数据本地率,降低网络开销。
- 适度等待本地数据:
三 作业提交与调度
- 提交作业(MapReduce)
- 示例:
hadoop jar /path/to/your-job.jar com.example.YourJobClass input output
- 示例:
- 运行时调优
- 通过命令行覆盖参数:
-D mapreduce.job.reduces=200 -D mapreduce.map.output.compress=true
- 通过命令行覆盖参数:
- 监控与诊断
- 命令行:
yarn application -list、yarn application -status < app_id> - Web UI:ResourceManager 8088、HDFS NameNode 9870
- 命令行:
- 工作流调度
- 复杂依赖与定时调度建议集成 Apache Oozie 或 Apache Airflow,与 Hadoop/YARN 协同管理任务生命周期。
四 快速性能调优示例
- 目标:提升大表扫描与聚合类作业的整体吞吐与稳定性
- 示例配置片段(按需调整数值)
- yarn-site.xml
< property> < name> yarn.nodemanager.resource.memory-mb< /name> < value> 16384< /value> < /property> < property> < name> yarn.nodemanager.resource.cpu-vcores< /name> < value> 16< /value> < /property> < property> < name> yarn.scheduler.minimum-allocation-mb< /name> < value> 2048< /value> < /property> < property> < name> yarn.scheduler.maximum-allocation-mb< /name> < value> 16384< /value> < /property> - hdfs-site.xml
< property> < name> dfs.blocksize< /name> < value> 268435456< /value> < !-- 256MB --> < /property> - mapred-site.xml
< property> < name> mapreduce.map.output.compress< /name> < value> true< /value> < /property> < property> < name> mapreduce.output.fileoutputformat.compress< /name> < value> true< /value> < /property> < property> < name> mapreduce.job.reduces< /name> < value> 200< /value> < /property> < property> < name> mapreduce.map.memory.mb< /name> < value> 4096< /value> < /property> < property> < name> mapreduce.reduce.memory.mb< /name> < value> 8192< /value> < /property> < property> < name> mapreduce.map.java.opts< /name> < value> -Xmx3072m< /value> < /property> < property> < name> mapreduce.reduce.java.opts< /name> < value> -Xmx6144m< /value> < /property> < property> < name> mapreduce.job.locality.wait< /name> < value> 5000< /value> < /property> - 提交示例
hadoop jar your-job.jar com.example.YourJobClass \ -D mapreduce.job.reduces=200 \ -D mapreduce.map.output.compress=true \ input output - 调优要点
- 合理设置 reduce 数量(通常与 reduce 阶段目标并行度、数据倾斜程度相关)
- 容器内存与 JVM 堆配比建议为:堆 ≈ 容器内存的 75%–85%
- 结合 数据本地化 与 压缩 减少网络与 I/O 开销。
- yarn-site.xml
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Hadoop任务如何在Ubuntu上高效执行
本文地址: https://pptw.com/jishu/755447.html
