日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hive小文件合并

發布時間:2023/12/20 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hive小文件合并 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Hive遷移數據時發現大量小文件,嚴重影響Hive執行效率,在這里記錄下小文件合并的問題。

小文件產生的原因

執行MapReduce任務時,通過會作一些優化,比如增加Reduce并行度來提升計算效率。而Reduce的增多意味著輸出結果文件的增多,所以會產生小文件問題。

?

小文件產生的問題

NameNode存儲元數據信息,包括HDFS的抽象目錄樹結構,存儲數據和block分塊對應關系、位置、大小等,啟動時會加載到內存。每個存儲對象大約150字節,所以當文件達到千萬級時,內存中的元數據達到3G以上,NameNode的性能就會受影響。

HDFS文件讀寫時,會先向NameNode獲取元數據信息,再通過元數據找到block對應的DataNode進行文件讀寫,大量的小文件會導致HDFS的讀寫受到影響。

執行Hive任務時,每個文件執行一個MapTask,小文件數據過多,會導致大量MapTask的不斷啟動和初始化,這樣時間遠遠大于邏輯處理時間,導致Hive任務時間太長,造成資源浪費,甚至oom。執行Hive任務時,如果發現數據量不大但是任務數很多時,應該注意在Map的輸入進行小文件合并。

?

Hive優化方式

1. 輸入合并,也就是在Hive讀取文件時進行小文件合并,減少Map數量,。

2. 輸出合并,在MapReduce輸出結果時進行小文件合并。

3. JVM重用,一個Container中運行多個MapTask,減少Container開啟和注銷時間。

?

輸入合并

# 設置Hive輸入,執行map前進行小文件合并 # 設置后,DataNode上多個小文件會進行合并,合并文件數由mapred.max.split.size決定 set hive.input.format=org.apache.hadoop.hive.al.io.CombineHiveInputFormat;# 每個MapTask最大文件大小 set mapred.max.split.size=256000000;# 節點上最小分片大小 # 如果輸入文件在一個節點上多個block的總和,大于這個值則創建一個split,每個節點最多開啟一個split # 小于則將塊用于機架設置值進行計算 set mapred.min.split.size.per.node=100000000;# 機架上最小分片大小,決定不同機架的DataNode上文件是都進行合并 # 對同一機架上多個DataNode的小于節點設置值的塊總和進行計算,大于這個值創建split # 小于則進行多個機架計算 set mapred.min.split.size.per.rack=100000000;

輸出合并

# map結束時合并小文件,默認開啟 set hive.merge.mapredfiles=true;# 輸出結果時合并,默認關閉 set hive.merge.mapfiles=true;# 小于這個值會開啟一個獨立的mapreduce任務進行小文件合并,默認16m set hive.merge.smallfiles.avgsize=16000000;## 合并后的文件大小,默認256m,推薦128m,一個hdfs分塊的大小 set hive.merge.size.per.task=256000000;

JVM重用

set mapred.job.jvm.num.tasks

?

CDH中Hive小文件合并設置

輸入時設置 Hive -> hive-site.xml 客戶端

輸出時設置 Hive -> 搜索 merge

?

?

總結

以上是生活随笔為你收集整理的Hive小文件合并的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。