版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、高級軟件人才實作培訓專家!Hadoop深入淺出講師:吳超博客:QQ:3774 86624北京傳智播客教育 高級軟件人才實作培訓專家!課程安排l MapReduce原理*l MapReduce執(zhí)行過程*l 數(shù)據(jù)類型與格式*l Writable接口與序列化機制*加深拓展l MapReduce的執(zhí)行過程源碼分析高級軟件人才實作培訓專家!MapReduce概述 MapReduce是一種分布式計算模型,由Google提出,主要用于搜索領域,解決海量數(shù)據(jù)的計算問題. MR由兩個階段組成:Map和Reduce,用戶只需要實現(xiàn)map()和reduce()兩
2、個函數(shù),即可實現(xiàn)分布式計算,非常簡單。 這兩個函數(shù)的形參是key、value對,表示函數(shù)的輸入信息。高級軟件人才實作培訓專家!MR執(zhí)行流程高級軟件人才實作培訓專家!Mapreduce原理 執(zhí)行步驟:1. map任務處理1.1 讀取輸入文件內容,解析成key、value對。對輸入文件的每一行,解析成key、value對。每一個鍵值對調用一次map函數(shù)。1.2 寫自己的邏輯,對輸入的key、value處理,轉換成新的key、value輸出。1.3 對輸出的key、value進行分區(qū)。1.4 對不同分區(qū)的數(shù)據(jù),按照key進行排序、分組。相同key的value放到一個集合中。1.5 (可選)分組后的數(shù)
3、據(jù)進行歸約。2. reduce任務處理2.1 對多個map任務的輸出,按照不同的分區(qū),通過網(wǎng)絡copy到不同的reduce節(jié)點。2.2 對多個map任務的輸出進行合并、排序。寫reduce函數(shù)自己的邏輯,對輸入的key、value處理,轉換成新的key、value輸出。2.3 把reduce的輸出保存到文件中。例子:實現(xiàn)WordCountApp高級軟件人才實作培訓專家!高級軟件人才實作培訓專家!map、reduce鍵值對格式函數(shù)輸入鍵值對輸出鍵值對map()reduce()高級軟件人才實作培訓專家!WordCountApp的驅動代碼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);高級軟件人才實作培訓專家!JobTrackerl 負責接收用戶提交的作業(yè),負責啟動、跟蹤任務執(zhí)行。l JobSubmissionProtocol是JobClient與JobTracker通信的接口。
6、l InterTrackerProtocol是TaskTracker與JobTracker通信的接口。高級軟件人才實作培訓專家!TaskTrackerl 負責執(zhí)行任務。高級軟件人才實作培訓專家!JobClientl 是用戶作業(yè)與JobTracker交互的主要接口。l 負責提交作業(yè)的,負責啟動、跟蹤任務執(zhí)行、訪問任務狀態(tài)和日志等。高級軟件人才實作培訓專家!高級軟件人才實作培訓專家!最小的MapReduce驅動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);高級軟件人才實作培訓專家!MapReduce驅動默認的設置InputFormat(輸入)TextInputFormatMapperClass(map類)IdentityMapperMapOutputKeyClassLongWritableMapOutputValueClassTextPartitionerClassH
9、ashPartitionerReduceClassIdentityReduceOutputKeyClassLongWritableOutputValueClassTextOutputFormatClassTextOutputFormat高級軟件人才實作培訓專家!序列化概念l 序列化(Serialization)是指把結構化對象轉化為字節(jié)流。l 反序列化(Deserialization)是序列化的逆過程。即把字節(jié)流轉回結構化對象。l Java序列化(java.io.Serializable)高級軟件人才實作培訓專家!Hadoop序列化的特點l 序列化格式特點:1. 緊湊:高效使用存儲空間。2.
10、快速:讀寫數(shù)據(jù)的額外開銷小3. 可擴展:可透明地讀取老格式的數(shù)據(jù)4. 互操作:支持多語言的交互Hadoop的序列化格式:Writable高級軟件人才實作培訓專家!Hadoop序列化的作用l 序列化在分布式環(huán)境的兩大作用:進程間通信,永久存儲。l Hadoop節(jié)點間通信。節(jié)點2節(jié)點1二進制流 反序列化為消息消 息 序列化為二進制流二進制流消息高級軟件人才實作培訓專家!Writable接口lWritable接口, 是根據(jù) DataInput 和 DataOutput 實現(xiàn)的簡單、有效的序列化對象.lMR的任意Key和Value必須實現(xiàn)Writable接口.MR的任意key必須實現(xiàn)WritableC
11、omparable接口高級軟件人才實作培訓專家!常用的Writable實現(xiàn)類Text一般認為它等價于java.lang.String的Writable。針對UTF-8序列。例:Text test = new Text(test);IntWritable one = new IntWritable(1);自定義Writable類高級軟件人才實作培訓專家!Writablewrite 是把每個對象序列化到輸出流readFields是把輸入流字節(jié)反序列化實現(xiàn)WritableComparable.Java值對象的比較:一般需要重寫toString(),hashCode(),equals()方法高級軟件人
12、才實作培訓專家!基于文件的存儲結構l SequenceFile 無序存儲l MapFile 會對key建立索引文件,value按key順序存儲基于MapFile的結構有:l ArrayFile 像我們使用的數(shù)組一樣,key值為序列化的數(shù)字l SetFile 他只有key,value為不可變的數(shù)據(jù)l BloomMapFile 在 MapFile 的基礎上增加了一個 /bloom 文件,包含的是二進制的過濾表,在每一次寫操作完成時, 會更新這個過濾表。高級軟件人才實作培訓專家!自定義WritableKpil 電信例子l 把上面例子里的Mapper的value改寫為自定義Writable類型。修改原
13、MapReduce程序,并成功執(zhí)行。結果跟原來一致。高級軟件人才實作培訓專家!MapReduce輸入的處理類l FileInputFormat:FileInputFormat是所有以文件作為數(shù)據(jù)源的InputFormat 實現(xiàn)的基類,F(xiàn)ileInputFormat保存作為job輸入的所有文件, 并實現(xiàn)了對輸入文件計算splits的方法。至于獲得記錄的方法是有不同的子類TextInputFormat進行實現(xiàn)的。高級軟件人才實作培訓專家!InputFormatInputFormat 負責處理MR的輸入部分.有三個作用:vvv驗證作業(yè)的輸入是否規(guī)范.把輸入文件切分成InputSplit.提供Reco
14、rdReader 的實現(xiàn)類,把InputSplit讀到Mapper中進行處理.高級軟件人才實作培訓專家!InputSplit 在執(zhí)行mapreduce之前,原始數(shù)據(jù)被分割成若干split,每個split作為一個map任務的輸入,在map執(zhí)行過程中split會被分解成一個個記錄(key-value對),map會依次處理每一個記錄。 FileInputFormat只劃分比HDFS block大的文件,所以FileInputFormat劃分的結果是這個文件或者是這個文件中的一部分. 如果一個文件的大小比block小,將不會被劃分,這也是Hadoop處理大文件的效率要比處理很多小文件的效率高的原因。當
15、Hadoop處理很多小文件(文件大小小于hdfs block大?。┑臅r候,由于FileInputFormat不會對小文件進行劃分,所以每一個小文件都會被當做一個split并分配一個map任務,導致效率底下。例如:一個1G的文件,會被劃分成16個64MB的split,并分配16個map任務處理,而10000個100kb的文件會被10000個map任務處理。高級軟件人才實作培訓專家!TextInputFormatTextInputformat是默認的處理類,處理普通文本文件。文件中每一行作為一個記錄,他將每一行在文件中的起始偏移量作為key,每一行的內容作為value。 默認以n或回車鍵作為一行記
16、錄。 TextInputFormat繼承了FileInputFormat。高級軟件人才實作培訓專家!InputFormat類的層次結構高級軟件人才實作培訓專家!其他輸入類 CombineFileInputFormat相對于大量的小文件來說,hadoop更合適處理少量的大文件。CombineFileInputFormat可以緩解這個問題,它是針對小文件而設計的。 KeyValueTextInputFormat當輸入數(shù)據(jù)的每一行是兩列,并用tab分離的形式的時候,KeyValueTextInputformat處理這種格式的文件非常適合。 NLineInputformatNLineInputform
17、at可以控制在每個split中數(shù)據(jù)的行數(shù)。 SequenceFileInputformat當輸入文件格式是sequencefile的時候,要使用SequenceFileInputformat作為輸入。高級軟件人才實作培訓專家!自定義輸入格式1)繼承FileInputFormat基類。 2)重寫里面的getSplits(JobContext context)方法。3)重寫createRecordReader(InputSplit split,TaskAttemptContext context)方法。(講解源代碼)高級軟件人才實作培訓專家!Hadoop的輸出 TextOutputformat默認的輸出格式,key和value中間值用tab隔開的。 SequenceFileOutputformat將key和value以sequencefile格式輸出。 SequenceFileAsOutputFormat將key和value以原始二進制的格式
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權】 ISO/IEC 23093-2:2025 EN Information technology - Internet of media things - Part 2: Discovery and communication application programming interface (API)
- 初中體育教師教學畫像與學生運動技能及體能培養(yǎng)的關聯(lián)性分析教學研究課題報告
- 高中政治教學中公民參與與民主治理實踐課題報告教學研究課題報告
- 2025年廣西職業(yè)師范學院馬克思主義基本原理概論期末考試參考題庫
- 2024年湖北三峽航空學院馬克思主義基本原理概論期末考試真題匯編
- 2024年景德鎮(zhèn)藝術職業(yè)大學馬克思主義基本原理概論期末考試真題匯編
- 2025年桂林師范學院馬克思主義基本原理概論期末考試真題匯編
- 2024年陜西?。?8所)馬克思主義基本原理概論期末考試真題匯編
- 2024年遼東學院馬克思主義基本原理概論期末考試筆試真題匯編
- 2025年昆山杜克大學馬克思主義基本原理概論期末考試真題匯編
- 陜西省專業(yè)技術人員繼續(xù)教育2025公需課《黨的二十屆三中全會精神解讀與高質量發(fā)展》20學時題庫及答案
- CJT 288-2017 預制雙層不銹鋼煙道及煙囪
- nudd質量風險管理流程
- CJJ99-2017 城市橋梁養(yǎng)護技術標準
- 人教版六年級數(shù)學上冊期末考試卷及答案
- 老年年人膿毒癥的急救護理2022.09.03
- 超聲內鏡穿刺的護理配合
- 完善低壓帶電作業(yè)安全措施工作注意事項
- JB T 5082.7-2011內燃機 氣缸套第7部分:平臺珩磨網(wǎng)紋技術規(guī)范及檢測方法
- 安全教育培訓(完整版)
- 測生命體征操作及評分標準
評論
0/150
提交評論