傳智播客-培訓(xùn)課程3mapreduce_1_第1頁
傳智播客-培訓(xùn)課程3mapreduce_1_第2頁
傳智播客-培訓(xùn)課程3mapreduce_1_第3頁
傳智播客-培訓(xùn)課程3mapreduce_1_第4頁
傳智播客-培訓(xùn)課程3mapreduce_1_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、高級軟件人才實作培訓(xùn)專家!Hadoop深入淺出講師:吳超博客:QQ:3774 86624北京傳智播客教育 高級軟件人才實作培訓(xùn)專家!課程安排l MapReduce原理*l MapReduce執(zhí)行過程*l 數(shù)據(jù)類型與格式*l Writable接口與序列化機制*加深拓展l MapReduce的執(zhí)行過程源碼分析高級軟件人才實作培訓(xùn)專家!MapReduce概述 MapReduce是一種分布式計算模型,由Google提出,主要用于搜索領(lǐng)域,解決海量數(shù)據(jù)的計算問題. MR由兩個階段組成:Map和Reduce,用戶只需要實現(xiàn)map()和reduce()兩

2、個函數(shù),即可實現(xiàn)分布式計算,非常簡單。 這兩個函數(shù)的形參是key、value對,表示函數(shù)的輸入信息。高級軟件人才實作培訓(xùn)專家!MR執(zhí)行流程高級軟件人才實作培訓(xùn)專家!Mapreduce原理 執(zhí)行步驟:1. map任務(wù)處理1.1 讀取輸入文件內(nèi)容,解析成key、value對。對輸入文件的每一行,解析成key、value對。每一個鍵值對調(diào)用一次map函數(shù)。1.2 寫自己的邏輯,對輸入的key、value處理,轉(zhuǎn)換成新的key、value輸出。1.3 對輸出的key、value進行分區(qū)。1.4 對不同分區(qū)的數(shù)據(jù),按照key進行排序、分組。相同key的value放到一個集合中。1.5 (可選)分組后的數(shù)

3、據(jù)進行歸約。2. reduce任務(wù)處理2.1 對多個map任務(wù)的輸出,按照不同的分區(qū),通過網(wǎng)絡(luò)copy到不同的reduce節(jié)點。2.2 對多個map任務(wù)的輸出進行合并、排序。寫reduce函數(shù)自己的邏輯,對輸入的key、value處理,轉(zhuǎn)換成新的key、value輸出。2.3 把reduce的輸出保存到文件中。例子:實現(xiàn)WordCountApp高級軟件人才實作培訓(xùn)專家!高級軟件人才實作培訓(xùn)專家!map、reduce鍵值對格式函數(shù)輸入鍵值對輸出鍵值對map()reduce()高級軟件人才實作培訓(xùn)專家!WordCountApp的驅(qū)動代碼public static void main(String

4、args) throws Exception Configuration conf = new Configuration();/加載配置文件Job job = new Job(conf);/創(chuàng)建一個job,供JobTracker使用job.setJarByClass(WordCountApp.class);job.setMapperClass(WordCountMapper.class); job.setReducerClass(WordCountReducer.class);FileInputFormat.setInputPaths(job, new Path(hdfs:/192.168.

5、1.10:9000/input); FileOutputFormat.setOutputPath(job, new Path(hdfs:/0:9000/output);job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class);job.waitForCompletion(true);高級軟件人才實作培訓(xùn)專家!JobTrackerl 負責接收用戶提交的作業(yè),負責啟動、跟蹤任務(wù)執(zhí)行。l JobSubmissionProtocol是JobClient與JobTracker通信的接口。

6、l InterTrackerProtocol是TaskTracker與JobTracker通信的接口。高級軟件人才實作培訓(xùn)專家!TaskTrackerl 負責執(zhí)行任務(wù)。高級軟件人才實作培訓(xùn)專家!JobClientl 是用戶作業(yè)與JobTracker交互的主要接口。l 負責提交作業(yè)的,負責啟動、跟蹤任務(wù)執(zhí)行、訪問任務(wù)狀態(tài)和日志等。高級軟件人才實作培訓(xùn)專家!高級軟件人才實作培訓(xùn)專家!最小的MapReduce驅(qū)動Configuration configuration = new Configuration(); Job job = new Job(configuration, HelloWorld)

7、; job.setInputFormat(TextInputFormat.class);job.setMapperClass(IdentityMapper.class);job.setMapOutputKeyClass(LongWritable.class); job.setMapOutputValueClass(Text.class); job.setPartitionerClass(HashPartitioner.class); job.setNumReduceTasks(1); job.setReducerClass(IdentityReducer.class); job.setOutp

8、utKeyClass(LongWritable.class); job.setOutputValueClass(Text.class); job.setOutputFormat(TextOutputFormat.class);job.waitForCompletion(true);高級軟件人才實作培訓(xùn)專家!MapReduce驅(qū)動默認的設(shè)置InputFormat(輸入)TextInputFormatMapperClass(map類)IdentityMapperMapOutputKeyClassLongWritableMapOutputValueClassTextPartitionerClassH

9、ashPartitionerReduceClassIdentityReduceOutputKeyClassLongWritableOutputValueClassTextOutputFormatClassTextOutputFormat高級軟件人才實作培訓(xùn)專家!序列化概念l 序列化(Serialization)是指把結(jié)構(gòu)化對象轉(zhuǎn)化為字節(jié)流。l 反序列化(Deserialization)是序列化的逆過程。即把字節(jié)流轉(zhuǎn)回結(jié)構(gòu)化對象。l Java序列化(java.io.Serializable)高級軟件人才實作培訓(xùn)專家!Hadoop序列化的特點l 序列化格式特點:1. 緊湊:高效使用存儲空間。2.

10、快速:讀寫數(shù)據(jù)的額外開銷小3. 可擴展:可透明地讀取老格式的數(shù)據(jù)4. 互操作:支持多語言的交互Hadoop的序列化格式:Writable高級軟件人才實作培訓(xùn)專家!Hadoop序列化的作用l 序列化在分布式環(huán)境的兩大作用:進程間通信,永久存儲。l Hadoop節(jié)點間通信。節(jié)點2節(jié)點1二進制流 反序列化為消息消 息 序列化為二進制流二進制流消息高級軟件人才實作培訓(xùn)專家!Writable接口lWritable接口, 是根據(jù) DataInput 和 DataOutput 實現(xiàn)的簡單、有效的序列化對象.lMR的任意Key和Value必須實現(xiàn)Writable接口.MR的任意key必須實現(xiàn)WritableC

11、omparable接口高級軟件人才實作培訓(xùn)專家!常用的Writable實現(xiàn)類Text一般認為它等價于java.lang.String的Writable。針對UTF-8序列。例:Text test = new Text(test);IntWritable one = new IntWritable(1);自定義Writable類高級軟件人才實作培訓(xùn)專家!Writablewrite 是把每個對象序列化到輸出流readFields是把輸入流字節(jié)反序列化實現(xiàn)WritableComparable.Java值對象的比較:一般需要重寫toString(),hashCode(),equals()方法高級軟件人

12、才實作培訓(xùn)專家!基于文件的存儲結(jié)構(gòu)l SequenceFile 無序存儲l MapFile 會對key建立索引文件,value按key順序存儲基于MapFile的結(jié)構(gòu)有:l ArrayFile 像我們使用的數(shù)組一樣,key值為序列化的數(shù)字l SetFile 他只有key,value為不可變的數(shù)據(jù)l BloomMapFile 在 MapFile 的基礎(chǔ)上增加了一個 /bloom 文件,包含的是二進制的過濾表,在每一次寫操作完成時, 會更新這個過濾表。高級軟件人才實作培訓(xùn)專家!自定義WritableKpil 電信例子l 把上面例子里的Mapper的value改寫為自定義Writable類型。修改原

13、MapReduce程序,并成功執(zhí)行。結(jié)果跟原來一致。高級軟件人才實作培訓(xùn)專家!MapReduce輸入的處理類l FileInputFormat:FileInputFormat是所有以文件作為數(shù)據(jù)源的InputFormat 實現(xiàn)的基類,F(xiàn)ileInputFormat保存作為job輸入的所有文件, 并實現(xiàn)了對輸入文件計算splits的方法。至于獲得記錄的方法是有不同的子類TextInputFormat進行實現(xiàn)的。高級軟件人才實作培訓(xùn)專家!InputFormatInputFormat 負責處理MR的輸入部分.有三個作用:vvv驗證作業(yè)的輸入是否規(guī)范.把輸入文件切分成InputSplit.提供Reco

14、rdReader 的實現(xiàn)類,把InputSplit讀到Mapper中進行處理.高級軟件人才實作培訓(xùn)專家!InputSplit 在執(zhí)行mapreduce之前,原始數(shù)據(jù)被分割成若干split,每個split作為一個map任務(wù)的輸入,在map執(zhí)行過程中split會被分解成一個個記錄(key-value對),map會依次處理每一個記錄。 FileInputFormat只劃分比HDFS block大的文件,所以FileInputFormat劃分的結(jié)果是這個文件或者是這個文件中的一部分. 如果一個文件的大小比block小,將不會被劃分,這也是Hadoop處理大文件的效率要比處理很多小文件的效率高的原因。當

15、Hadoop處理很多小文件(文件大小小于hdfs block大?。┑臅r候,由于FileInputFormat不會對小文件進行劃分,所以每一個小文件都會被當做一個split并分配一個map任務(wù),導(dǎo)致效率底下。例如:一個1G的文件,會被劃分成16個64MB的split,并分配16個map任務(wù)處理,而10000個100kb的文件會被10000個map任務(wù)處理。高級軟件人才實作培訓(xùn)專家!TextInputFormatTextInputformat是默認的處理類,處理普通文本文件。文件中每一行作為一個記錄,他將每一行在文件中的起始偏移量作為key,每一行的內(nèi)容作為value。 默認以n或回車鍵作為一行記

16、錄。 TextInputFormat繼承了FileInputFormat。高級軟件人才實作培訓(xùn)專家!InputFormat類的層次結(jié)構(gòu)高級軟件人才實作培訓(xùn)專家!其他輸入類 CombineFileInputFormat相對于大量的小文件來說,hadoop更合適處理少量的大文件。CombineFileInputFormat可以緩解這個問題,它是針對小文件而設(shè)計的。 KeyValueTextInputFormat當輸入數(shù)據(jù)的每一行是兩列,并用tab分離的形式的時候,KeyValueTextInputformat處理這種格式的文件非常適合。 NLineInputformatNLineInputform

17、at可以控制在每個split中數(shù)據(jù)的行數(shù)。 SequenceFileInputformat當輸入文件格式是sequencefile的時候,要使用SequenceFileInputformat作為輸入。高級軟件人才實作培訓(xùn)專家!自定義輸入格式1)繼承FileInputFormat基類。 2)重寫里面的getSplits(JobContext context)方法。3)重寫createRecordReader(InputSplit split,TaskAttemptContext context)方法。(講解源代碼)高級軟件人才實作培訓(xùn)專家!Hadoop的輸出 TextOutputformat默認的輸出格式,key和value中間值用tab隔開的。 SequenceFileOutputformat將key和value以sequencefile格式輸出。 SequenceFileAsOutputFormat將key和value以原始二進制的格式

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論