Hadoop MapReduce 性能优化


作者: 康凯森

日期: 2016-04-03

分类: BigData


影响 MapReduce 的主要因素

  • 硬件因素 :CPU 磁盘 I/O, 网络带宽, 内存
  • 底层存储系统
  • 输入数据,shuffle 数据 以及输出数据的大小
  • 作业算法: map, reduce, partition, combine, compress

潜在影响因素

  • I/O 模式: 直接I/O(本地) 流式I/O(TCP,JDBC)
  • 输入数据解析
  • 输入数据存储

性能调优

  • COU利用率
  • 内存占用
  • 磁盘 I/O
  • 网络流量

mapred-site.xml

  • CPU相关参数 map reduce 任务的最大数目
  • 磁盘I/O相关参数 是否压缩 编码方式
  • 内存相关参数

    • 每个JVM 任务的可用内存
    • 每个MR 作业的VM极限值
    • MR 合并与排序 时 排序区的缓冲区大小
    • MR 合并与排序 时 map 输出分区数目
  • 与网络相关参数 机架感知

hdfs-site.xml

  • 默认的block 块大小
  • 文件副本数

检测 系统瓶颈

  1. 创建一项基线 :使用 Hadoop 集群默认配置
  2. 分析 Hadoop 计数器, 修改或者调优 某些配置参数的配置
  3. 重复第2步,直到作业执行时间 达到最短

善于使用linux 相关命令

通过计数器 识别 资源薄弱环节

  • 检查输入数据大小
  • 检查 海量I/O 和网路阻塞
  • 检查 并发任务不足
  • 检查 CPU 过饱和

强化 map 和 reduce 任务

在Hadoop 下处理 hdfs 小文件问题的最简单方法是把它们打包成大文件

在shuffle阶段 和 Sort 阶段 提高性能最简单的手段就是压缩排序和合并的数据量,可以 使用 combiner,数据压缩,数据过滤

优化 mapreduce 任务

  • 合理设定Map/Reduce数量
  • 使用Combiner减少中间数据输出
  • 对中间数据和最终结果启用压缩
  • 减少Shuffle过程中写入磁盘的数据
  • 使用正确的 Writable 类型
  • 在代码中捕获所有异常

Hadoop 最佳实践

  • EXT4 文件系统
  • noatime: 禁用文件和目录的访问时间日志
  • 避免使用逻辑卷管理
  • swap 值降低 或禁用
  • 提高最大打开文件描述符

《OLAP 性能优化指南》欢迎 Star&共建

《OLAP 性能优化指南》

欢迎关注微信公众号