【问题标题】:how to decrease the number of mapper in hive while the file is bigger than block size?当文件大于块大小时如何减少配置单元中映射器的数量?
【发布时间】:2017-04-28 06:54:08
【问题描述】:

伙计们 我在hive中有一张表,有720多个分区,每个分区有400多个文件,文件平均大小为1G。

现在我执行以下 SQL: 插入覆盖表 test_abc select * from DEFAULT.abc A WHERE A.P_HOUR ='2017042400' ;

这个分区(P_HOUR ='2017042400')有 409 个文件。当我提交这个 sql 时,我得到了以下输出

INFO : 由于没有 reduce 运算符,reduce 任务的数量设置为 0 信息:拆分数:409

INFO : 提交作业令牌:job_1482996444961_9384015

我在谷歌上搜索了很多文档来找到如何减少映射器的数量,很多文档在文件很小的时候解决了这个问题。 我在直线中尝试了以下设置,但不起作用 ---------------第一次

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;

-----------------第二次

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 版本是 Hadoop 2.7.2 由 root 于 2016 年 7 月 11 日 10:58:45 编译 蜂巢版本是 连接到:Apache Hive(版本 1.3.0) 驱动:Hive JDBC(1.3.0版)

【问题讨论】:

  • (1) hive.execution.engine? (2)DEFAULT.abc文件格式?
  • hive.execution.engine=mr SerDe 库:org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe 输入格式:org.apache.hadoop.mapred.TextInputFormat 输出格式:org.apache.hadoop。 hive.ql.io.HiveIgnoreKeyTextOutputFormat
  • 你能确认你的执行引擎吗?是 tez 还是 mr ?
  • 执行引擎是mr hive.execution.engine=mr

标签: hive mapper


【解决方案1】:

除了您帖子中的设置

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

hive.hadoop.supports.splittable.combineinputformat
- 默认值:假
- 添加于:Hive 0.6.0
是否合并小型输入文件,以便生成更少的映射器。

【讨论】:

  • @lance - 我建议,如果它适合你,请接受答案。
  • @SandeepSingh 是的,应该是。谢谢你提醒我。
【解决方案2】:

MRv2 使用CombineInputFormat,而 Tez 使用分组拆分来确定 Mapper。如果您的执行引擎是 mr 并且您想减少 Mappers 的使用:

mapreduce.input.fileinputformat.split.maxsize=xxxxx

如果指定了maxSplitSize,则同一节点上的块将合并为一个拆分。然后将剩余的块与同一机架中的其他块组合。如果未指定maxSplitSize,则将来自同一机架的块合并到一个拆分中;没有尝试创建节点本地拆分。如果maxSplitSize等于块大小,那么这个类类似于Hadoop中的默认拆分行为

如果你的执行引擎是mr,这个link 可以帮助控制Hive 中的Mapper

如果您的执行引擎是 tez 并且您愿意控制 Mappers,则使用:

set tez.grouping.max-size = XXXXXX;

这是一个很好的阅读 reference 在 Hive 中的并行性 tez 执行引擎,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    • 2015-05-24
    • 1970-01-01
    • 2013-07-12
    • 2020-10-10
    相关资源
    最近更新 更多