伙计们,我在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解决了文件小的时候这个问题。我试过下面的直线设置,但没有工作
4条答案
按热度按时间pdsfdshx1#
--------第一次
q1qsirdb2#
除了你帖子里的设置
hive.hadoop.supports.splittable.combineinputformat
-默认值:false
-添加到:hive 0.6.0
是否合并小的输入文件以便生成更少的Map器。
qxsslcnc3#
mrv2使用
CombineInputFormat
,而tez使用分组拆分来确定Map器。如果你的执行引擎mr
您希望减少Map绘制者使用:如果
maxSplitSize
则将同一节点上的块合并为单个拆分。剩余的块然后与同一机架中的其他块合并。如果maxSplitSize
如果未指定,则来自同一机架的块以单个拆分方式组合;未尝试创建节点本地拆分。如果maxSplitSize
等于块大小,则该类类似于hadoop中的默认拆分行为如果您的执行引擎运行正常,此链接有助于控制配置单元中的Map器
mr
如果你的执行引擎tez
您可以控制Map程序,然后使用:这里是一个很好的参考资料,为Hive的并行性
tez
执行引擎,iszxjhcz4#
-------第二次
我的hadoop版本是2016年7月11日由root编译的hadoop 2.7.2 10:58:45 hive版本连接到:apache hive(版本1.3.0)驱动程序:hive jdbc(版本1.3.0)