離線數(shù)據(jù)分析平臺實戰(zhàn)——060深入理解MapReduce 01(案例)
用戶自定義數(shù)據(jù)類型
MapReduce中的數(shù)據(jù)類型至少有兩種用途。
第一個用途贷屎,這些類型定義的數(shù)據(jù)可以被序列化進行網(wǎng)絡(luò)傳輸和文件存儲,
第二個用途逢渔,在shuffle階段要可以進行大小比較鹿霸。
那么在hadoop中解決
第一種方式采用hadoop的接口Writable宽闲,
第二種采用接口java接口Comparable(Hadoop將這兩個接口結(jié)合提供了WritableComparable接口)。
Hadoop提供了很多的內(nèi)置數(shù)據(jù)類型弊知,
比如:MapWritable, LongWritable, IntWritable, BooleanWritable, ByteWritable, DoubleWritable, FloatWritable, Text, NullWritable等阻逮。
用戶定制數(shù)據(jù)輸入格式化器
數(shù)據(jù)輸入格式(InputFormat)用于描述MR作業(yè)的數(shù)據(jù)輸入格式規(guī)范。
MapReduce框架依賴InputFormat進行輸入數(shù)據(jù)分片以及提供讀取分片數(shù)據(jù)的RecordReader實例對象吉捶。
每一個InputFormat類都會有一個對應(yīng)的RecordReader類夺鲜,
RecordReader類主要作用是將輸入數(shù)據(jù)轉(zhuǎn)換為鍵值對,
傳輸給mapper階段的map方法呐舔。
MapReduce默認的數(shù)據(jù)輸入格式是:
TextInputFormat(LineRecordReader)币励。
除了這個格式器以外,
還有KeyValueTextInputFormat, CombineTextInputFormat, SequenceFileInputFormat, DBInputFormat等珊拼。
InputFormat詳解
全稱:org.apache.hadoop.mapreduce.InputFormat
方法詳解:
getSplits
:返回值是分片信息集合食呻;作用:通過分片個數(shù)確定mappre的個數(shù),并根據(jù)分片信息中的數(shù)據(jù)地址信息決定是否采用數(shù)據(jù)本地化策略澎现。
createRecordReader
:創(chuàng)建一個具體讀取數(shù)據(jù)并構(gòu)造key/value鍵值對的RecordReader實例對象仅胞。
RecordReader詳解
全稱:org.apache.hadoop.mapreduce.RecordReader
方法詳解:
initialize
:根據(jù)對應(yīng)的分片信息進行初始化操作。
nextKeyValue
:判斷是否還有下一個key/value鍵值對剑辫,如果有返回true干旧;否則返回false。
getCurrentKey
/getCurrentValue
:獲取當(dāng)前key/value鍵值對妹蔽。
getProgress
:獲取操作進度信息椎眯。
close
:關(guān)閉資源讀取相關(guān)連接。
FileSplit詳解
全稱:org.apache.hadoop.mapreduce.InputSplit
方法詳解:
getLength
:獲取分片長度胳岂。
getLocations
:獲取該分片數(shù)據(jù)對應(yīng)的位置信息编整,確定數(shù)據(jù)本地化時候有用。
用戶定制數(shù)據(jù)輸出格式化器
數(shù)據(jù)輸出格式(OutputFormat)用于描述MR作業(yè)的數(shù)據(jù)輸出格式規(guī)范乳丰。
MapReduce框架依賴OutputFormat進行輸出路徑(輸出空間)檢測掌测、獲取提交job的OutputCommitter實例對象以及提供一個具體定義如何輸出數(shù)據(jù)的RecordWriter實例對象。
每一個OutputFormat類都會有一個對應(yīng)的RecordWriter類产园,RecordWriter類主要作用是明確定義如何寫入以及寫入的格式汞斧,接收reducer階段輸出的key/value鍵值對夜郁。
MapReduce默認的數(shù)據(jù)輸出格式是:
TextOutputFormat(LineRecordWriter)。
除了這個格式器以外断箫,還有SequenceFileOutputFormat, DBOutputFormat等拂酣。
OutputFormat詳解
全稱:org.apache.hadoop.mapreduce.OutputFormat
方法詳解:
getRecordWriter
:創(chuàng)建一個具體寫數(shù)據(jù)的RecordWriter實例秋冰。
checkOutputSpecs
:檢測輸出空間相關(guān)信息仲义,如果檢測失敗,直接拋出異常剑勾。
getOutputCommitter
:獲取一個提交job的committer對象埃撵。一般情況下,直接使用FileOutputCommitter
對象即可虽另。如果覺得FileOutputCommitter
內(nèi)容比較多暂刘,也可以自己實現(xiàn)一個完全為空的類。
案例-MongoDB Hadoop實例
實現(xiàn)功能:從MongoDB中讀取日志數(shù)據(jù)捂刺,將MapReduce程序處理過的數(shù)據(jù)寫出到MongoDB中谣拣。