簡體   English   中英

即使映射器和化簡器的數量設置為 1,為什么 hive 仍將 2 個部分文件寫入 hdfs

[英]Why is hive writing 2 part files to hdfs even though number of mappers and reducers is set to 1

我有一個配置單元插入覆蓋查詢 - set mapred.map.tasks=1; set mapred.reduce.tasks=1; insert overwrite table staging.table1 partition(dt) select * from testing.table1; 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 個文件?

我正在使用直線客戶端和配置單元 2.1.1-cdh6.3.1

你執行的insert查詢是 map-only,這意味着沒有 reduce 任務。 所以沒有必要設置mapred.reduce.tasks

此外,mapper 的數量由拆分的數量決定,因此設置mapred.map.tasks不會改變 mapper 的並行度。

至少有兩種可行的方法可以將生成的文件數強制為 1:

  1. 強制執行文件合並后作業。
    hive.merge.mapfiles設置為 true。 嗯,默認值已經是真的了。
    減少hive.merge.smallfiles.avgsize以實際觸發合並。
    hive.merge.size.per.task增加到足夠大作為合並后的目標大小。
  2. 配置映射器的文件合並行為以減少映射器的數量。
    確保hive.input.format設置為org.apache.hadoop.hive.ql.io.CombineHiveInputFormat ,這也是默認值。
    然后增加mapreduce.input.fileinputformat.split.maxsize以允許更大的拆分大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM