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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Hive小文件问题:如何产生、造成影响、解放办法

發布時間:2024/7/23 编程问答 69 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hive小文件问题:如何产生、造成影响、解放办法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、小文件是如何產生的

1.動態分區插入數據,產生大量的小文件,從而導致map數量劇增。

2.reduce數量越多,小文件也越多(reduce的個數和輸出文件是對應的)。

3.數據源本身就包含大量的小文件。

二、小文件問題的影響

1.從Hive的角度看,小文件會開很多map,一個map開一個JVM去執行,所以這些任務的初始化,啟動,執行會浪費大量的資源,嚴重影響性能。

2.在HDFS中,每個小文件對象約占150byte,如果小文件過多會占用大量內存。這樣NameNode內存容量嚴重制約了集群的擴展。

三、小文件問題的解決方案

從小文件產生的途經就可以從源頭上控制小文件數量,方法如下:

1.使用Sequencefile作為表存儲格式,不要用textfile,在一定程度上可以減少小文件。

2.減少reduce的數量(可以使用參數進行控制)。

3.少用動態分區,用時記得按distribute by分區。

四、對于已有的小文件,我們可以通過以下幾種方案解決:

1.使用hadoop archive命令把小文件進行歸檔。

2.重建表,建表時減少reduce數量。

3.通過參數進行調節,設置map/reduce端的相關參數,如下:

設置map輸入合并小文件的相關參數:

//每個Map最大輸入大小(這個值決定了合并后文件的數量)

set mapred.max.split.size=256000000;

//一個節點上split的至少的大小(這個值決定了多個DataNode上的文件是否需要合并)

set mapred.min.split.size.per.node=100000000;

//一個交換機下split的至少的大小(這個值決定了多個交換機上的文件是否需要合并)

set mapred.min.split.size.per.rack=100000000;

//執行Map前進行小文件合并

set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;


設置map輸出和reduce輸出進行合并的相關參數:

//設置map端輸出進行合并,默認為true

set hive.merge.mapfiles = true

//設置reduce端輸出進行合并,默認為false

set hive.merge.mapredfiles = true

//設置合并文件的大小

set hive.merge.size.per.task = 256*1000*1000

//當輸出文件的平均大小小于該值時,啟動一個獨立的MapReduce任務進行文件merge。

set hive.merge.smallfiles.avgsize=16000000

總結

以上是生活随笔為你收集整理的Hive小文件问题:如何产生、造成影响、解放办法的全部內容,希望文章能夠幫你解決所遇到的問題。

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