輸入格式化接口的設(shè)計與實現(xiàn)_第1頁
輸入格式化接口的設(shè)計與實現(xiàn)_第2頁
輸入格式化接口的設(shè)計與實現(xiàn)_第3頁
輸入格式化接口的設(shè)計與實現(xiàn)_第4頁
輸入格式化接口的設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

輸入格式化接口的設(shè)計與實現(xiàn)1.掌握輸入格式化接口的設(shè)計思想

2.掌握輸入格式化接口的實現(xiàn)方式

3.掌握新舊API的實現(xiàn)區(qū)別1、輸入格式化接口的設(shè)計與實現(xiàn)

2、舊版API的InputFormat解析

3、新版API的InputFormat解析

InputFormat主要用于描述輸入數(shù)據(jù)的格式,它提供以下兩個功能。?數(shù)據(jù)切分:按照某個策略將輸入數(shù)據(jù)切分成若干個split,以便確定MapTask個數(shù)以及對應(yīng)的split。?為Mapper提供輸入數(shù)據(jù):給定某個split,能將其解析成一個個key/value對。同學(xué)們需要掌握Hadoop如何設(shè)計InputFormat接口,以及提供了哪些常用的InputFormat實現(xiàn)。輸入格式化接口的設(shè)計與實現(xiàn)舊版輸入格式化接口在舊版API中,InputFormat是一個接口,它包含兩種方法:1.InputSplit[]getSplits(JobConfjob,intnumSplits)throwsIOException;2.RecordReader<K,V>getRecordReader(InputSplitsplit,JobConfjob,Reporterreporter);getSplits方法主要完成數(shù)據(jù)切分的功能,它會嘗試著將輸入數(shù)據(jù)切分成numSplits個InputSplit。InputSplit有以下兩個特點。?邏輯分片:它只是在邏輯上對輸入數(shù)據(jù)進行分片,并不會在磁盤上將其切分成分片進行存儲。InputSplit只記錄了分片的元數(shù)據(jù)信息,比如起始位置、長度以及所在的節(jié)點列表等。?可序列化:在Hadoop中,對象序列化主要有兩個作用:進程間通信和永久存儲。此處,InputSplit支持序列化操作主要是為了進程間通信。作業(yè)被提交到JobTracker之前,Client會調(diào)用作業(yè)InputFormat中的getSplits函數(shù),并將得到的InputSplit序列化到文件中。這樣,當(dāng)作業(yè)提交到JobTracker端對作業(yè)初始化時,可直接讀取該文件,解析出所有InputSplit,并創(chuàng)建對應(yīng)的MapTask。舊版輸入格式化接口

前面分析了InputFormat接口的定義,接下來介紹系統(tǒng)自帶的各種InputFormat實現(xiàn)。為了方便用戶編寫MapReduce程序,Hadoop自帶了一些針對數(shù)據(jù)庫和文件的InputFormat實現(xiàn),具體如下圖所示。通常而言,用戶需要處理的數(shù)據(jù)均以文件形式存儲到HDFS上,所以我們重點針對文件的InputFormat實現(xiàn)進行討論。舊版輸入格式化接口

如上圖所示,所有基于文件的InputFormat實現(xiàn)的基類是FileInputFormat,并由此派出針對文本文件格式的TextInputFormat、KeyValueTextInputFormat和NLineInputFormat,針對二進制文件格式的SequenceFileInputFormat等。整個基于文件的InputFormat體系的設(shè)計思路是,由公共基類FileInputFormat采用統(tǒng)一的方法對各種輸入文件進行切分,比如按照某個固定大小等分,而由各個派生InputFormat自己提供機制將進一步解析InputSplit。對應(yīng)到具體的實現(xiàn)是,基類FileInputFormat提供getSplits實現(xiàn),而派生類提供getRecordReader實現(xiàn)。舊版輸入格式化接口

新版API的InputFormat類圖如下圖所示。新API與舊API比較,在形式上發(fā)生了較大變化,但仔細(xì)分析,發(fā)現(xiàn)僅僅是對之前的一些類進行了封裝。通過封裝,使接口的易用性和擴展性得以增強。此外,對于基類FileInputFormat,新版API中有一個值得注意的改動:InputSplit劃分算法不再考慮用戶設(shè)定的MapTask個數(shù),而用mapred.max.split.size(記為maxSize)代替,即InputSplit大小的計算公式變?yōu)椋簊plitSize=max{minSize,min{maxSize,blockSize}}新版輸入格式化接口新版輸入格式化接口【實例】輸入目錄下有三個文件file1、file2和file3,大小依次為1MB,32MB和250MB。若blockSize采用默認(rèn)值64MB,則不同minSize和goalSize下,file3切分結(jié)果如表所示(三種情況下,file1與file2切分結(jié)果相同,均為1個InputSplit)。結(jié)合表和公式可以知

溫馨提示

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

評論

0/150

提交評論