`

MapReduce任务参数调优

 
阅读更多

MapReduce任务参数调优

本文主要记录Hadoop 2.x版本中MapReduce参数调优,不涉及Yarn的调优。

Hadoop的默认配置文件(以cdh5.0.1为例):

说明:

在hadoop2中有些参数名称过时了,例如原来的mapred.reduce.tasks改名为mapreduce.job.reduces了,当然,这两个参数你都可以使用,只是第一个参数过时了。

1. 操作系统调优

  • 增大打开文件数据和网络连接上限,调整内核参数net.core.somaxconn,提高读写速度和网络带宽使用率
  • 适当调整epoll的文件描述符上限,提高Hadoop RPC并发
  • 关闭swap。如果进程内存不足,系统会将内存中的部分数据暂时写入磁盘,当需要时再将磁盘上的数据动态换置到内存中,这样会降低进程执行效率
  • 增加预读缓存区大小。预读可以减少磁盘寻道次数和I/O等待时间
  • 设置openfile

2. Hdfs参数调优

2.1 core-default.xml:

hadoop.tmp.dir

  • 默认值: /tmp
  • 说明: 尽量手动配置这个选项,否则的话都默认存在了里系统的默认临时文件/tmp里。并且手动配置的时候,如果服务器是多磁盘的,每个磁盘都设置一个临时文件目录,这样便于mapreduce或者hdfs等使用的时候提高磁盘IO效率。

fs.trash.interval

  • 默认值: 0
  • 说明: 这个是开启hdfs文件删除自动转移到垃圾箱的选项,值为垃圾箱文件清除时间。一般开启这个会比较好,以防错误删除重要文件。单位是分钟。

io.file.buffer.size

  • 默认值:4096
  • 说明:SequenceFiles在读写中可以使用的缓存大小,可减少 I/O 次数。在大型的 Hadoop cluster,建议可设定为 65536 到 131072。

2.2 hdfs-default.xml:

dfs.blocksize

  • 默认值:134217728
  • 说明: 这个就是hdfs里一个文件块的大小了,CDH5中默认128M。太大的话会有较少map同时计算,太小的话也浪费可用map个数资源,而且文件太小namenode就浪费内存多。根据需要进行设置。

dfs.namenode.handler.count

  • 默认值:10
  • 说明:设定 namenode server threads 的数量,这些 threads 會用 RPC 跟其他的 datanodes 沟通。当 datanodes 数量太多时会发現很容易出現 RPC timeout,解決方法是提升网络速度或提高这个值,但要注意的是 thread 数量多也表示 namenode 消耗的内存也随着增加

3. MapReduce参数调优

包括以下节点:

  • 合理设置槽位数目
  • 调整心跳配置
  • 磁盘块配置
  • 设置RPC和线程数目
  • 启用批量任务调度

3.1 mapred-default.xml:

mapred.reduce.tasksmapreduce.job.reduces):

  • 默认值:1
  • 说明:默认启动的reduce数。通过该参数可以手动修改reduce的个数。

mapreduce.task.io.sort.factor

  • 默认值:10
  • 说明:Reduce Task中合并小文件时,一次合并的文件数据,每次合并的时候选择最小的前10进行合并。

mapreduce.task.io.sort.mb

  • 默认值:100
  • 说明: Map Task缓冲区所占内存大小。

mapred.child.java.opts

  • 默认值:-Xmx200m
  • 说明:jvm启动的子线程可以使用的最大内存。建议值-XX:-UseGCOverheadLimit -Xms512m -Xmx2048m -verbose:gc -Xloggc:/tmp/@taskid@.gc

mapreduce.jobtracker.handler.count

  • 默认值:10
  • 说明:JobTracker可以启动的线程数,一般为tasktracker节点的4%。

mapreduce.reduce.shuffle.parallelcopies

  • 默认值:5
  • 说明:reuduce shuffle阶段并行传输数据的数量。这里改为10。集群大可以增大。

mapreduce.tasktracker.http.threads

  • 默认值:40
  • 说明:map和reduce是通过http进行数据传输的,这个是设置传输的并行线程数。

mapreduce.map.output.compress

  • 默认值:false
  • 说明: map输出是否进行压缩,如果压缩就会多耗cpu,但是减少传输时间,如果不压缩,就需要较多的传输带宽。配合mapreduce.map.output.compress.codec使用,默认是org.apache.hadoop.io.compress.DefaultCodec,可以根据需要设定数据压缩方式。

mapreduce.reduce.shuffle.merge.percent

  • 默认值: 0.66
  • 说明:reduce归并接收map的输出数据可占用的内存配置百分比。类似mapreduce.reduce.shuffle.input.buffer.percen属性。

mapreduce.reduce.shuffle.memory.limit.percent

  • 默认值: 0.25
  • 说明:一个单一的shuffle的最大内存使用限制。

mapreduce.jobtracker.handler.count

  • 默认值: 10
  • 说明:可并发处理来自tasktracker的RPC请求数,默认值10。

mapred.job.reuse.jvm.num.tasksmapreduce.job.jvm.numtasks):

  • 默认值: 1
  • 说明:一个jvm可连续启动多个同类型任务,默认值1,若为-1表示不受限制。

mapreduce.tasktracker.tasks.reduce.maximum

  • 默认值: 2
  • 说明:一个tasktracker并发执行的reduce数,建议为cpu核数

4. 系统优化

4.1 避免排序

对于一些不需要排序的应用,比如hash join或者limit n,可以将排序变为可选环节,这样可以带来一些好处:

  • 在Map Collect阶段,不再需要同时比较partition和key,只需要比较partition,并可以使用更快的计数排序(O(n))代替快速排序(O(NlgN))
  • 在Map Combine阶段,不再需要进行归并排序,只需要按照字节合并数据块即可。
  • 去掉排序之后,Shuffle和Reduce可同时进行,这样就消除了Reduce Task的屏障(所有数据拷贝完成之后才能执行reduce()函数)。

4.2 Shuffle阶段内部优化

  1. Map端--用Netty代替Jetty
  2. Reduce端--批拷贝
  3. 将Shuffle阶段从Reduce Task中独立出来

5. 总结

在运行mapreduce任务中,经常调整的参数有:

  • mapred.reduce.tasks:手动设置reduce个数
  • mapreduce.map.output.compress:map输出结果是否压缩
    • mapreduce.map.output.compress.codec
  • mapreduce.output.fileoutputformat.compress:job输出结果是否压缩
    • mapreduce.output.fileoutputformat.compress.type
    • mapreduce.output.fileoutputformat.compress.codec
分享到:
评论

相关推荐

    hadoop、habse、yarn、MapReduce调优等总结的集合调优.docx

    `mapred-site.xml`则是针对MapReduce任务的配置,涉及调度器、任务内存分配等。 HDFS调优主要包括以下几个方面: 1. **允许文件追加**:通过修改`hdfs-site.xml`中的配置,可以启用HDFS上的文件追加功能。 2. **...

    sqoop详细开发手册(开发,优化,参数解释等)

    Sqoop 提供了多种命令,例如 `codegen` 用于生成与数据库交互的代码,`import` 用于从数据库导入数据,`export` 用于将 HDFS 数据导出到数据库,`job` 用于管理和操作保存的工作任务等。 在实际开发和优化过程中,...

    hadoop作业调优参数整理及原理

    Hadoop作业调优是提升大数据处理效率的关键环节,通过对Hadoop MapReduce框架中的参数进行精细调整,可以显著改善作业的性能。以下是对标题和描述中涉及的参数及原理的详细说明: 1. **MapTask运行内部原理** - **...

    hadoop和hive调优个人总结

    在使用Hadoop和Hive过程中,可能会遇到一些问题,例如Mapreduce任务结束了,但是Reduce任务停止了,或者HDFS抛出错误等情况。 1. Mapreduce任务结束了,但是Reduce任务停止了 这种情况可能是由于Mapreduce任务的...

    基于大数据处理平台的计算任务调度的配置优化.pdf

    MapReduce计算任务执行过程大致可以分为四个阶段:计算任务提交阶段、Map子任务执行阶段、Reduce子任务执行阶段以及执行结果返回阶段。在这些阶段中,资源配置的优化能够显著提高大数据平台的资源利用率和业务承载...

    Hadoop集群参数的自动调优

    未来的研究方向将集中在进一步优化算法,提高参数调优的准确性和灵活性,以及探索如何将此方法扩展到更广泛的分布式计算场景中,如Spark和Flink等现代大数据处理框架。 综上所述,Hadoop参数的自动调优不仅减轻了...

    hive参数优化文档

    - 根据实际需求调整`yarn.nodemanager.resource.cpu-vcores`和`yarn.nodemanager.resource.memory-mb`等参数,确保足够的CPU和内存资源分配给MapReduce任务。 2. **并发控制**: - 设置`mapreduce.job.queuename`...

    Hadoop企业优化常用的调优参数.docx

    本文将详细讨论Hadoop调优的关键参数,分为资源相关参数、Shuffle性能优化参数以及容错相关参数。 1. **资源相关参数**: - `mapreduce.map.memory.mb` 和 `mapreduce.reduce.memory.mb` 分别设定MapTask和Reduce...

    基于Hadoop的电商大数据平台性能调优.pdf

    平台参数调优方面,主要是针对Hadoop平台的核心组件进行配置优化,例如HDFS的读写缓存大小、MapReduce任务的并行度等。调整这些参数能够使平台更好地适应数据处理的需求,减少资源浪费,平衡集群负载,最终达到提升...

    hadoop调优指南 hadoop调优指南

    配置参数调优 Hadoop中有许多关键配置参数可以进行调整以改善性能。以下是一些常用的配置项: - **mapreduce.map.memory.mb** 和 **mapreduce.reduce.memory.mb**:设置Map和Reduce任务的最大内存使用量。 - **...

    大数据各类性能调优

    可以通过调整MapReduce任务数量、使用Local GroupBy等方法来实现。 ##### 12.5.4 数据存储优化 - 通过优化数据存储格式(如使用Parquet或ORC文件格式)、压缩算法等手段可以提高查询效率。 ##### 12.5.5 SQL优化 -...

    CDH参数优化.doc

    在Cloudera Distribution Including Hadoop (CDH) 中进行Hive参数优化时,一个重要的步骤是将Hive的计算引擎由默认的MapReduce更改为Spark,这样可以显著提升查询性能。 ##### 步骤一:配置`hive.execution.engine`...

    Hive及Hadoop作业调优

    1. 配置参数调优:合理配置Hadoop和Hive的参数是调优的一个重要步骤。这包括了控制Map任务的数量、合理设置Reduce任务的数量、压缩中间数据以及减少磁盘IO。配置参数调优的目的是提高数据处理的效率和速度,降低不必...

    大数据-hadoop-mapreduce代码

    在大数据处理领域,Hadoop MapReduce 是一个至关重要的组件,它为海量数据的...通过研究这些代码,你可以学习到如何处理Hadoop集群上的大规模数据,如何编写高效的Mapper和Reducer,以及如何设置和调优MapReduce作业。

    MapReduce研究现状 .zip

    4. **MapReduce参数调整**:例如,调整`mapred.tasktracker.map.tasks.maximum`和`mapred.tasktracker.reduce.tasks.maximum`,平衡Map和Reduce任务的数量。 5. **输入输出格式优化**:选择合适的输入输出格式,如...

    华为MapReduce服务组件操作指南.rar

    3. MapReduce参数调优:调整诸如map.task.memory,reduce.task.memory等参数,确保任务有足够的内存资源。 4. Combiner使用:在Map阶段使用Combiner函数进行本地聚合,减少网络传输的数据量。 五、安全与权限管理 1...

Global site tag (gtag.js) - Google Analytics