成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Hadoop關于處理大量小文件的問題和解決方法

大數據 Hadoop
小文件指的是那些size比HDFS的block size(默認64M)小的多的文件。如果在HDFS中存儲小文件,那么在HDFS中肯定會含有許許多多這樣的小文件(不然就不會用hadoop了)。而HDFS的問題在于無法很有效的處理大量小文件。

小文件指的是那些size比HDFS的block size(默認64M)小的多的文件。如果在HDFS中存儲小文件,那么在HDFS中肯定會含有許許多多這樣的小文件(不然就不會用hadoop了)。而HDFS的問題在于無法很有效的處理大量小文件。

任何一個文件,目錄和block,在HDFS中都會被表示為一個object存儲在namenode的內存中,沒一個object占用150 bytes的內存空間。所以,如果有10million個文件,沒一個文件對應一個block,那么就將要消耗namenode 3G的內存來保存這些block的信息。如果規模再大一些,那么將會超出現階段計算機硬件所能滿足的極限。

不僅如此,HDFS并不是為了有效的處理大量小文件而存在的。它主要是為了流式的訪問大文件而設計的。對小文件的讀取通常會造成大量從datanode到datanode的seeks和hopping來retrieve文件,而這樣是非常的低效的一種訪問方式。

大量小文件在mapreduce中的問題

Map tasks通常是每次處理一個block的input(默認使用FileInputFormat)。如果文件非常的小,并且擁有大量的這種小文件,那么每一個map task都僅僅處理了非常小的input數據,并且會產生大量的map tasks,每一個map task都會消耗一定量的bookkeeping的資源。比較一個1GB的文件,默認block size為64M,和1Gb的文件,沒一個文件100KB,那么后者沒一個小文件使用一個map task,那么job的時間將會十倍甚至百倍慢于前者。

hadoop中有一些特性可以用來減輕這種問題:可以在一個JVM中允許task reuse,以支持在一個JVM中運行多個map task,以此來減少一些JVM的啟動消耗(通過設置mapred.job.reuse.jvm.num.tasks屬性,默認為1,-1為無限制)。另一種方法為使用MultiFileInputSplit,它可以使得一個map中能夠處理多個split。

為什么會產生大量的小文件?

至少有兩種情況下會產生大量的小文件

1.這些小文件都是一個大的邏輯文件的pieces。由于HDFS僅僅在不久前才剛剛支持對文件的append,因此以前用來向unbounde files(例如log文件)添加內容的方式都是通過將這些數據用許多chunks的方式寫入HDFS中。

2.文件本身就是很小。例如許許多多的小圖片文件。每一個圖片都是一個獨立的文件。并且沒有一種很有效的方法來將這些文件合并為一個大的文件

這兩種情況需要有不同的解決方式。對于***種情況,文件是由許許多多的records組成的,那么可以通過件邪行的調用HDFS的sync()方法(和 append方法結合使用)來解決。或者,可以通過些一個程序來專門合并這些小文件(see Nathan Marz’s post about a tool called the Consolidator which does exactly this)。

對于第二種情況,就需要某種形式的容器來通過某種方式來group這些file。hadoop提供了一些選擇:

HAR files

Hadoop Archives (HAR files)是在0.18.0版本中引入的,它的出現就是為了緩解大量小文件消耗namenode內存的問題。HAR文件是通過在HDFS上構建一個層次化的文件系統來工作。一個HAR文件是通過hadoop的archive命令來創建,而這個命令實 際上也是運行了一個MapReduce任務來將小文件打包成HAR。對于client端來說,使用HAR文件沒有任何影響。所有的原始文件都 visible && accessible(using har://URL)。但在HDFS端它內部的文件數減少了。

 

通過HAR來讀取一個文件并不會比直接從HDFS中讀取文件高效,而且實際上可能還會稍微低效一點,因為對每一個HAR文件的訪問都需要完成兩層 index文件的讀取和文件本身數據的讀取(見上圖)。并且盡管HAR文件可以被用來作為MapReduce job的input,但是并沒有特殊的方法來使maps將HAR文件中打包的文件當作一個HDFS文件處理。可以考慮通過創建一種input format,利用HAR文件的優勢來提高MapReduce的效率,但是目前還沒有人作這種input format。需要注意的是:MultiFileInputSplit,即使在HADOOP-4565的改進(choose files in a split that are node local),但始終還是需要seek per small file。

Sequence Files

通常對于“the small files problem”的回應會是:使用SequenceFile。這種方法是說,使用filename作為key,并且file contents作為value。實踐中這種方式非常管用。回到10000個100KB的文件,可以寫一個程序來將這些小文件寫入到一個單獨的 SequenceFile中去,然后就可以在一個streaming fashion(directly or using mapreduce)中來使用這個sequenceFile。不僅如此,SequenceFiles也是splittable的,所以mapreduce 可以break them into chunks,并且分別的被獨立的處理。和HAR不同的是,這種方式還支持壓縮。block的壓縮在許多情況下都是***的選擇,因為它將多個 records壓縮到一起,而不是一個record一個壓縮。

將已有的許多小文件轉換成一個SequenceFiles可能會比較慢。但是,完全有可能通過并行的方式來創建一個一系列的SequenceFiles。 (Stuart Sierra has written a very useful post about converting a tar file into a SequenceFile—tools like this are very useful)。更進一步,如果有可能***設計自己的數據pipeline來將數據直接寫入一個SequenceFile。

 

原文鏈接:http://my.oschina.net/u/270950/blog/170570

責任編輯:林師授 來源: OSCHINA編譯
相關推薦

2013-10-23 10:48:30

HadoopHDFS文件處理

2010-06-09 09:39:42

Opensuse雙系統

2010-06-17 11:17:34

裝系統出現Grub

2010-03-08 09:29:09

Linux Debia

2010-12-27 11:00:53

Virtualbox

2019-11-21 16:26:44

Windows電腦瀏覽器

2021-01-12 11:40:12

SonarQube平臺數據項目授權

2018-04-25 07:35:07

Kubernetes節點解決方法

2011-05-16 10:53:45

2020-06-27 08:57:55

HTTP403服務器

2009-09-10 09:35:25

Linq語句

2016-11-14 10:06:04

大數據max位圖

2010-05-11 15:09:51

Unix系統

2011-05-26 11:38:23

重復頁

2011-07-14 13:41:33

緩存小文件Redis

2010-08-24 11:34:37

DIV+CSS

2010-02-23 13:07:07

CentOS gcc

2017-05-04 14:37:38

Windows故障方法

2018-08-28 08:47:09

服務器宕機方法

2009-12-10 17:27:21

無線路由器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲欧美成人影院 | 欧美二级 | 日韩欧美在线视频 | 日本a在线| aaa国产大片| 干出白浆视频 | 99热这里有精品 | 视频一二区 | 国产区视频在线观看 | 婷婷色国产偷v国产偷v小说 | 日韩欧美国产精品 | 久久精品国产久精国产 | 国产精品高潮呻吟久久av野狼 | 国产免费一区 | 国产一区二区三区久久 | 中文字幕一区二区三区乱码在线 | 女人精96xxx免费网站p | 奇米四色影视 | 在线观看国产视频 | 亚洲欧美少妇 | 久久精品国产精品青草 | 综合色播| 91精品国产色综合久久 | 亚洲成人免费 | 91在线一区 | 久久成人久久 | 中文字幕三区 | 国产91丝袜在线播放 | 欧美三区 | 久久精品小视频 | 亚洲va国产日韩欧美精品色婷婷 | 久久久久久久久久久一区二区 | 成人综合视频在线观看 | 国产在线一区二区 | 久久久一二三区 | 无人区国产成人久久三区 | 一区二区三区中文字幕 | 狠狠操av | 狠狠干综合视频 | 亚洲手机视频在线 | 精品欧美黑人一区二区三区 |