![](/img/trans.png)
[英]Controling HDFS Replication ,mappers number and Reducers identification
[英]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:
hive.merge.mapfiles
設置為 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
以允許更大的拆分大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.