gpt4 book ai didi

hadoop - 即使将映射器和化简器的数量设置为1,为什么配置单元仍将2个零件文件写入hdfs

转载 作者:行者123 更新时间:2023-12-02 19:46:58 24 4
gpt4 key购买 nike

我有一个配置单元插入覆盖查询-set mapred.map.tasks=1; set mapred.reduce.tasks=1; insert overwrite table staging.table1 partition(dt) select * from testing.table1;
在检查HDFS目录中的staging.table1时,我看到创建了2个零件文件。

2019-12-25 02:25 /data/staging/table1/dt=2019-12-24/000000_0
2019-12-25 02:25 /data/staging/table1/dt=2019-12-24/000001_0

为什么创建2个文件?

我正在使用beeline客户端和 hive 2.1.1-cdh6.3.1

最佳答案

您执行的insert查询是仅映射的,这意味着没有reduce任务。因此,没有必要设置mapred.reduce.tasks

同样,映射器的数量由分割数决定,因此设置mapred.map.tasks不会改变映射器的并行性。

至少有两种可行的方法可以将文件总数强制为1:

  • 强制执行发布作业以进行文件合并。
    hive.merge.mapfiles设置为true。好吧,默认值已经为true。
    减少hive.merge.smallfiles.avgsize以实际触发合并。
    合并后,将hive.merge.size.per.task增大为足够大的目标大小。
  • 配置映射器的文件合并行为以减少映射器的数量。
    确保将hive.input.format设置为org.apache.hadoop.hive.ql.io.CombineHiveInputFormat,这也是默认设置。
    然后增加mapreduce.input.fileinputformat.split.maxsize以允许更大的拆分大小。
  • 关于hadoop - 即使将映射器和化简器的数量设置为1,为什么配置单元仍将2个零件文件写入hdfs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59492366/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com