提高hadoop的mapreduce job效率笔记之一(修改mapper和reducer数量)
2012-09-03 23:01
706 查看
[b]hadoop 的mapreduce 的作业在运行过程中常常碰到一些这样的情
况:[/b]
每一个map或者reduce只有30-40秒钟就结束
超 大规模的job 时,通常会需要大量的map和reduce的slots 支持,但是job运行起来后,running的map和reduce并没有沾满集群的可用slots
当几乎所有的map和 reducers都在调度系统 中运行着,此时却有 一个或者两个pending的map或者reduce,一直不跑,使得job一直无法正常结束。
对一 个job的map数和reduce数的设定对一个job的运行是非常重要的,并且非常简单。以下是一些[b]设 置 这几个值的经验总结:[/b]
如果job的每个map或者 reduce task的运行时间都只有30-40秒钟,那么就减少该job的map或者reduce数,每一个task(map|reduce)的setup和加入到 调度器中进行调度,这个中间的过程可能都要花费几秒钟,所以如果每个task都非常快就跑完了,就会在task的开始和结束的时候浪费太多的时间。JVM 的reuse方式也可以[b]解决 这个问题。[/b]
如 果某个input的文件 非常的大,比如 1TB,可以考虑将hdfs上的每个block size设大,比如设成256MB或者512MB,这样map和reduce的数据 可以减小。而且用户还可以通过命令 :
(比如设成256MB或者512MB,这样map和reduce的数据 可以减小 => 这里不是很明白)
只 要每个task都运行至少30-40秒钟,就可以考虑将mapper数扩大,比如集群的map slots为100个,那么就不要将一个job的mapper设成101,这样前100个map能够并行完成,而最后一个map要在前100个 mapper结束后才开始,因此在reduce开始运行前,map阶段的时间几乎就要翻倍。
尽量不要运行太多的reduce task。对大多数job来说,最好rduce的个数最多和集群中的reduce持平,或者比集群的 reduce slots小。这个对于小集群而言,尤其重要。
测试对比:
调 整运行参数(
动。整个job17分52秒完成,比使用原始配置的job的运行时间的两倍还多。
Ref: http://blog.csdn.net/ae86_fc/article/details/5284242
况:[/b]
每一个map或者reduce只有30-40秒钟就结束
超 大规模的job 时,通常会需要大量的map和reduce的slots 支持,但是job运行起来后,running的map和reduce并没有沾满集群的可用slots
当几乎所有的map和 reducers都在调度系统 中运行着,此时却有 一个或者两个pending的map或者reduce,一直不跑,使得job一直无法正常结束。
对一 个job的map数和reduce数的设定对一个job的运行是非常重要的,并且非常简单。以下是一些[b]设 置 这几个值的经验总结:[/b]
如果job的每个map或者 reduce task的运行时间都只有30-40秒钟,那么就减少该job的map或者reduce数,每一个task(map|reduce)的setup和加入到 调度器中进行调度,这个中间的过程可能都要花费几秒钟,所以如果每个task都非常快就跑完了,就会在task的开始和结束的时候浪费太多的时间。JVM 的reuse方式也可以[b]解决 这个问题。[/b]
如 果某个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上的数据进行大块化。然后删除掉原先的文件。
(比如设成256MB或者512MB,这样map和reduce的数据 可以减小 => 这里不是很明白)
只 要每个task都运行至少30-40秒钟,就可以考虑将mapper数扩大,比如集群的map slots为100个,那么就不要将一个job的mapper设成101,这样前100个map能够并行完成,而最后一个map要在前100个 mapper结束后才开始,因此在reduce开始运行前,map阶段的时间几乎就要翻倍。
尽量不要运行太多的reduce task。对大多数job来说,最好rduce的个数最多和集群中的reduce持平,或者比集群的 reduce slots小。这个对于小集群而言,尤其重要。
测试对比:
调 整运行参数(
-Dmapred.max.split.size=$[16*1024*1024]), 或者在配置文件中对将
mapred.max.split.size设置成$[16*1024*1024],hadoop 中的wordcount任务的mapper数就会受到用户控制。当运行这种配置的任务时,每个task都会在10秒钟之内运行完,而从 jobtracker的webui上可以看到cluster的总体情况和job的情况,其中可以看到,running的map数频繁的在0-24之间波
动。整个job17分52秒完成,比使用原始配置的job的运行时间的两倍还多。
Ref: http://blog.csdn.net/ae86_fc/article/details/5284242
相关文章推荐
- 提高hadoop的mapreduce job效率笔记之二(尽量的用Combiner)
- Hadoop实战:使用Combiner提高Map/Reduce程序效率
- 康奈尔大学做笔记方法,让效率提高100%@
- Win8.1桌面路径如何修改?想减少桌面文件数量提高开关机速度
- Hadoop的Mapper和Reducer如何共享变量
- Hadoop-2.4.1学习之Mapper和Reducer
- Hadoop 使用Combiner提高Map/Reduce程序效率
- 康奈尔大学做笔记的方法,从此学习工作效率提高100%
- Hadoop开发周期(二):编写mapper和reducer程序
- 康奈尔大学做笔记的方法,从此学习工作效率提高100%
- Hadoop实战:使用Combiner提高Map/Reduce程序效率
- Hadoop(17) MR 决定Mapper数量因素
- 【收藏学习笔记】使用supervisor提高node.js调试效率
- Cocos2d-X 学习笔记 20 利用CCSpriteBatchNode提高渲染效率
- hadoop中map/reduce编程中关于mapper和reducer的Format问题
- Ubuntu下修改sources.list文件,提高安装效率的方法
- hadoop 多个Mapper和Reducer的Job
- Hadoop-2.4.1学习之Mapper和Reducer
- 新媒体运营:如何提高原创质量和数量及变现效率
- Hadoop工作流--ChainMapper/ChainReducer?(三)