久草视频2-久草视-久草社区视频-久草色在线-久草色视频-久草软件

螞蟻絆倒大象,不起眼的小文件竟拖了Hadoop大數據的后

我是創始人李巖:很抱歉!給自己產品做個廣告,點擊進來看看。  

HDFS作為Hadoop生態系統的分布式文件系統,它被設計用來存儲海量數據,特別是TB、PB量級別的數據。它的設計的初衷也是存儲大文件,而如果HDFS上存在大量的小文件,會對系統性能帶來嚴重的問題。本文想跟大家聊下小文件的處理。

本文的小文件是指那些大小比HDFS的block (Hadoop 2.x的默認大小128MB)小的多的文件。在HDFS中,文件元信息,例如位置、大小、分塊信息等這些存儲在Namenode的內存中,每一個object占用150 bytes的內存。文件個數越多相應的也會占用Namenode更多的內存。何況HDFS主要是為了流式的訪問大文件而設計的,讀取眾多的小文件顯然也是非常低效的。

▌Hadoop小文件的3類常見情況的處理

1、HDFS中存儲包含了大量小文件

現象:在HDFS上已經存在了大量的小文件和目錄。

方案:通過調用HDFS的sync()方法和append()方法,將小文件和目錄每隔一定時間生成一個大文件,或者可以通過寫程序來合并這些小文件。

2、MapReduce的輸入包含大量小文件

現象:輸入文件中存在大量的小文件

MapReduce程序的Map任務(task)一次可以處理一個塊(block)大小的輸入數據(默認使用FileInputFormat)。如果一個輸入文件的大小大于block,那么會拆成兩個或多個task進行處理;如果小于block,也會用一個task處理該文件。需要處理的數據如果分散存儲在許多小文件中,就會產生大量的map task,如果小文件個數非常多,這會使處理時間變的很慢。

方案:有3種

1)Hadoop Archive:

Hadoop Archive是一個高效地將小文件放入HDFS塊中的文件存檔工具,它能夠將許多小文件打包成一個HAR文件,這樣會同時減少Namenode的內存使用。

2)Sequence File:

Sequence File由一系列的二進制key/value組成,如果key為小文件名,value為文件內容,則可以將大批小文件合并成一個大文件。

1)和2)這里不做介紹,可以參考 ??

http://blog.cloudera.com/blog/2009/02/the-small-files-problem

3)CombineFileInputFormat:

Hadoop有一個專門的類CombineFileInputFormat?來處理小文件,它根據一定的規則,將HDFS上多個小文件合并到一個InputSplit中,同時啟動適量的Map來處理這里面的文件,以減少MR整體作業的運行時間。CombineFileInputFormat類繼承FileInputFormat,主要重寫了ListgetSplits(JobContext var1)方法,我們可以設置mapreduce.input.fileinputformat.split.minsize.per.node、mapreduce.input.fileinputformat.split.minsize.per.rack和mapreduce.input.fileinputformat.split.maxsize?參數的設置來合并小文件。其中mapreduce.input.fileinputformat.split.maxsize參數至關重要,如果沒有設置這個參數(默認沒設置),那么同一個機架上的所有小文件將組成一個InputSplit,最終由一個Map Task來處理。如果設置了這個參數,那么同一個節點(node)上的文件將會組成一個InputSplit。

InputSplit包含的HDFS塊信息存儲在CombineFileSplit?類中。該類包含了每個塊文件的路徑、起始偏移量、相對于原始偏移量的大小和這個文件的存儲節點。CombineTextInputFormat告訴MR程序如何讀取組合的InputSplit,具體如何解析CombineFileSplit中的文件主要在CombineFileRecordReader中實現。該類封裝了TextInputFormat的RecordReader,并對CombineFileSplit中的多個文件循環遍歷并讀取其中的內容。

樣例代碼如下: 螞蟻絆倒大象,不起眼的小文件竟拖了Hadoop大數據的后 日志輸出:
可以從日志中很清楚的看出input文件數為Total input paths to process : 152,通過CombineFileInputFormat處理后splits為mapreduce.JobSubmitter: number of splits:1,map數為Launched map tasks=1。可以修改mapreduce.input.fileinputformat.split.maxsize參數,觀察Map Task的個數變化。

3、Hive小文件問題

現象1:?hive輸入的文件過多

方案:設置mapper?輸入文件合并參數

螞蟻絆倒大象,不起眼的小文件竟拖了Hadoop大數據的后

現象2:hive執行中間過程生成的文件過多

方案:設置中間過程合并參數,盡量避免小文件 螞蟻絆倒大象,不起眼的小文件竟拖了Hadoop大數據的后

現象3:hive輸出結果生成的文件過多

方案:一種是調整reducer個數,另一種是調整reducer大小 螞蟻絆倒大象,不起眼的小文件竟拖了Hadoop大數據的后

/ 參考文章 /

1、https://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html

2、https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties

3、http://blog.cloudera.com/blog/2009/02/the-small-files-problem/

隨意打賞

大數據展示大數據采集
提交建議
微信掃一掃,分享給好友吧。
主站蜘蛛池模板: 强行扒开美女大腿挺进 | a级影视| babes性欧美30 | 亚洲视频在线看 | 国产精品va在线观看不 | 厨房play黄瓜进去小说h | 俄罗斯海滩厕所偷窥 | 亚洲国产精品综合一区在线 | 亚洲天堂网站在线 | 亚洲伦理影院 | 亚洲第一在线播放 | 二区三区不卡不卡视频 | 久久成人精品免费播放 | 免费观看成年人视频 | 亚洲国产精品久久无套麻豆 | 精品香蕉99久久久久网站 | 欧美男同video | 师尊被各种play打屁股 | 国产成人综合精品 | 俄罗斯男男激情1069gay | 99精品免费视频 | 午夜dj免费视频观看社区 | 无人在线视频高清免费观看动漫 | 国产高清好大好夹受不了了 | 精品精品国产自在久久高清 | 香蕉tv国产在线永久播放 | 国产成人一区二区三区在线视频 | 动漫xnxx | 亚洲精品九色在线网站 | 欧美一区二区三区精品影视 | 王淑兰与铁柱全文免费阅读 | 欧美一级乱妇老太婆特黄 | 97热久久免费频精品99国产成人 | 日韩高清无砖砖区2022 | 顶级尤物极品女神福利视频 | 免费在线看片网站 | 久久www免费人成高清 | 欧美黑人成人免费全部 | 窝窝影院午夜色在线视频 | 网址在线观看你懂我意思吧免费的 | 娇女的呻吟亲女禁忌h16 |