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

浮夸8498
2013-10-12 · TA获得超过3753个赞
知道小有建树答主
回答量:996
采纳率:0%
帮助的人:737万
展开全部
numSplits:来自job.getNumMapTasks(),即在job启动时用org.apache. Hadoop .mapred.JobConf.setNumMapTasks(int n)设置的值,给M-R框架的Map数量的提示。 goalSize:是输入总大小与提示Map task数量的比值,即期望每个Mapper处理多少的数据,仅仅是期望,具体处理的数据数由下面的computeSplitSize决定。 minSplitSize:默认为1,可由子类复写函数protected void setMinSplitSize(long minSplitSize) 重新设置。 一般情况下,都为1,特殊情况除外。 minSize:取的1和mapred.min.split.size中较大的一个。 blockSize:HDFS的块大小,默认为64M,一般大的HDFS都设置成128M。 splitSize:就是最终每个Split的大小,那么Map的数量基本上就是totalSize/splitSize。 接下来看看computeSplitSize的逻辑: 首先在goalSize(期望每个Mapper处理的数据量)和HDFS的block size中取较小的,然后与mapred.min.split.size相比取较大的。 有了2的分析,下面调整Map的数量就很容易了。 3.1 减小Map-Reduce job 启动时创建的Mapper数量 当处理大批量的大数据时,一种常见的情况是job启动的mapper数量太多而超出了系统限制,导致Hadoop抛出异常终止执行。解决这种异常的思路是减少mapper的数量。具体如下: 3.1.1 输入文件size巨大,但不是小文件 这种情况可以通过增大每个mapper的input size,即增大minSize或者增大blockSize来减少所需的mapper的数量。增大blockSize通常不可行,因为当HDFS被hadoop namenode -format之后,blockSize就已经确定了(由格式化时dfs.block.size决定),如果要更改blockSize,需要重新格式化HDFS,这样当然会丢失已有的数据。所以通常情况下只能通过增大minSize,即增大mapred.min.split.size的值。 3.1.2 输入文件数量巨大,且都是小文件 所谓小文件,就是单个文件的size小于blockSize。这种情况通过增大mapred.min.split.size不可行,需要使用FileInputFormat衍生的CombineFileInputFormat将多个input path合并成一个InputSplit送给mapper处理,从而减少mapper的数量。具体细节稍后会更新并展开。 3.2 增加Map-Reduce job 启动时创建的Mapper数量
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
迈杰
2024-11-30 广告
RNA-seq数据分析是转录组研究的核心,包括数据预处理、序列比对、定量分析、差异表达分析、功能注释和可视化等步骤。数据预处理主要是质量控制和去除低质量序列。序列比对使用HISAT2、STAR等工具将reads比对到参考基因组。定量分析评估... 点击进入详情页
本回答由迈杰提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式