轉帖|使用教程|編輯:龔雪|2014-08-07 12:06:07.000|閱讀 545 次
概述:圖文解析Hadoop基本流程以及Hadoop的簡單應用開發介紹。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
基本流程:
一個圖片太大了,只好分割成為兩部分。根據流程圖來說一下具體的一個任務執行的情況。
1. 分布式環境中客戶端創建任務并提交。
2. InputFormat做Map前的預處理,主要負責以下工作:
a) 驗證輸入的格式是否符合JobConfig的輸入定義,這個在實現Map和構建Conf的時候就會知道,不定義可以是Writable的任意子類。
b) 將input的文件split為邏輯上的輸入InputSplit,其實這就是在上面提到的在分布式文件系統中blocksize是有大小限制的,因此大文件會被劃分為多個block。
c) 通過RecordReader來再次處理inputsplit為一組records,輸出給Map。(inputsplit只是邏輯切分的第一步,但是如何根據文件中的信息來切分還需要RecordReader來實現,例如最簡單的默認方式就是回車換行的切分)
3. RecordReader處理后的結果作為Map的輸入,Map執行定義的Map邏輯,輸出處理后的key,value對到臨時中間文件。
4. Combiner可選擇配置,主要作用是在每一個Map執行完分析以后,在本地優先作Reduce的工作,減少在Reduce過程中的數據傳輸量。
5. Partitioner可選擇配置,主要作用是在多個Reduce的情況下,指定Map的結果由某一個Reduce處理,每一個Reduce都會有單獨的輸出文件。(后面的代碼實例中有介紹使用場景)
6. Reduce執行具體的業務邏輯,并且將處理結果輸出給OutputFormat。
7. OutputFormat的職責是,驗證輸出目錄是否已經存在,同時驗證輸出結果類型是否如Config中配置,最后輸出Reduce匯總后的結果。
代碼范例:
業務場景描述:
可設定輸入和輸出路徑(操作系統的路徑非HDFS路徑),根據訪問日志分析某一個應用訪問某一個API的總次數和總流量,統計后分別輸出到兩個文件中。
僅僅為了測試,因此沒有去細分很多類,將所有的類都歸并于一個類便于說明問題。
圖4 測試代碼類圖
LogAnalysiser就是主類,主要負責創建,提交任務,并且輸出部分信息。內部的幾個子類用途可以參看流程中提到的角色職責。具體的看看幾個類和方法的代碼片斷:
LogAnalysiser::MapClass
public static class MapClass extends MapReduceBase
implements Mapper<LongWritable, Text, Text, LongWritable>
{
public void map(LongWritable key, Text value, OutputCollector<Text, LongWritable> output, Reporter reporter)
throws IOException
&
來源:代碼農場
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都控件網