`

Hadoop MapReduce Job性能调优——修改Map和Reduce个数

 
阅读更多

 

  • map task的数量即mapred.map.tasks的参数值,用户不能直接设置这个参数。Input Split的大小,决定了一个Job拥有多少个map。默认input split的大小是64M(与dfs.block.size的默认值相同)。然而,如果输入的数据量巨大,那么默认的64M的block会有几万甚至几十万的Map Task,集群的网络传输会很大,最严重的是给Job Tracker的调度、队列、内存都会带来很大压力。mapred.min.split.size这个配置项决定了每个 Input Split的最小值,用户可以修改这个参数,从而改变map task的数量。
  • 一个恰当的map并行度是大约每个节点10-100map,且最好每个map的执行时间至少一分钟。
  •  reduce task的数量由mapred.reduce.tasks这个参数设定,默认值是1。
  • 合适的reduce task数量是0.95或者0.75*( nodes * mapred.tasktracker.reduce.tasks.maximum), mapred.tasktracker.tasks.reduce.maximum的数量一般设置为各节点cpu core数量,即能同时计算的slot数量。对于0.95,当map结束时,所有的reduce能够立即启动;对于1.75,较快的节点结束第一轮reduce后,可以开始第二轮的reduce任务,从而提高负载均衡。


  • 对一 个job的map数和reduce数的设定对一个job的运行是非常重要的,并且非常简单。以下是一些设 置这几个值的经验总结:

    • 如果job的每个map或者 reduce task的运行时间都只有30-40秒钟,那么就减少该job的map或者reduce数,每一个task(map|reduce)的setup和加入到 调度器中进行调度,这个中间的过程可能都要花费几秒钟,所以如果每个task都非常快就跑完了,就会在task的开始和结束的时候浪费太多的时间。JVM 的reuse方式也可以解决 这个问题。
    • 如 果某个input的文件 非常的大,比如 1TB,可以考虑将hdfs上的每个block size设大,比如设成256MB或者512MB,这样map和reduce的数据 可以减小。而且用户还可以通过命令 hadoop distcp -Ddfs.block.size=$[256*1024*1024] /path/to/inputdata /path/to/inputdata-with-largeblocks的方式来将已经存在咋hdfs上的数据进行大块化。然后删除掉原先的文件。
    • 只 要每个task都运行至少30-40秒钟,就可以考虑将mapper数扩大,比如集群的map slots为100个,那么就不要将一个job的mapper设成101,这样前100个map能够并行完成,而最后一个map要在前100个 mapper结束后才开始,因此在reduce开始运行前,map阶段的时间几乎就要翻倍。
    • 尽量不要运行太多的reduce task。对大多数job来说,最好rduce的个数最多和集群中的reduce持平,或者比集群的 reduce slots小。这个对于小集群而言,尤其重要。


        深度分析如何在Hadoop中控制Map的数量

0
0
分享到:
评论
2 楼 Molisa 2014-03-21  
Molisa 写道
mapred.min.split.size指的是block数,不是字节数大小

我的说话有问题,是字节数据,最终会根据

max(minimumSize, min(maximumSize, blockSize))
and by default:
minimumSize < blockSize < maximumSize

计算出一个split size的大小,通常是一个block size的大小,比如64M或者128M
1 楼 Molisa 2014-03-21  
mapred.min.split.size指的是block数,不是字节数大小

相关推荐

    Hadoop MapReduce实现tfidf源码

    在Hadoop MapReduce中,我们通常将这个过程分为两个阶段:Map阶段和Reduce阶段。 Map阶段的主要任务是对输入的文档进行切分,生成词频键值对。对于每个文档,我们需要读取内容,将文档拆分成单词,并为每个单词计算...

    大数据 hadoop mapreduce 词频统计

    在MapReduce中,数据处理分为两个主要阶段:Map阶段和Reduce阶段。Map阶段将原始数据分解成小块,然后对每个小块进行并行处理;Reduce阶段则负责聚合Map阶段的结果,输出最终结果。 在这个"大数据Hadoop MapReduce...

    Java操作Hadoop Mapreduce基本实践源码

    总之,Java操作Hadoop MapReduce的基本实践涉及了Map和Reduce阶段的自定义逻辑、数据的分区和排序、以及Job的配置和提交。通过深入学习和实践,开发者可以利用Hadoop MapReduce解决大数据处理中的各种问题。

    hadoop mapreduce helloworld 能调试

    MapReduce 分为两个主要阶段:Map 阶段和 Reduce 阶段。Map 阶段将输入数据分割成键值对,然后应用用户定义的函数(Mapper)进行处理。Reduce 阶段则将 Map 阶段的结果进行聚合,再次应用用户定义的函数(Reducer)...

    提高hadoop的mapreduce job效率笔记

    除了上述参数,还有其他 Job 配置可以优化,如设置适当的`mapreduce.task.io.sort.mb`(排序缓冲区大小)和`mapreduce.reduce.shuffle.parallelcopies`(并行复制副本数),以及启用压缩以减少中间数据的存储空间。...

    Hadoop MapReduce入门

    通过这个入门示例,我们可以看到,Hadoop MapReduce入门并不复杂,但处理大数据需要考虑数据的组织方式、如何编写有效的Map和Reduce逻辑,以及在MapReduce框架下对数据如何进行高效处理。实际上,MapReduce框架会...

    hadoop mapreduce多表关联join多个job相互依赖传递参数

    - 这个应用程序很可能是一个示例,演示了如何在Hadoop MapReduce中实现多表关联并处理Job间的依赖和参数传递。它可能包括多个Job,每个Job负责一个或多个表的处理,并通过特定机制将结果传递给后续的Job。 5. **...

    java操作hadoop之mapreduce计算整数的最大值和最小值实战源码

    在大数据处理领域,Hadoop是不可或缺的一个开源框架,它提供了分布式存储(HDFS)和分布式计算(MapReduce)的能力。本教程将详细讲解如何使用Java编程语言操作Hadoop的MapReduce来计算整数序列中的最大值和最小值,...

    Hadoop MapReduce

    Hadoop MapReduce是一个用于处理大数据集的软件框架,它能够将应用程序以并行方式运行在成千上万的商用硬件节点上,同时保证了高可靠性与容错能力。它适用于处理多个TB级别的数据集。 在这个框架中,一个MapReduce...

    java操作hadoop之mapreduce分析年气象数据最低温度实战源码

    MapReduce分为两个主要阶段:Map阶段和Reduce阶段。Map阶段将输入数据分解成一系列键值对,然后对每个键值对执行特定的操作;Reduce阶段则接收Map阶段输出的结果,对相同键的值进行聚合,最终生成最终结果。 在这个...

    hadoop mapreduce

    MapReduce包含两个主要阶段:Map阶段和Reduce阶段,它们共同实现了数据的分布式处理。 Map阶段: 在这个阶段,原始数据被分割成多个键值对(key-value pairs),然后分布到集群的不同节点上进行处理。Map函数接收...

    基于Hadoop MapReduce的高校考研分数线统计分析项目代码+数据集.rar

    MapReduce是Hadoop的核心组件之一,它将大规模数据处理分解为两个主要阶段:Map(映射)和Reduce(规约)。Map阶段将原始数据分割并分配给多个工作节点处理,Reduce阶段则将Map的结果聚合,得出最终结果。 2. Map...

    远程调用执行Hadoop Map/Reduce

    例如,`org.apache.hadoop.mapred.MapTask`和`org.apache.hadoop.mapreduce.ReduceTask`分别对应Map和Reduce任务的实现,开发者可以通过阅读这些源码了解任务执行的详细流程。 7. **工具集成**:有许多开源工具可以...

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

    Hadoop作业调优是提升大数据处理效率的...通过理解这些参数的原理和作用,并结合具体作业的特性,可以针对性地进行调优,提升Hadoop作业的效率和性能。然而,调优是一个动态过程,需要不断监控和测试,以找到最佳配置。

    Hadoop MapReduce作业卡死问题的解决方法.docx

    在使用Hadoop MapReduce进行大规模数据处理的过程中,遇到了一个棘手的问题——部分MapReduce作业长时间卡死,严重影响了系统的运行效率和资源利用率。这类问题的出现不仅导致了Hadoop集群资源的长期占用,还使得...

    基于Hadoop MapReduce的短视频主播数据分析项目代码+数据集.rar

    MapReduce则是一种编程模型,它将大数据处理任务分解为两个阶段:Map阶段和Reduce阶段。Map阶段负责将原始数据分割并转化为键值对,Reduce阶段则对这些键值对进行聚合,生成最终结果。 在这个短视频主播的数据分析...

    Hadoop中的HDFS和Mapreduce

    - **用户接口**:MapReduce提供了两个主要的函数:`map` 和 `reduce`。用户需要实现这两个函数来定义数据处理的具体逻辑。 ```java map(in_key, in_value) -&gt; (out_key, intermediate_value) list reduce(out_...

Global site tag (gtag.js) - Google Analytics