当文件大于块大小时,如何减少配置单元中Map器的数量?

u59ebvdq  于 2021-06-26  发布在  Hive
关注(0)|答案(4)|浏览(374)

伙计们,我在hive中有一个表,它有720多个分区,每个分区有400多个文件,文件的平均大小是1g。
现在我执行以下sql:insert overwrite table test\u select*from default. a where a.p\u hour='2017042400';
这个分区(p\u hour='2017042400')有409个文件。当我提交这个sql时,我得到了以下输出
信息:由于没有reduce运算符,reduce任务数设置为0信息:reduce任务数splits:409
信息:提交作业令牌:作业\u 148299644961 \u 9384015
我用google搜索了很多doc来寻找如何减少mapper的数量,很多doc解决了文件小的时候这个问题。我试过下面的直线设置,但没有工作

pdsfdshx

pdsfdshx1#

--------第一次

set mapred.min.split.size =5000000000;
set mapred.max.split.size =10000000000;
set mapred.min.split.size.per.node=5000000000;
set mapred.min.split.size.per.rack=5000000000;
q1qsirdb

q1qsirdb2#

除了你帖子里的设置

set hive.hadoop.supports.splittable.combineinputformat=true;

hive.hadoop.supports.splittable.combineinputformat
-默认值:false
-添加到:hive 0.6.0
是否合并小的输入文件以便生成更少的Map器。

qxsslcnc

qxsslcnc3#

mrv2使用 CombineInputFormat ,而tez使用分组拆分来确定Map器。如果你的执行引擎 mr 您希望减少Map绘制者使用:

mapreduce.input.fileinputformat.split.maxsize=xxxxx

如果 maxSplitSize 则将同一节点上的块合并为单个拆分。剩余的块然后与同一机架中的其他块合并。如果 maxSplitSize 如果未指定,则来自同一机架的块以单个拆分方式组合;未尝试创建节点本地拆分。如果 maxSplitSize 等于块大小,则该类类似于hadoop中的默认拆分行为
如果您的执行引擎运行正常,此链接有助于控制配置单元中的Map器 mr 如果你的执行引擎 tez 您可以控制Map程序,然后使用:

set tez.grouping.max-size = XXXXXX;

这里是一个很好的参考资料,为Hive的并行性 tez 执行引擎,

iszxjhcz

iszxjhcz4#

-------第二次

set mapreduce.input.fileinputformat.split.minsize =5000000000;
set mapreduce.input.fileinputformat.split.maxsize=10000000000;
set mapreduce.input.fileinputformat.split.minsize.per.rack=5000000000;
set mapreduce.input.fileinputformat.split.minsize.per.node=5000000000;

我的hadoop版本是2016年7月11日由root编译的hadoop 2.7.2 10:58:45 hive版本连接到:apache hive(版本1.3.0)驱动程序:hive jdbc(版本1.3.0)

相关问题