Hadoop企业优化
# Hadoop 企业优化

# MapReduce 优化方法
MapReduce 优化方法主要从六个方面考虑:数据输入、Map 阶段、Reduce 阶段、IO 传输、数据倾斜问题和常用的调优参数。







# 常用的调优参数
1)资源相关参数
(1)以下参数是在用户自己的 MR 应用程序中配置就可以生效(mapred-default.xml)
| 配置参数 | 参数说明 |
|---|---|
| mapreduce.map.memory.mb | 一个 MapTask 可使用的资源上限(单位:MB),默认为 1024。如果 MapTask 实际使用的资源量超过该值,则会被强制杀死。 |
| mapreduce.reduce.memory.mb | 一个 ReduceTask 可使用的资源上限(单位:MB),默认为 1024。如果 ReduceTask 实际使用的资源量超过该值,则会被强制杀死。 |
| mapreduce.map.cpu.vcores | 每个 MapTask 可使用的最多 cpu core 数目,默认值: 1 |
| mapreduce.reduce.cpu.vcores | 每个 ReduceTask 可使用的最多 cpu core 数目,默认值: 1 |
| mapreduce.reduce.shuffle.parallelcopies | 每个 Reduce 去 Map 中取数据的并行数。默认值是 5 |
| mapreduce.reduce.shuffle.merge.percent | Buffer 中的数据达到多少比例开始写入磁盘。默认值 0.66 |
| mapreduce.reduce.shuffle.input.buffer.percent | Buffer 大小占 Reduce 可用内存的比例。默认值 0.7 |
| mapreduce.reduce.input.buffer.percent | 指定多少比例的内存用来存放 Buffer 中的数据,默认值是 0.0 |
(2)应该在 YARN 启动之前就配置在服务器的配置文件中才能生效(yarn-default.xml)
| 配置参数 | 参数说明 |
|---|---|
| yarn.scheduler.minimum-allocation-mb | 给应用程序 Container 分配的最小内存,默认值:1024 |
| yarn.scheduler.maximum-allocation-mb | 给应用程序 Container 分配的最大内存,默认值:8192 |
| yarn.scheduler.minimum-allocation-vcores | 每个 Container 申请的最小 CPU 核数,默认值:1 |
| yarn.scheduler.maximum-allocation-vcores | 每个 Container 申请的最大 CPU 核数,默认值:32 |
| yarn.nodemanager.resource.memory-mb | 给 Containers 分配的最大物理内存,默认值:8192 |
(3)Shuffle 性能优化的关键参数,应在 YARN 启动之前就配置好(mapred-default.xml)
| 配置参数 | 参数说明 |
|---|---|
| mapreduce.task.io.sort.mb | Shuffle 的环形缓冲区大小,默认 100m |
| mapreduce.map.sort.spill.percent | 环形缓冲区溢出的阈值,默认 80% |
2)容错相关参数(MapReduce 性能优化)
| 配置参数 | 参数说明 |
|---|---|
| mapreduce.map.maxattempts | 每个 Map Task 最大重试次数,一旦重试参数超过该值,则认为 Map Task 运行失败,默认值:4。 |
| mapreduce.reduce.maxattempts | 每个 Reduce Task 最大重试次数,一旦重试参数超过该值,则认为 Map Task 运行失败,默认值:4。 |
| mapreduce.task.timeout | Task 超时时间,经常需要设置的一个参数,该参数表达的意思为:如果一个 Task 在一定时间内没有任何进入,即不会读取新的数据,也没有输出数据,则认为该 Task 处于 Block 状态,可能是卡住了,也许永远会卡住,为了防止因为用户程序永远 Block 住不退出,则强制设置了一个该超时时间(单位毫秒),默认是 600000。如果你的程序对每条输入数据的处理时间过长(比如会访问数据库,通过网络拉取数据等),建议将该参数调大,该参数过小常出现的错误提示是 “AttemptID:attempt_14267829456721_123456_m_000224_0 Timed out after 300 secsContainer killed by the ApplicationMaster.”。 |
# HDFS 小文件优化方法
小文件的优化无非以下几种方式:
- 在数据采集的时候,就将小文件或小批数据合成大文件再上传 HDFS。
- 在业务处理之前,在 HDFS 上使用 MapReduce 程序对小文件进行合并。
- 在 MapReduce 处理时,可采用 CombineTextInputFormat 提高效率。


编辑 (opens new window)
上次更新: 2023/12/06, 01:31:48