国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

關(guān)于Hadoop中I/O的研究

2018-07-28 07:18:52劉涌韓偉趙靜雅
電腦知識(shí)與技術(shù) 2018年15期

劉涌 韓偉 趙靜雅

摘要:Hadoop在存儲(chǔ)數(shù)據(jù)的過程中,首先要保證的就是數(shù)據(jù)的完整性,通常,Hadoop是根據(jù)由數(shù)據(jù)計(jì)算出的校驗(yàn)和進(jìn)行數(shù)據(jù)驗(yàn)證的,從而保證數(shù)據(jù)的完整性,為了達(dá)到持續(xù)保持完整性的目的,Hadoop會(huì)分別在I/O過程中和利用定時(shí)掃描程序驗(yàn)證數(shù)據(jù)并具備一套完善的糾正機(jī)制;在此前提下,通過文件的壓縮,Hadoop可以有效地減少文件占用的空間并提高文件傳輸速度,相關(guān)的壓縮算法有bzip2和LZO等。

關(guān)鍵詞:Hadoop;HDFS ;I/O ;壓縮

中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)15-0239-01

1 引言

Hadoop用戶都希望自己的數(shù)據(jù)在存儲(chǔ)和調(diào)用的過程中,不會(huì)丟失或損壞,盡管磁盤和網(wǎng)絡(luò)中的每個(gè)I/O操作在讀寫過程中發(fā)生錯(cuò)誤的情況非常少,但當(dāng)系統(tǒng)中需要處理的數(shù)據(jù)量達(dá)到Hadoop的處理極限時(shí),數(shù)據(jù)的誤碼率會(huì)明顯升高。

檢測(cè)數(shù)據(jù)是否損壞的主要手段是通過校驗(yàn)和的方式去驗(yàn)證數(shù)據(jù):在數(shù)據(jù)產(chǎn)生時(shí)可根據(jù)相應(yīng)協(xié)議對(duì)數(shù)據(jù)進(jìn)行疊加相加的操作計(jì)算出初始校驗(yàn)和,當(dāng)數(shù)據(jù)通過一個(gè)不可靠通道到達(dá)目的地址后使用相同的方法計(jì)算校驗(yàn)和,將兩次校驗(yàn)和結(jié)果匹配比較,如果結(jié)果為不匹配則證明數(shù)據(jù)已經(jīng)損壞,反之則說明數(shù)據(jù)極有可能是正常傳輸?shù)臄?shù)據(jù)。

2 HDFS的數(shù)據(jù)完整性

HDFS會(huì)對(duì)所有寫入的數(shù)據(jù)進(jìn)行校驗(yàn)和計(jì)算,并在讀取時(shí)進(jìn)行校驗(yàn)和驗(yàn)證。它針對(duì)每個(gè)由io.bytes.per.checksum指定字節(jié)的數(shù)據(jù)計(jì)算校驗(yàn)和。默認(rèn)情況下是512Bytes,由于CRC-32循環(huán)冗余校驗(yàn)的校驗(yàn)和是32位,即4Bytes,所以存儲(chǔ)校驗(yàn)和的額外開銷低于1%。

Hadoop通過校驗(yàn)和驗(yàn)證數(shù)據(jù)的過程與其他系統(tǒng)中校驗(yàn)和的應(yīng)用并沒有本質(zhì)的不同:數(shù)據(jù)節(jié)點(diǎn)DataNode在收到數(shù)據(jù)后存儲(chǔ)數(shù)據(jù)并驗(yàn)證校驗(yàn)和,正在寫數(shù)據(jù)的客戶端將數(shù)據(jù)機(jī)器校驗(yàn)和發(fā)送到由一系列DataNode組成的管線,管線中最后一個(gè)DataNode負(fù)責(zé)驗(yàn)證校驗(yàn)和,如果檢測(cè)到校驗(yàn)和不匹配,客戶端會(huì)收到一個(gè)ChecksumException異常,它是IOException異常的一個(gè)子類,后者會(huì)以應(yīng)用程序特定的方式進(jìn)行響應(yīng)處理,如重新發(fā)送等。

反之,在客戶端從DataNode中讀取數(shù)據(jù)時(shí),也會(huì)驗(yàn)證校驗(yàn)和,將他們與DataNode中存儲(chǔ)的校驗(yàn)和進(jìn)行比較,每個(gè)DataNode都持續(xù)保存一個(gè)用于驗(yàn)證的校驗(yàn)和日志persistent log of checksum verification,當(dāng)客戶端成功驗(yàn)證校驗(yàn)和后,DataNode也會(huì)更新該日志, 確保數(shù)據(jù)和校驗(yàn)和均保持最新的確認(rèn)正確狀態(tài)。

要徹底持久的保持?jǐn)?shù)據(jù)的完整性,除了在I/O過程中均進(jìn)行驗(yàn)證外,還要防止小概率事件的發(fā)生,即每個(gè)DataNode都會(huì)在后臺(tái)運(yùn)行一個(gè)DataBlockScanner,定期掃描驗(yàn)證存儲(chǔ)在DataNode上的所有數(shù)據(jù)塊,從而保證已經(jīng)存儲(chǔ)的數(shù)據(jù)不會(huì)因?yàn)槲锢泶鎯?chǔ)媒介的原因造成數(shù)據(jù)的損失。

HDFS存儲(chǔ)著每個(gè)數(shù)據(jù)塊的復(fù)本,DataNode通過上述過程及時(shí)的發(fā)現(xiàn)數(shù)據(jù)的損壞,利用ChecksumException報(bào)警,將該數(shù)據(jù)塊復(fù)本標(biāo)記為已損壞,暫時(shí)屏蔽這個(gè)復(fù)本的I/O操作,之后,安排該數(shù)據(jù)塊的一個(gè)其他復(fù)本復(fù)制到另一個(gè)DataNode,最終將已損壞的數(shù)據(jù)塊復(fù)本刪除,從而保持所有數(shù)據(jù)的完整性。

3 壓縮與切分

對(duì)文件進(jìn)行壓縮,不僅可以減少存儲(chǔ)文件所需占用的磁盤空間,還可以提高文件在網(wǎng)絡(luò)和磁盤中傳輸?shù)乃俣?,因此,在Hadoop中數(shù)據(jù)文件的壓縮尤為重要,常見的壓縮格式有:deflate、gzip、bzip2、LZO、LZ4、Snappy等。

所有的壓縮算法都需要在速度與壓縮率之間權(quán)衡,提高壓縮、解壓縮速度,通常就意味著無法進(jìn)行復(fù)雜的壓縮,即能壓縮減少的空間很少,因此,所有壓縮工具都提供9級(jí)不同程度的壓縮參數(shù)供使用者自由選擇,選項(xiàng)-1為優(yōu)化壓縮速度,選項(xiàng)-9為優(yōu)化壓縮空間。不同的壓縮工具的壓縮性能不同:bzip2的壓縮能力比gzip強(qiáng),但壓縮速度稍慢于后者,盡管bzip2本身的解壓速度比壓縮速度快,但仍比其他壓縮格式要慢一些;LZO、LZ4和Snappy的壓縮速度都比gzip高一個(gè)數(shù)量級(jí),但壓縮效率稍遜一籌;而LZ4和Snappy的解壓速度比LZO高很多。

上述壓縮算法中僅有bzip2可切分,如果LZO文件已經(jīng)在預(yù)處理過程中被索引,則LZO文件是可切分的。是否支持切分,決定了是否可以搜索數(shù)據(jù)流的任意位置并進(jìn)一步往下讀取數(shù)據(jù),這種特性尤其適合MapReduce。在Hadoop中,使用這兩種支持切分的壓縮格式要比在應(yīng)用中將文件切分成塊,再為每個(gè)數(shù)據(jù)塊進(jìn)行壓縮至大小近似于HDFS塊的大小的效率更高; 如果想要進(jìn)一步提高效率,可以使用順序文件、RCFile或Avro等同時(shí)支持壓縮和切分的文件格式,最好再與一個(gè)快速壓縮工具聯(lián)合使用,如LZO、LZ4或Snappy等。當(dāng)然,以上三種手段都比不壓縮文件直接存儲(chǔ)的效率更高。

4 結(jié)束語(yǔ)

Hadoop中處理的數(shù)據(jù)往往動(dòng)輒好幾個(gè)TB,在這種情況下,既要保證數(shù)據(jù)的正確性和完整性,又要考慮數(shù)據(jù)占用的空間盡可能小,存儲(chǔ)和運(yùn)行數(shù)據(jù)塊的速度盡可能快,因此,對(duì)Hadoop中的I/O操作進(jìn)行分析優(yōu)化就顯得十分有必要,本文僅就上述幾方面進(jìn)行了簡(jiǎn)述,關(guān)于I/O相關(guān)工作,還有很大的發(fā)展空間,具有廣闊的開發(fā)前景。

參考文獻(xiàn):

[1] 張子凡. OpenStack部署實(shí)踐[M].北京:人民郵電出版社,2014:1-364.

[2] 鮑亮,李倩. 實(shí)戰(zhàn)大數(shù)據(jù)[M].北京:清華大學(xué)出版社,2014:1-327.

[3] 吳萍,朱晴婷. 算法與程序設(shè)計(jì)基礎(chǔ)(Python版)[M].北京:清華大學(xué)出版社,2015:30-270.

元谋县| 林口县| 沾益县| 农安县| 昆山市| 通海县| 繁昌县| 姚安县| 梁山县| 专栏| 蒙阴县| 合作市| 鄢陵县| 从江县| 鲜城| 和林格尔县| 南涧| 襄汾县| 饶平县| 榆林市| 始兴县| 南城县| 柘城县| 宜兴市| 阿勒泰市| 泽州县| 犍为县| 安阳县| 伊金霍洛旗| 襄垣县| 武鸣县| 邢台市| 永昌县| 锡林浩特市| 云梦县| 石泉县| 迁西县| 石家庄市| 白城市| 泰来县| 门源|