分享

以HBase表作为MapReduce的输入,如何控制分片的大小,增加map task的数量

出河种花 发表于 2017-5-15 21:29:31 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 4 10646
       环境说明:集群有4台机器,blocksize设置为128Mb,实验数据有541Mb(HBase表)。
       问题:以HBase表作为MapReduce的输入,运行MapReduce 看到number of splits:2,共有4个Map(理论上不是应该有5个吗?疑惑)。因为map中的用户代码效率较低,所以每个map运行的时间会很长,我想通过增加分片的数目,最后控制每个map任务运行时间在1分钟左右。
       我在网上查找了控制map任务数量的文章,了解到1、可以通过将blocksize设置为较小值来增加分片的数量,但我认为这样做不是很好,2、通过设置以下这变量来控制,不过我试了没有效果                 
                                         conf.set("mapreduce.input.fileinputformat.split.minsize", "1");
                                         conf.set("mapreduce.input.fileinputformat.split.maxsize", "10");
       希望大神和遇到过这问题的人可以指点指点在下,或者指出我的思路是不是错。谢谢大家!





已有(4)人评论

跳转到指定楼层
langke93 发表于 2017-5-15 22:16:13
分片是系统控制的。一般来说,不要修改。如果想测试,可以尝试边界测试。比如:minSize为60M最大为64M。当然不能大于block,你可以测试看看。是否会出错。

下面是分片的规则:
  FileInputFormat.class中的getSplits()方法指定:
long splitSize = computeSplitSize(goalSize, minSize, blockSize);
computeSplitSize:
Math.max(minSize, Math.min(goalSize, blockSize));
其中goalSize为“InputFile大小”/“我们在配置文件中定义的mapred.map.tasks”值,minsize为mapred.min.split.size,blockSize为64,所以,这个算式为取分片大小不大于block,并且不小于在mapred.min.split.size配置中定义的最小Size。
当某个分块分成均等的若干分片时,会有最后一个分片大小小于定义的分片大小,则该分片独立成为一个分片。



回复

使用道具 举报

easthome001 发表于 2017-5-15 22:20:07
可以尝试在提交的时候设置下:
例如下面
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount -D mapreduce.input.fileinputformat.split.maxsize=1 /wordcount/input /wordcount/output/result4  
回复

使用道具 举报

出河种花 发表于 2017-5-15 22:26:05
easthome001 发表于 2017-5-15 22:20
可以尝试在提交的时候设置下:
例如下面
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples- ...

我刚试了这个例子,有效果,明天再试试修改代码
回复

使用道具 举报

出河种花 发表于 2017-5-15 22:28:48
langke93 发表于 2017-5-15 22:16
分片是系统控制的。一般来说,不要修改。如果想测试,可以尝试边界测试。比如:minSize为60M最大为64M。当 ...

谢谢 我试试看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条