[Hadoop] mapper数量的控制
确定map任务数时依次优先参考如下几个原则:
1) 每个map任务使用的内存不超过800M,尽量在500M以下
比如处理256MB数据需要的时间为10分钟,内存为800MB,此时如果处理128MB时,内存可以减小为400MB,则选择每一个map的处理数据量为128MB
2) 每个map任务运行时间控制在大约20分钟,最好1-3分钟
比如处理256MB数据需要的时间为30分钟,内存为200MB,则应该考虑减小map的计算时间,比如将每一个map的处理数据量设置为128MB,将时间减小为15分钟。
3) 每个map任务处理的最大数据量为一个HDFS块大小(目前为256MB),一个map任务处理的输入不能跨文件
比如指定map任务数为N,输入数据总量为S。如果S / N > 256MB,平台会自动增加map任务数使每个map任务处理数据量不超过256MB;如果S / N < 256MB,平台认为每个map任务最多处理S/N大小的数据,但是一个map任务的输入不能跨文件,所以可能有的文件切分到最后一部分时较小于S/N,那么下一个map任务的输入小于平均,最终的map任务数大于N。最终实际运行的map任务数可以在JobTracker监控页面查看。
4) map任务总数不超过平台可用的任务槽位
如果在一个map处理256MB时就能将平台可用的任务槽位占满,此时不应该再增加map任务数。
~ 《Hadoop-v2_Streaming 使用手册》
可以通过mapred.max.split.size(ex. =512000000)调节逻辑块的大小。
block size和split size的区别
block size是hdfs中每个数据块的物理大小,比如64MB, 128MB
一般来说,mapper在split时默认按照block size来分的,那么mapper的个数就是 data_size / block_size 向上取整。
split size是可以人为指定的逻辑块的大小,当希望mapper数量小一些的时候,可以把split size指定的大一些,这样 data_size / split_size 向上取整之后就是新的mapper个数。
为什么要调整mapper的个数
每个mapper相当于可以执行并行计算的工人,mapper多一些,就多一些数据被并行计算,这样看起来似乎mapper多一些运行的更快;
但是要考虑到由于集群资源限制,有时候并不是设置的所有mapper都可以并行执行,是先执行一些mapper,完成一个mapper再调度新的mapper,这样就有任务调度时候的时间开销。
(1) 如果每个mapper分到的数据比较小,那么这个mapper执行是比较快的,比如几十秒,那么hadoop就要去调度执行其他的mapper,这里有个调度任务的时间。
如果mapper数量非常大,而每个mapper执行时间又很短,那么可能很大一部分时间不是用于执行任务了,而是用于调度了,这样总的运行时间就会较长,不够高效。
看上面的tip提到的每个mapper运行时间的建议,一般可以通过调节split size的大小,即控制给每个mapper的数据大小,来调节每个mapper的运行时间,进而提高运行效率。
(2) 如果每个mapper分到的数据比较大,一方面是内存占用比较大,容易爆内存;另一方面,如果单个mapper运行时间过长,这个mapper压力是比较大的,如果可以多设置一些mapper,可以更好的实现并行运算,进而提高效率。
[Hadoop] mapper数量的控制的更多相关文章
- MapReduce :基于 FileInputFormat 的 mapper 数量控制
本篇分两部分,第一部分分析使用 java 提交 mapreduce 任务时对 mapper 数量的控制,第二部分分析使用 streaming 形式提交 mapreduce 任务时对 mapper 数量 ...
- Hadoop-2.4.1学习之怎样确定Mapper数量
MapReduce框架的优势是能够在集群中并行运行mapper和reducer任务,那怎样确定mapper和reducer的数量呢,或者说怎样以编程的方式控制作业启动的mapper和reducer数量 ...
- MR 的 mapper 数量问题
看到群里面一篇文章涨了贱识 http://www.cnblogs.com/xuxm2007/archive/2011/09/01/2162011.html 之前关注过 reduceer 的数量问题,还 ...
- Hadoop生态圈-kafka事务控制以及性能测试
Hadoop生态圈-kafka事务控制以及性能测试 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- 【Hadoop】三句话告诉你 mapreduce 中MAP进程的数量怎么控制?
1.果断先上结论 1.如果想增加map个数,则设置mapred.map.tasks 为一个较大的值. 2.如果想减小map个数,则设置mapred.min.split.size 为一个较大的值. 3. ...
- hadoop之 map个数控制
hadooop提供了一个设置map个数的参数mapred.map.tasks,我们可以通过这个参数来控制map的个数.但是通过这种方式设置map的个数,并不是每次都有效的.原因是mapred.map. ...
- 大数据调错系列之hadoop在开发工具控制台上打印不出日志的解决方法
(1)在windows环境上配置HADOOP_HOME环境变量 (2)在eclipse上运行程序 (3)注意:如果eclipse打印不出日志,在控制台上只显示 1.log4j:WARN No appe ...
- hadoop之 reduce个数控制
1.参数变更1.x 参数名 2.x 参数名 mapred.tasktracker.red ...
- hadoop mapper reducer
Local模式运行MR流程------------------------- 1.创建外部Job(mapreduce.Job),设置配置信息 2.通过jobsubmitter将job.xml + sp ...
随机推荐
- vue : 对 vue-class-component 的个人理解
vue-class-component 是 vue 的官方库,作用是用类的方式编写组件. 这种编写方式可以让.vue文件的js域结构更扁平,并使vue组件可以使用继承.混入等高级特性. 简单的示例: ...
- three.js 数学方法之Vector3
今天郭先生来说一说three.js的Vector3,该类表示的是一个三维向量(3D vector). 一个三维向量表示的是一个有顺序的.三个为一组的数字组合(标记为x.y和z),可被用来表示很多事物, ...
- Python 实现将numpy中的nan和inf,nan替换成对应的均值
nan:not a number inf:infinity;正无穷 numpy中的nan和inf都是float类型 t!=t 返回bool类型的数组(矩阵) np.count_nonzero( ...
- 手把手教你基于C#开发WinCC语音报警插件「附源代码」
写在前面 众所周知,WinCC本身是可以利用C脚本或者VBS脚本来做语音报警,但是这种方式的本质是调用已存在的音频文件,想要实现实时播报报警信息是不行的,灵活性还不够,本文主要介绍基于C#/.NET开 ...
- css中的名词
用到的单词 current 当前 hover 悬停 selected 挑选 disabled 禁用 focus 得到焦点 blur 失去焦点 checked 勾选 success 成功 error 出 ...
- 【Python】Async异步等待简单例子理解
import time def run(coroutine): try: print("") coroutine.send(None) except StopIteration a ...
- Bug--Mybatis报错:There is no getter for property named 'id' in 'class java.lang.Integer'
Mybatis 添加@Param("")注释就可以了
- IO流——Properties类、序列化流、反序列化流、打印流、commons-IO
一. Properties类 1. Properties类介绍 Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符串 ...
- 远光武汉研发中心区块链事业部Java面试总结
面试在约定的时间准时进行,也是采用腾讯会议远程面试的方式.但是这是我第一次遇到面试官未打开摄像头的情况,后面经过沟通,双方都打开摄像头进行交流. 之前了解这个岗位主要是区块链相关的Java开发,所以事 ...
- Python爆火的原因与未来|内附Python学习书籍大礼包无偿领取|
从12年到20年,python以肉眼可见的趋势超过了java,成为了当今It界人人皆知的编程语言. python为什么这么火? 网络编程语言搜索指数 适合初学者 Python具有语法简单.语句清晰的特 ...