hadoop mapreduce程序中哪些因素会影响产生的map个数

 我来答
匿名用户
2017-09-20
展开全部
job.split中包含split的个数由FileInputFormat.getSplits计算出,方法的逻辑如下:1.读取参数mapred.map.tasks,这个参数默认设置为0,生产系统中很少修改。2.计算input文件的总字节数,总字节数/(mapred.map.tasks==0?1:mapred.map.tasks)=goalsize3.每个split的最小值minSize由mapred.min.split.size参数设置,这个参数默认设置为0,生产系统中很少修改。4.调用computeSplitSize方法,计算出splitsize=Math.max(minSize,Math.min(goalSize,blockSize)),通常这个值=blockSize,输入的文件较小,文件字节数之和小于blocksize时,splitsize=输入文件字节数之和。5.对于input的每个文件,计算split的个数。a)文件大小/splitsize>1.1,创建一个split,这个split的字节数=splitsize,文件剩余字节数=文件大小-splitsizeb)文件剩余字节数/splitsize<1.1,剩余的部分作为一个split举例说明:1.input只有一个文件,大小为100M,splitsize=blocksize,则split数为2,第一个split为64M,第二个为36M2.input只有一个文件,大小为65M,splitsize=blocksize,则split数为1,split大小为65M3.input只有一个文件,大小为129M,splitsize=blocksize,则split数为2,第一个split为64M,第二个为65M(最后一个split的大小可能超过splitsize)4.input只有一个文件,大小为20M,splitsize=blocksize,则split数为1,split大小为20M5.input有两个文件,大小为100M和20M,splitsize=blocksize,则split数为3,第一个文件分为两个split,第一个split为64M,第二个为36M,第二个文件为一个split,大小为20M6.input有两个文件,大小为25M和20M,splitsize=blocksize,则split数为2,第一个文件为一个split,大小为25M,第二个文件为一个split,大小为20M假设一个job的input大小固定为100M,当只包含一个文件时,split个数为2,maptask数为2,但当包含10个10M的文件时,maptask数为10。下面来分析reducetask,纯粹的mapreducetask的reducetask数很简单,就是参数mapred.reduce.tasks的值,hadoop-site.xml文件中和mapreducejob运行时不设置的话默认为1。在HIVE中运行sql的情况又不同,hive会估算reducetask的数量,估算方法如下:通常是ceil(input文件大小/1024*1024*1024),每1GB大小的输入文件对应一个reducetask。特殊的情况是当sql只查询count(*)时,reducetask数被设置成1。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式