自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

為啥集群小文件治理那么重要,你真的懂嗎?

大數(shù)據(jù) Hadoop
小文件對(duì)于計(jì)算的影響就是需要大量節(jié)點(diǎn)之間頻繁建立聯(lián)系,數(shù)據(jù)傳輸?shù)?,浪費(fèi)資源,消耗時(shí)間長(zhǎng)。其次小文件相關(guān)大量的任務(wù)初始化時(shí)間甚至比計(jì)算時(shí)間還長(zhǎng),造成計(jì)算資源的使用浪費(fèi),降低集群的吞吐量。?

小文件是 Hadoop 集群運(yùn)維中的常見挑戰(zhàn),尤其對(duì)于大規(guī)模運(yùn)行的集群來(lái)說(shuō)可謂至關(guān)重要。如果處理不好,可能會(huì)導(dǎo)致許多并發(fā)癥。Hadoop集群本質(zhì)是為了TB,PB規(guī)模的數(shù)據(jù)存儲(chǔ)和計(jì)算應(yīng)運(yùn)而生的。為啥大數(shù)據(jù)開發(fā)都說(shuō)小文件的治理重要,說(shuō)HDFS 存儲(chǔ)小文件效率低下,比如增加namenode負(fù)載等,降低訪問效率等?究竟本質(zhì)上為什么重要?以及如何從本質(zhì)上剖析小文件,治理小文件呢?今天就帶你走進(jìn)小文件的世界。

1.什么是小文件?

日常生產(chǎn)中HDFS上小文件產(chǎn)生是一個(gè)很正常的事情,有些甚至是不可避免,比如jar,xml配置文件,tmp臨時(shí)文件,流式任務(wù)等都是小文件的組成部分。當(dāng)然更多的是因?yàn)榧涸O(shè)置不合理,造成一些意料之外的小文件產(chǎn)生。實(shí)際公司生產(chǎn)中對(duì)于小文件的大小沒有一個(gè)統(tǒng)一的定義。一般公司集群的blocksize的大小在128/256兩者居多。首先小文件大小肯定是要遠(yuǎn)小于blocksize的文件。一般公司小文件的大小定義如1Mb,8Mb,甚至16Mb,32Mb更大。根據(jù)公司實(shí)際集群狀態(tài)定義,因?yàn)橛行┣闆r合并小文件需要消耗額外的資源。

既然剖析小文件,那么不可避免的要先剖析hdfs的存儲(chǔ)原理。眾多周知了,HDFS上文件的數(shù)據(jù)存儲(chǔ)分為namenode元數(shù)據(jù)管理和實(shí)際數(shù)據(jù)文件。hdfs上的數(shù)據(jù)文件被拆分成塊block,這些塊block在整個(gè)集群中的datanode的本地文件系統(tǒng)上存儲(chǔ)和復(fù)制,每個(gè)塊也維護(hù)者自己的blockmeta信息。namenode主要維護(hù)這些文件的元數(shù)據(jù)信息,具體namenode的解析參考我的其他博客。

如下一個(gè)某個(gè)文件的某個(gè)block在data上存儲(chǔ)的情況。


2.小文件的產(chǎn)生

1.流式數(shù)據(jù),如flume,kafak,sparkstreaming,storm,flink等,流式增量文件,小窗口文件,如幾分鐘一次等。

2.MapReduce引擎任務(wù):如果純map任務(wù),大量的map;如果mapreduce任務(wù),大量的reduce;兩者都會(huì)造成大量的文件。出現(xiàn)這種情況的原因很多,果分布表的過(guò)度分區(qū),輸入大量的小文件,參數(shù)設(shè)置的不合理等,輸出沒有文件合并等。

3.spark任務(wù)過(guò)度并行化,Spark 分區(qū)越多,寫入的文件就越多。

4.文件的壓縮與存儲(chǔ)格式不合理;一般生產(chǎn)公司很少使用textfile這種低效的文件格式了。

使用壓縮,降低文件的大小,同時(shí)也會(huì)降低文件的總塊數(shù)。注意文件存儲(chǔ)格式和壓縮不合理只是加劇小文件問題,不是產(chǎn)生小文件的本質(zhì)。

3.小文件的危害

3.1小文件對(duì)namenod的影響

如下圖1,一個(gè)文件192Mb,默認(rèn)blocksize=128Mb,副本個(gè)數(shù)為3,存儲(chǔ)為2個(gè)block。

圖1


如下圖2,同樣一個(gè)文件192Mb,默認(rèn)blocksize=128Mb,副本個(gè)數(shù)為3,存儲(chǔ)為192個(gè)block

圖2

namenode的namespace中主要占存儲(chǔ)對(duì)象是文件的目錄個(gè)數(shù),文件(文件名長(zhǎng)度)以及文件block數(shù)。根據(jù)namenode實(shí)際使用經(jīng)驗(yàn)來(lái)看,一個(gè)存儲(chǔ)對(duì)象大概占用150字節(jié)的空間。HDFS上存儲(chǔ)文件占用的namenode內(nèi)存計(jì)算公式如下:

Memory=150bytes*(1個(gè)文件inode+(文件的塊數(shù)*副本個(gè)數(shù)))

如上圖1 ,一個(gè)文件192Mb,默認(rèn)blocksize=128Mb,副本個(gè)數(shù)為3,存儲(chǔ)為2個(gè)block,需要namenode內(nèi)存=150*(1+2*3)=1050 Bytes

同理,圖2 一個(gè)文件192Mb,默認(rèn)blocksize=128Mb,副本個(gè)數(shù)為3,存儲(chǔ)為192個(gè)block,需要namenode內(nèi)存=150 x (192 + (192 x 3)) = 115200 Bytes

尖叫總結(jié):

1 .從上面可以看出,同樣的一個(gè)文件,大小不同形態(tài)的存儲(chǔ)占用namenode的內(nèi)存之比相差了109倍之多。所以如果對(duì)于單namenode的集群來(lái)說(shuō),大量的小文件的會(huì)占用大量的namenode堆內(nèi)存空間,給集群的存儲(chǔ)造成瓶頸。有些人可能會(huì)說(shuō)我們聯(lián)邦,多組namenode不就沒有這個(gè)問題了,其實(shí)不然,且往下看

2.當(dāng) NameNode 重新啟動(dòng)時(shí)(雖然生產(chǎn)上這種情況很少),它必須將文件系統(tǒng)元數(shù)據(jù)fsimage從本地磁盤加載到內(nèi)存中。這意味著如果 namenode 元數(shù)據(jù)很大,重啟會(huì)更慢(以我們公司3億block,5萬(wàn)多個(gè)文件對(duì)象來(lái)說(shuō),重啟一次1.5小時(shí),期間應(yīng)用不可用)其次,datanode 還通過(guò)網(wǎng)絡(luò)向 NameNode 報(bào)告塊更改;更多的塊意味著要通過(guò)網(wǎng)絡(luò)報(bào)告更多的變化,等待時(shí)間更長(zhǎng)。

3.更多的文件,更多的block,意味著更多的讀取請(qǐng)求需要由 NameNode 提供服務(wù),這將增加 RPC 隊(duì)列和處理延遲,進(jìn)而導(dǎo)致namenode性能和響應(yīng)能力下降。官方介紹說(shuō)接近 40K~50K RPCs/s 人為是極高的負(fù)載。實(shí)際使用來(lái)看比這低時(shí)對(duì)于namenode來(lái)說(shuō)性能都會(huì)打很大的折扣。

3.2 小文件對(duì)datanode影響

文件的block存儲(chǔ)是存儲(chǔ)在datanode本地系統(tǒng)上,底層的磁盤上,甚至不同的掛載目錄,不同的磁盤上。大量的小文件,意味著數(shù)據(jù)著尋址需要花費(fèi)很多時(shí)間,尤其對(duì)于高負(fù)載的集群來(lái)說(shuō),磁盤使用率50%以上的集群,花費(fèi)在尋址的時(shí)間比文件讀取寫入的時(shí)間更多。這種就違背了blocksize大小設(shè)計(jì)的初衷(實(shí)踐顯示最佳效果是:尋址時(shí)間僅占傳輸時(shí)間的1%)。這樣會(huì)造成磁盤的讀寫會(huì)很慢,擁有大量小文件會(huì)導(dǎo)致更多的磁盤搜索。如下磁盤延遲:

3.3小文件對(duì)計(jì)算的影響

基于HDFS文件系統(tǒng)的計(jì)算,blokc塊是最小粒度的數(shù)據(jù)處理單元。塊的多少往往影響應(yīng)用程序的吞吐量。更多的文件,意味著更多的塊,以及更多的節(jié)點(diǎn)分布。

比如以MapReduce任務(wù)為例(hive等),在 MapReduce 中,會(huì)為每個(gè)讀取的塊生成一個(gè)單獨(dú)的 Map 任務(wù),如果大量小文件,大量的塊,意味著著更多任務(wù)調(diào)度,任務(wù)創(chuàng)建開銷,以及更多的任務(wù)管理開銷(MapReduce 作業(yè)的 application master 是一個(gè) Java 應(yīng)用,它的主類是 MRAppMaster。它通過(guò)創(chuàng)建一定數(shù)量的bookkeeping object跟蹤作業(yè)進(jìn)度來(lái)初始化作業(yè),該對(duì)象接受任務(wù)報(bào)告的進(jìn)度和完成情況)。雖然可以開啟map前文件合并,但是這也需要不停地從不同節(jié)點(diǎn)建立連接,數(shù)據(jù)讀取,網(wǎng)絡(luò)傳輸,然后進(jìn)行合并,同樣會(huì)增加消耗資源和增加計(jì)算時(shí)間,成本也很高。

同樣,如果是spark計(jì)算引擎,executor的一次讀取和處理一個(gè)分區(qū),默認(rèn)情況下,每個(gè)分區(qū)是一個(gè) HDFS 塊,如果大量的小文件,每個(gè)文件都在不同的分區(qū)中讀取,這將導(dǎo)致大量的任務(wù)調(diào)度開銷,同時(shí)每個(gè) CPU 內(nèi)核的吞吐量降低。

簡(jiǎn)單總結(jié)一下:小文件對(duì)于計(jì)算的影響就是需要大量節(jié)點(diǎn)之間頻繁建立聯(lián)系,數(shù)據(jù)傳輸?shù)?,浪費(fèi)資源,消耗時(shí)間長(zhǎng)。其次小文件相關(guān)大量的任務(wù)初始化時(shí)間甚至比計(jì)算時(shí)間還長(zhǎng),造成計(jì)算資源的使用浪費(fèi),降低集群的吞吐量。

本文轉(zhuǎn)載自微信公眾號(hào)「滌生大數(shù)據(jù)」,作者「滌生大數(shù)據(jù)」,可以通過(guò)以下二維碼關(guān)注。

轉(zhuǎn)載本文請(qǐng)聯(lián)系「滌生大數(shù)據(jù)」公眾號(hào)。

責(zé)任編輯:武曉燕 來(lái)源: 滌生大數(shù)據(jù)
相關(guān)推薦

2023-06-08 07:34:19

HDFS小文件壓縮包

2022-06-21 09:53:03

FedoraUbuntuLinux

2021-03-30 09:59:52

支付寶加密數(shù)據(jù)泄露

2021-01-20 10:40:16

緩存固態(tài)硬盤SSD

2019-07-24 10:11:51

jdkjreJava

2019-11-13 23:33:16

工業(yè)物聯(lián)網(wǎng)IIOT物聯(lián)網(wǎng)

2016-07-21 17:11:18

操作系統(tǒng)Windows升級(jí)

2020-09-10 14:33:18

計(jì)算機(jī)

2018-05-10 09:06:24

2019-02-01 09:38:16

2023-05-11 00:17:44

分區(qū)HiveReduce

2020-03-31 10:58:38

2019-12-18 15:11:42

數(shù)組集合數(shù)據(jù)

2021-02-01 20:35:49

Kafka大數(shù)據(jù)數(shù)據(jù)

2019-12-11 10:07:02

緩存架構(gòu)數(shù)據(jù)庫(kù)

2017-09-07 16:32:05

華為

2021-10-15 10:26:56

代碼項(xiàng)目Mapper

2021-04-12 06:00:01

MongoDB數(shù)據(jù)庫(kù)存儲(chǔ)

2018-06-29 08:36:50

2011-06-14 10:57:31

SQL Server管理
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)