Hadoop應(yīng)用開(kāi)發(fā)-Hadoop的I/O操作_第1頁(yè)
Hadoop應(yīng)用開(kāi)發(fā)-Hadoop的I/O操作_第2頁(yè)
Hadoop應(yīng)用開(kāi)發(fā)-Hadoop的I/O操作_第3頁(yè)
Hadoop應(yīng)用開(kāi)發(fā)-Hadoop的I/O操作_第4頁(yè)
Hadoop應(yīng)用開(kāi)發(fā)-Hadoop的I/O操作_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第七講Hadoop地I/O操作知識(shí)點(diǎn)回顧MapReduce概述MapReduce處理過(guò)程binerPartionerMapReduce地輸入處理類(lèi)MapReduce地輸出處理類(lèi)MapReduce綜合案例2本講知識(shí)點(diǎn)I/O操作地?cái)?shù)據(jù)完整I/O操作地?cái)?shù)據(jù)壓縮HadoopWritable序列化接口地使用方法Hadoop常用序列化接口地作用Hadoop基于文件地?cái)?shù)據(jù)結(jié)構(gòu)3前言數(shù)據(jù)在多節(jié)點(diǎn)之間傳輸,存儲(chǔ)地出錯(cuò)問(wèn)題,因此我們需要要行數(shù)據(jù)完整地校驗(yàn)。大文件在傳輸與存儲(chǔ)時(shí),磁盤(pán)容量不足與傳輸速率問(wèn)題,因此我們需要行文件壓縮。數(shù)據(jù)在節(jié)點(diǎn)間行傳輸存儲(chǔ)時(shí)地序列化問(wèn)題。Hadoop被設(shè)計(jì)為適合于大文件地讀寫(xiě),而小文件地讀寫(xiě)效率較低,因此需要專(zhuān)門(mén)地傳輸與存儲(chǔ)方案。4七.一IO操作地?cái)?shù)據(jù)完整檢查HadoopI/O操作時(shí)行數(shù)據(jù)完整檢查主要是在兩個(gè)階段行本地文件上傳到HDFS集群HDFS集群數(shù)據(jù)讀取到本地時(shí)除此之外DataNode也會(huì)定期檢測(cè)所有本地block地完整默認(rèn)情況下,HDFS會(huì)為每一個(gè)固定長(zhǎng)度地?cái)?shù)據(jù)執(zhí)行一次校驗(yàn)與,這個(gè)長(zhǎng)度由io.bytes.per.checksum參數(shù)指定,默認(rèn)是五一二字節(jié)。如果對(duì)系統(tǒng)能造成地?fù)p耗較大則可以對(duì)這個(gè)參數(shù)行修改。5七.二I/O操作地?cái)?shù)據(jù)壓縮Hadoop處理與存儲(chǔ)數(shù)據(jù)經(jīng)常受到磁盤(pán)I/O地影響,壓縮數(shù)據(jù)可以行改善使用壓縮時(shí)盡量遵循以下原則:運(yùn)算密集任務(wù)盡量少用壓縮IO密集任務(wù)推薦使用壓縮6七.二I/O操作地?cái)?shù)據(jù)壓縮壓縮算法壓縮算法地實(shí)現(xiàn)被稱(chēng)為codec,是pressor/Depressor地簡(jiǎn)寫(xiě)。不同地壓縮算法能不同,常用地壓縮算法如表7壓縮算法壓縮編碼/解碼器DEFLATEorg.apache.hadoop.io.press.DefaultCodeCGziporg.apahce.hadoop.io.press.GzipCodeCbzip二org.apache.hadoop.io.press.bzio二CodeCLZO.apache.hadoop.pression.lzoCodeC七.二I/O操作地?cái)?shù)據(jù)壓縮這些編碼解碼器均實(shí)現(xiàn)了pressionCodec接口,不同壓縮算法地異同點(diǎn)如表8壓縮算法命令行工具算法文件擴(kuò)展名可分割DEFLATE無(wú)DEFLATE.deflate不可分割gzipgzipDEFLATE.gz不可分割bzip二bzip二bzip二.bz二可分割LZOLzopLZO.lzo不可分割七.二I/O操作地?cái)?shù)據(jù)壓縮壓縮與解壓縮我們要對(duì)一個(gè)文件行壓縮需要編碼器,對(duì)一個(gè)壓縮文件行解壓需要解碼器。獲取編解碼器地方式有兩種根據(jù)擴(kuò)展名讓程序自己去選擇相應(yīng)地編解碼器。我們自己去指定編解碼器。9七.二I/O操作地?cái)?shù)據(jù)壓縮壓縮與解壓縮我們一般使用pressionCodec接口實(shí)現(xiàn)具體地編解碼器來(lái)對(duì)流行壓縮與解壓縮,如果想對(duì)正在被寫(xiě)入一個(gè)輸出流地?cái)?shù)據(jù)行壓縮,我們可以使用createOutputStream(OutputStreamout)方法創(chuàng)建一個(gè)pressionOutputStream(未壓縮地?cái)?shù)據(jù)將被寫(xiě)到此),將其以壓縮格式寫(xiě)入底層地流,如果想對(duì)從輸入流讀取而來(lái)地?cái)?shù)據(jù)行解壓縮,則調(diào)用createInputStream(InputStreamin)函數(shù),從而獲得一個(gè)pressionInputStream,從底層地流讀取未壓縮地?cái)?shù)據(jù)。10七.三HadoopI/O序列化接口序列化序列化(serialization)是指將結(jié)構(gòu)化地對(duì)象轉(zhuǎn)化為字節(jié)流,以便在網(wǎng)絡(luò)上傳輸或者寫(xiě)入到硬盤(pán)行永久存儲(chǔ);而反序列化(deserialization)是指將字節(jié)流轉(zhuǎn)回到結(jié)構(gòu)化對(duì)象地過(guò)程。Hadoop序列化在Hadoop,Mapper,biner,Reducer等階段之間地通信都需要使用序列化與反序列化技術(shù)。序列化是Hadoop核心地一部分,在Hadoop,位于org.apache.hadoop.io包地Writable接口是Hadoop序列化格式地實(shí)現(xiàn)。11七.三HadoopI/O序列化接口Writable接口Hadoop地鍵(key)與值(value)需要是實(shí)現(xiàn)了Writable接口地對(duì)象以下是HadoopWritable接口地聲明,其Write方法負(fù)責(zé)將結(jié)構(gòu)化對(duì)象轉(zhuǎn)化為字節(jié)流,readFields方法負(fù)責(zé)將字節(jié)流轉(zhuǎn)化為結(jié)構(gòu)化對(duì)象。12七.三HadoopI/O序列化接口在Hadoop我們常見(jiàn)到地Java基本類(lèi)型大多都有對(duì)應(yīng)地序列化接口,這些類(lèi)型均使用了Writable接口行封裝。我們可以使用這些類(lèi)內(nèi)置地get()與set()兩個(gè)方法來(lái)取值或賦值操作。(VintWritable與VlongWritable為變長(zhǎng)格式)13七.三HadoopI/O序列化接口Writableparable接口Writableparable繼承自Writable與java.lang.parable接口,是一個(gè)Writable也是一個(gè)parable。因此繼承該接口地序列化接口是可以比較地Writableparable接口地實(shí)現(xiàn)類(lèi)有BooleanWritable,BytesWritable,ByteWritable,DoubleWritable,FloatWritable,IntWritable,LongWritable,MD五Hash,NullWritable,Record,RecordTypeInfo,,Text,VIntWritable,VLongWritable。14七.三HadoopI/O序列化接口典型hadoop序列化接口及使用方法Text類(lèi)型一般認(rèn)為其是java.lang.String地Writable等價(jià)charAt()方法返回地是當(dāng)前位置字符對(duì)應(yīng)地Unicode編碼地位置find()方法返回地是當(dāng)前位置地字節(jié)偏移量IntWritable類(lèi)型IntWritable類(lèi)型是對(duì)Java基本類(lèi)型int行Writable封裝后地類(lèi)型。我們可使用set()方法設(shè)置值,使用get()方法獲取值。15七.三HadoopI/O序列化接口典型hadoop序列化接口及使用方法NullWritable類(lèi)型NullWritable地序列化長(zhǎng)度為零,它既不從數(shù)據(jù)流讀取數(shù)據(jù)也不向數(shù)據(jù)流寫(xiě)數(shù)據(jù)。在不需要使用鍵值地情況下可使用該類(lèi)型行占位。ObjectWritable類(lèi)型ObjectWritable

是一種多用途地封裝,它可以指向Java

基本類(lèi)型,字符串,枚舉,Writable

,空值,它使用Hadoop

地RPC

來(lái)封裝與反封裝方法地參數(shù)與返回類(lèi)型.16七.四自定義序列化類(lèi)實(shí)現(xiàn)自定義地序列化類(lèi)需要注意以下事項(xiàng)Writable地序列化方法需要要重寫(xiě),重寫(xiě)序列化方法時(shí)寫(xiě)入與讀取地順序需要完全一樣。需要要有無(wú)參構(gòu)造方法,因?yàn)榉葱蛄谢瘯r(shí)需要反射調(diào)用無(wú)參構(gòu)造方法。如果有寫(xiě)入文件地需求則需要實(shí)現(xiàn)

toString()方法。如果有排序地需求則需要實(shí)現(xiàn)pareTo()方法。17七.五基于文件地?cái)?shù)據(jù)結(jié)構(gòu)SequenceFile對(duì)于日志文件來(lái)說(shuō),純文本不適合記錄二制類(lèi)型數(shù)據(jù),通過(guò)SequenceFile為二制鍵值對(duì)提供了持久地?cái)?shù)據(jù)結(jié)構(gòu),將其作為日志文件地存儲(chǔ)格式時(shí),可自定義鍵(LongWritable)與值(Writeable地實(shí)現(xiàn)類(lèi))地類(lèi)型。多個(gè)小文件在行計(jì)算時(shí)需要開(kāi)啟很多程,所以采用容器文件SequenceFile按固定大小將多個(gè)小文件包裝起來(lái),使存儲(chǔ)與處理更高效。SequenceFile地存儲(chǔ)類(lèi)似于Log文件,SequenceFile地每條記錄是可序列化地字符數(shù)組18七.五基于文件地?cái)?shù)據(jù)結(jié)構(gòu)SequenceFileHeader主要包含了Keyclassname,Valueclassname,存儲(chǔ)壓縮算法,用戶(hù)自定義元數(shù)據(jù)等信息,此外,還包含了一些同步標(biāo)識(shí),用于快速定位到記錄地邊界。Record以鍵值對(duì)地方式行存儲(chǔ)19七.五基于文件地?cái)?shù)據(jù)結(jié)構(gòu)SequenceFileInputFormat如果MapReduce需要處理SequenceFile類(lèi)型地?cái)?shù)據(jù),需要指定SequenceFileInputFormat處理。job.setInputFormatClass(SequenceFileInputFormat.class);

輸出設(shè)置相類(lèi)似job.setOutp

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論