[英]How merge files in Hive partitioned and bucketed files into one big file?
[英]Hive 0.14 on Tez : one file per insert, even with hive.merge. activated
每隔15分鍾,我需要將數據插入存儲為ORC的不同表中並匯總值。 那些INSERT使用動態分區。 每個INSERT都會在分區中創建一個新文件,這會減慢聚合查詢的速度。 我在網上搜索,發現了與此案有關的一些主題。
所以我在hive-site.xml上添加了這些設置:
hive.merge.mapfiles =true;
hive.merge.mapredfiles =true;
hive.merge.tezfiles = true
hive.merge.smallfiles.avgsize=256000000;
但是即使有這些設置,每個插入也會在每個分區上創建一個新文件,並且文件不會合並。
有人對我如何解決此問題有想法嗎?
我的群集是Azure HDInsight群集3.2,具有Hive 0.14,Tez 0.5.2。 我的插入查詢是這樣的:
INSERT INTO TABLE measures PARTITION(year, month, day)
SELECT area,
device,
date,
val,
year,
month,
day
FROM stagingmeasures
DISTRIBUTE BY year, month, day;
提前致謝
為目標表創建一個交換表(如下所示),以便將所有小文件合並為一個文件。 刪除原始表,然后將交換表重命名為原始表。
每天執行一次。
CREATE TABLE swap_measures SELECT * FROM measures;
DROP TABLE measures;
ALTER TABLE swap_measures RENAME TO measures;
如果您的目標是使用ORC格式直接流式傳輸到Hive,請查看下面的鏈接以了解有關Hive流式API的更多信息
https://cwiki.apache.org/confluence/display/Hive/Streaming+Data+Ingest
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.