[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 ...
随机推荐
- 题解 UVA1193 Radar Installation
原题 PDF OJ 思路 分析 因为半径d已经确定,所以对于每个点,我们可以算出它在x 轴上的覆盖位置线段LR,如图. 此问题便转为: 对于 n 个区间,每个区间内至少有1个点,求最少点数. 算法 我 ...
- NameBeta - 多家比价以节省咱的域名注册成本
共收录 1584 种顶级域名,汇集互联网上 29 家知名域名注册商,每日更新价格信息 有的域名还可以查出到期时间点我前往官网 NameSilo1美元优惠码:whatz
- NIO入门之缓冲区Buffer
缓存区 Buffer 是数据容器 ByteBuffer 可以存储除了 boolean 以外的其他 7 种Java基本数据类型,如 getInt.putInt Buffer 是抽象类,它有除了 Bool ...
- 金字塔卷积:Pyramidal Convolution
论文地址:https://arxiv.org/pdf/2006.11538.pdf github:https://github.com/iduta/pyconv 作者认为,当前CNN主要存在两个不足: ...
- Google免费新书-《构建安全&可靠的系统》
前段时间riusksk在公众号分享的Google安全团队的新书,好书,全英原版,开源免费. 免费下载地址:https://static.googleusercontent.com/media/land ...
- SQLyog无操作一段时间后重新操作会卡死问题(解决办法)
这种是因为一段时间不操作后,服务器将空闲连接丢弃了,而客户端(sqlyog)不知道,导致长时间无响应,而超时之后,sqlyog 使用了新的连接,所以又可以顺畅操作了. 将会话空闲时间默认改为自定义,填 ...
- Day16_授权中心
学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"乐优商城"获取视频和教程资料! b站在线视频 总结 1 ...
- Python File writelines() 方法
概述 writelines() 方法用于向文件中写入一序列的字符串.高佣联盟 www.cgewang.com 这一序列字符串可以是由迭代对象产生的,如一个字符串列表. 换行需要制定换行符 \n. 语法 ...
- 解析laravel之redis简单模块操作
入门级操作 普通 set / get 操作: set操作,如果键名存在,则会覆盖原有的值: $redis = app('redis.connection'); $redis->set('libr ...
- C++中unordered_map几种按键查询比较
unorder_map有3种常见按键查值方法. 使用头文件<unordered_map>和<iostream>,以及命名空间std. 第一种是按键访问.如果键存在,则返回键对应 ...