MapReduce的job如何调优

MapReduce如何进行调优呢?

需要从Map阶段和Reduce阶段进行考虑。

1.如果存在大量的小数据,可以使用SequenceFile,自定义的CombineFileInputFormat

----------------------------------------------------------------------------------

小数据文件,每一个文件都会启动一个map任务,如果有大量小文件的话,就会有大量的map任务运行,这时候回造成资源浪费

map任务或者reduce任务都是java进程,如果启动java会耗费大量的资源,如果是小文件运行的话,有可能造成 数据真正处理的时间比启动结束的时间都要短

这时候要尽量避免小文件,如果有大量的小文件可以交给一个map进行处理,使用CombineFileInputFormat

也可以使用SequenceFile进行处理小文件

那么问题来了,是不是很多小文件用CombineFileInputFomat处理会比运行大量的map任务快呢,这个是不一定的,把很多小文件交给一个map处理和产生网络传输

这时候也会占用很多时间。

最好的解决方案就是不要使用大量的小文件!!!

2.推测执行在整个集群上关闭,特定需要的作业单独开启,一般可以节省5%~10%的集群资源

  mapred.map.task.speculative.execution=false

  mapred.reduce.task.speculative.execution=false

----------------------------------------------------------------------------------

推测执行,在作业进行运行的过程中,如果比较慢呢,那么机器就会启一个相同的任务运行相同的数据,谁先结束取谁的数据

推测执行会减少其他任务执行的机会,会浪费更多的资源。

什么时候开启好呢?在资源不紧张的情况下开启较好

3.开启JVM重用

  mapred.job.reuse.jvm.num.tasks=-1

----------------------------------------------------------------------------------

map任务和reduce任务都是java进程,为了节省资源的暂占用,可以开启JVM的重用

即不用关闭jvm虚拟机,而只需要在jvm再开启就可以。就不必新启进程了。

4.增加InputSplit大小

  mapred.min.split.size = 268435456

----------------------------------------------------------------------------------

一个InputSplit对应一个map任务,InputSplit少了,map就会减少,资源利用率就会有所提升,数据量会加大

一个map任务处理的数据量也会增大,吞吐量上升

5.增大map输出的缓冲

  io.sort.mb=300

----------------------------------------------------------------------------------

map处理会产生输出,通过shuffle会送给reduce,那么数据在没有拿走之前,数据会在内存或者磁盘上存放

当map输出在内存装不下,就会放到磁盘,map处理数据量不断增加,就需要往磁盘上面写。吧map输出的缓冲增大,意味着一次写出去的缓冲就多了

6.增加合并spill文件数量

  io.sort.factor=50

----------------------------------------------------------------------------------

spill? map输出在内存中的数据写到Linux磁盘的过程叫做spill

如果数据量较大,需要spill很多次,在磁盘上面就会产生很多的小文件。这种很多的小文件,

那么map端会把很多小文件合到一起合成一个文件,合的这个过程就是spill,如果合并的文件多的话,意味着合并次数少

磁盘合并会耗费内存和CPU,所以应该一次性输出到磁盘的大一些,合并的文件应该多一些,这样就会提高性能

7.map端输出压缩,推荐LZO压缩算法

  mapred.compress.map.output=true

  mapred.map.output.compression.codec=com.hadoop.compression.lzoCodec;

----------------------------------------------------------------------------------

map端输出进行压缩,占用磁盘少,shuffle数据量也少

8.增大shuffle复制线程数

  mapred.reduce.parallel.copies=15

----------------------------------------------------------------------------------

shuffle是reduce端发起请求,然后啊map端的数据复制过去,如果并发线程多,吞吐量上去,会增加shuffle速度,减少时间,所以需要提高线程数

9.设置单个节点的map和reduce执行数量(默认是2)

  mapred.tasktracker.map.tasks.maxinum=2

  mapred.tasktracker.reduce.tasks.maxinum=2

----------------------------------------------------------------------------------

增大,意味着单机可以增加执行的数量,会对内存占用增加

时间: 2024-12-15 17:15:06

MapReduce的job如何调优的相关文章

大数据技术 - MapReduce的Shuffle及调优

本章内容我们学习一下 MapReduce 中的 Shuffle 过程,Shuffle 发生在 map 输出到 reduce 输入的过程,它的中文解释是 “洗牌”,顾名思义该过程涉及数据的重新分配,主要分为两部分:1. map 任务输出的数据分组.排序,写入本地磁盘 2. reduce 任务拉取排序.由于该过程涉及排序.磁盘IO.以及网络IO 等消耗资源和 CPU 比较大的操作,因此该过程向来是“兵家必争”之地,即大家会重点优化的一个地方,因此也是大数据面试中经常会被重点考察的地方.本文力求通俗.

Cloudera Hadoop 5& Hadoop高阶管理及调优课程(CDH5,Hadoop2.0,HA,安全,管理,调优)

1.课程环境 本课程涉及的技术产品及相关版本: 技术 版本 Linux CentOS 6.5 Java 1.7 Hadoop2.0 2.6.0 Hadoop1.0 1.2.1 Zookeeper 3.4.6 CDH Hadoop 5.3.0 Vmware 10 Hive 0.13.1 HBase 0.98.6 Impala 2.1.0 Oozie 4.0.0 Hue 3.7.0 2.内容简介 本教程针对有一定Hadoop基础的学员,深入讲解如下方面的内容: 1.Hadoop2.0高阶运维,包括H

hadoop MapReduce - 从作业、任务(task)、管理员角度调优

1.Combiner的作用是什么?2.作业级别参数如何调优?3.任务及管理员级别有哪些可以调优? Hadoop为用户作业提供了多种可配置的参数,以允许用户根据作业特点调整这些参数值使作业运行效率达到最优. 一 应用程序编写规范1.设置Combiner        对于一大批MapReduce程序,如果可以设置一个Combiner,那么对于提高作业性能是十分有帮助的.Combiner可减少Map Task中间输出的结果,从而减少各个Reduce Task的远程拷贝数据量,最终表现为Map Tas

MapReduce shuffle过程剖析及调优

更新记录 2017-07-18 初稿 MapReduce简介 在Hadoop MapReduce中,框架会确保reduce收到的输入数据是根据key排序过的.数据从Mapper输出到Reducer接收,是一个很复杂的过程,框架处理了所有问题,并提供了很多配置项及扩展点.一个MapReduce的大致数据流如下图: 更详细的MapReduce介绍参考Hadoop MapReduce原理与实例. Mapper的输出排序.然后传送到Reducer的过程,称为shuffle.本文详细地解析shuffle过

Shuffle对MapReduce性能调优

Shuffle对MapReduce性能调优: Shuffle和排序 MapReduce确保每一个reduce的输出都按键排序,系统执行排序的过程---------将map输出作为输入传给reduce--------称为shuffle Shuffle过程是MapReduce的"心脏",也被称为奇迹发生的地方 1. 每个map有一个环形内存缓冲区,用于存储任务的输出.默认大小100MB(io.sort.mb属性),一旦达到阀值0.8(io.sort.spill.percent),一个后台线

Hadoop之MapReduce性能调优

基于对这些组件的深入理解,用户可以很容易通过调整一些关键参数使作业运行效率达到最优,本文将分别从Hadoop管理员和用户角度介绍如何对Hadoop进行性能调优以满足各自的需求. 1 概述 Hadoop性能调优是一项工程浩大的工作,它不仅涉及Hadoop本身的性能调优,还涉及更加底层的硬件.操作系统和Java虚拟机等系统的调优.对这几个系统适当地进行调优均有可能给Hadoop带来性能提升. Hadoop(JobTracker.TaskTracker) JVM OS Hardware(CPU Mem

mapreduce的调度算法和job调优

调度算法: mapreduce当有很多的作业在执行的时候,是按照什么顺序去执行的? 调度算法顺序需要关注: 1.提高作业的吞吐量. 2.要考虑优先级. 三种调度器:如果作业跑不完,并且机器资源利用率比较低,这时候就可以考虑这些东西 1.FifoScheduler,默认的调度算法,先进先出的方式处理应用,只有一个队列可提交应用,没有应用优先级可以配置. 2.CapacityScheduler,容量调度器.多队列的,依靠作业,如果需求资源少了,优先级就会高一些,需求资源多了,优先级就会低一些. 3.

MapReduce调优总结与拓展

本文为<hadoop技术内幕:深入解析MapReduce架构设计与实现原理>一书第9章<Hadoop性能调优>的总结. 图1 Hadoop层次结构图 从管理员角度进行调优 1.硬件选择 master配置(可靠性,内存,CPU主频等)优于slave. 2.操作系统参数调优 1)增大同时打开的文件描述符和网络连接上限 ulimit 将允许同时打开的文件描述符数增大到一个合适的值. net.core.somaxconn 定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数,默认值

MapReduce - 性能调优

Hadoop为用户作业提供了多种可配置的参数,以允许用户根据作业特点调整这些参数值使作业运行效率达到最优. 一 应用程序编写规范 1.设置Combiner 对于一大批MapReduce程序,如果可以设置一个Combiner,那么对于提高作业性能是十分有帮助的.Combiner可减少Map Task中间输出的结果,从而减少各个Reduce Task的远程拷贝数据量,最终表现为Map Task和Reduce Task执行时间缩短. 2. 选择合理的Writable类型 在MapReduce模型中,M