天天看點

分布式并行計算MapReduce

作業要求來自于https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3319

1.用自己的話闡明Hadoop平台上HDFS和MapReduce的功能、工作原理和工作過程

 HDFS   功能  分布式檔案系統,用來存儲海量資料。

    工作原理  檔案系統都有最小的處理單元,而HDFS的處理單元是一個塊。HDFS儲存的檔案被分成塊進行存儲。預設塊大小為

   64MB。HDFS有兩種類型的節點:NameNode和DataNode。

   NameNode是管理節點,存放檔案中繼資料。也就是存放着檔案和資料塊的映射表,資料塊和資料節點的映射表。通

   過NameNode可以找到檔案存放的地方,找到存放的資料。DataNode是工作節點,用來存放資料塊,也就是檔案實

   際存儲的地方。

    工作過程  當用戶端向NameNode發送消息以讀取中繼資料時,NameNode将查詢其塊映射以找到相應的資料節點。然後用戶端可

                   以在相應的資料節點中找到資料塊,并将它們拼接成檔案。這是讀寫的過程。

 MapReduce    功能  并行處理架構,實作任務分解和排程。

       工作原理  map task

     程式會根據InputFormat将輸入檔案分割成splits,每個split會作為一個map task的輸入,每個map task會有一

     個記憶體緩沖區,輸入資料經過map階段處理後的中間結果會寫入記憶體緩沖區,并且決定資料寫入到哪個

     partitioner,當寫入的資料到達記憶體緩沖區的的閥值(預設是0.8),會啟動一個線程将記憶體中的資料溢寫入磁

     盤,同時不影響map中間結果繼續寫入緩沖區。在溢寫過程中,MapReduce架構會對key進行排序,如果中間

     結果比較大,會形成多個 溢寫檔案,最後的緩沖區資料也會全部溢寫入磁盤形成一個溢寫檔案(最少有一個溢

     寫檔案),如果是多個溢寫檔案,則最後合并所有的溢寫檔案為一個檔案。

     reduce task

     當所有的map task完成後,每個map task會形成一個最終檔案,并且該檔案按區劃分。reduce任務啟動之

     前,一個map task完成後,就會啟動線程來拉取map結果資料到相應的reduce task,不斷地合并資料,為

     reduce的資料輸入做準備,當所有的map tesk完成後,資料也拉取合并完畢後,reduce task 啟動,最終将

     輸出輸出結果存入HDFS上。

       工作過程  開發人員編寫好MapReduce program,将程式打包運作。JobClient向JobTracker申請可用Job,JobTracker返

                     回JobClient一個可用Job ID。JobClient得到Job ID後,将運作Job所需要的資源拷貝到共享檔案系統HDFS中。

                     資源準備完備後,JobClient向JobTracker送出Job。JobTracker收到送出的Job後初始化Job。初始化完成後,

                     JobTracker從HDFS中擷取輸入splits(作業可以該啟動多少Mapper任務)。與此同時,TaskTracker不斷地向

                     JobTracker彙報心跳資訊,并且傳回要執行的任務。TaskTracker得到JobTracker配置設定(盡量滿足資料本地化)的

                    任務後,向HDFS擷取Job資源(若資料是本地的,不需拷貝資料)。 擷取資源後,TaskTracker會開啟JVM子程序

                    運作任務。

2.HDFS上運作MapReduce

1)準備文本檔案,放在本地/home/hadoop/wc

分布式并行計算MapReduce

2)編寫map函數和reduce函數,在本地運作測試通過

分布式并行計算MapReduce

3)啟動Hadoop:HDFS, JobTracker, TaskTracker

分布式并行計算MapReduce

4)把文本檔案上傳到hdfs檔案系統上 user/hadoop/input 

分布式并行計算MapReduce

5)streaming的jar檔案的路徑寫入環境變量,讓環境變量生效

分布式并行計算MapReduce

6)建立一個shell腳本檔案:streaming接口運作的腳本,名稱為run.sh

分布式并行計算MapReduce

7)source run.sh來執行mapreduce

分布式并行計算MapReduce

8)檢視運作結果

分布式并行計算MapReduce