[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 ...
随机推荐
- 太实用了!自己动手写软件——我们的密码PJ器终于完成了
之前我们完成了密码破解工具的界面,今天我们来看看功能实现吧. 目录 编码 提交——功能实现 开始破解——功能实现 读取密码字典 选择协议并执行破解动作 POP3协议的破解函数 IMAP协议的破解函数 ...
- JAVA 实现将多目录多层级文件打成ZIP包后保留层级目录下载 ZIP压缩 下载
将文件夹保留目录打包为 ZIP 压缩包并下载 上周做了一个需求,要求将数据库保存的 html 界面取出后将服务器下的css和js文件一起打包压缩为ZIP文件,返回给前台:在数据库中保存的是html标签 ...
- 题解 洛谷 P4098 【[HEOI2013]ALO 】
考虑原序列中的每一个值作为构成最终答案的那个次大值,那么其所在的合法区间最大时,其对答案的贡献最大. 一个值作为最大值时有两个合法的最大区间,一个是左边第二个比其大的位置和右边第一个比其大的位置构成的 ...
- html地图定位
利用高德地图api实现简单的地图功能,包括定位,地图缩放,搜索,列表展示等等基础功能 <!doctype html> <html> <head> <meta ...
- ELK5.6.4+Redis+Filebeat+Nginx(CentOS7.4)
下载地址: Elasticsearhc: https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.4.tar.gz ...
- 【扩展推荐】Intervention/image 图片处理
Intervention/image 是为 Laravel 定制的图片处理工具, 它提供了一套易于表达的方式来创建.编辑图片. 一.环境要求 二.安装及配置 下载地址:https://packagis ...
- .Net微服务实战之CI/CD
系列文章 .Net微服务实战之技术选型篇 .Net微服务实战之技术架构分层篇 .Net微服务实战之DevOps篇 .Net微服务实战之负载均衡(上) 相关源码:https://github.com/S ...
- 自定义bind
Function.prototype.mybind = function (context, ...args1) { // 判断是否为函数 if (typeof this !== 'function' ...
- pandas_处理异常值缺失值重复值数据差分
# 处理异常值缺失值重复值数据差分 import pandas as pd import numpy as np import copy # 设置列对齐 pd.set_option("dis ...
- 10-Pandas之数据融合(pd.merge()、df.join()、df.combine_first()详解)
一.pd.merge() pd.merge()的常用参数 参数 说明 left 参与合并的左侧DataFrame right 参与合并的右侧DataFrame how 如何合并.值为{'left',' ...