Hadoop自學筆記(三)MapReduce簡介

來源:互聯網
上載者:User

1. MapReduce Architecture

MapReduce是一套可程式化的架構,大部分MapReduce的工作都可以用Pig或者Hive完成,但是還是要瞭解MapReduce本身是如何工作的,因為這才是Hadoop的核心,並且可以為以後最佳化和自己寫做準備。

 

Job Client, 就是使用者

Job Tracker和Task Tracker也是一種Master - Slave構建

 

工作流程(MapReduce Pipeline)

 

Job Client提交了MapReduce的程式(比如jar包中的二進位檔案),所需要的資料,結果輸出位置,提交給Job Tracker. Job Tracker會首先詢問Name Node, 所需要的資料都在哪些block裡面,然後就近選擇一個Task Tracker(離這些所需資料最近的一個task tracker,可能是在同一個Node上或者同一個Rack上或者不同rack上),把這個任務發送給該Task Tracker, Task Tracker來真正執行該任務。Task Tracker內部有Task Slots來真正執行這些任務。如果執行失敗了,Task Tracker就好彙報給Job Tracker, Job Tracker就再分配給別的Task Tracker來執行。Task Tracker在執行過程中要不斷的向Job Tracker彙報。最後Task Tracker執行完成後,彙報給Job Tracker,Job Tracker就更新任務狀態為成功。

 

注意,當使用者提交一個MapReduce任務的時候,不僅僅同時把任務提交給Job Tracker,同時還會拷貝一份到HDFS的一個公用位置(圖中的咖啡位置),因為傳遞代碼和命令相對要容易一些,然後Task Tracker就可以很方便的得到這些代碼。

 

具體步驟就是圖中的7步。





2. MapReduce Internals

 

Split階段:根據Input Format,把輸入資料分割成小部分,該階段與Map任務同時運行,分割後就放到不同的Mapper裡面。

Input Format: 決定了資料如何被分割放入Mapper。比如Log, 資料庫,二進位碼,等。

Map階段:把分割後傳入的splits轉化成一些key-value對,如何轉化取決於使用者代碼怎麼寫的。

Shuffle & Sort階段:把Map階段得到的資料歸類,然後送給Reducers。

Reduce階段:把送入的Map資料(Key, Value)按照使用者的代碼進行整合處理。

Output Format: Reduce階段處理完後,結果按照此格式放入HDFS的輸出目錄。

 

Imperative Programming Paradigm: 把計算當做一系列改變程式狀態的過程。也就是程式化編程。更加關注對象和狀態。

 

Functional Programming Paradigm: 大致就是函數化編程,把一系列計算作為一個數學函數。Hadoop使用的是這種編程範式。有輸入,有輸出;沒有對象沒有狀態。


 

為了最佳化起見,Hadoop還添加了更多的一個介面,combine階段,見。主要是在輸送到Shuffle/sort階段前,現在本地進行一次小的Reduce計算。這樣可以省很多頻寬(還記得job的代碼放入一個公用地區了嗎)


上面的整個過程看上去可能不那麼直觀,但是這是Hadoop最難理解的部分了。理解了這個流程(Hadoop Pipeline),就更容易理解以後的內容了。

 

3. MapReduce Example

 

舉例子來說明,在實際的機器操作中Hadoop如何完成上述任務。

 

在Windows環境下安裝了一個hyperV軟體,裡面有四個Hadoop節點,每個Hadoop節點都是一個Ubuntu環境。



可以看到上面有一個Name Node,還有三個Data Node。

首先,串連上Name Node,並且開啟一個Data Node節點。進入Name Node的Ubuntu系統中,開啟一個終端,輸入jps,可以看到jvm裡面正在啟動並執行東西。


在Data Node機器中運行同樣命令,可以看到裡面運行著DataNode, Jps, TaskTracker三個內容。

 

首先進入Data Node的機器裡面,到根目錄下面建立一個檔案,叫words.txt,檔案內容就是中要分析的一些詞。


第二步,把這個Words.txt檔案放入HDFS中。

首先

hadoop/bin/hadoop fs -ls 

查看目前HDFS中的檔案

然後建立一個檔案夾

Hadoop/bin/hadoop fs -mkdir /data



我們可以使用瀏覽器來看看HDFS中的檔案系統

瀏覽器中輸入hnname:50070,開啟Web UI


可以再Live Nodes裡面看到剛剛建立的data檔案夾,執行

hadoop/bin/hadoop fs -copyFromLocal words.txt /data

然後words.txt就拷貝到/data檔案夾下了,可以使用Web UI來驗證。

 

第三步,執行MapReduce 任務。這個任務是統計單詞頻率,這個任務已經由現成的jar包寫好了,在hadoop/bin/目錄下,hadoop-examples-1.2.0.jar. 這個檔案裡面有很多很多寫好的MapReduce任務。



執行命令:

Hadoop/bin/hadoop jar hadoop/hadoop*examples.jar wordcount /data/words.txt /data/results

 

先指定jar包,再指定程式名wordcount, 再指定輸入資料/data/words.txt 最後是輸出目錄/data/results, 沒有目錄會建立一個。


執行完成後,可以通過Web UI來看執行結果。



我擦,原來的圖片太多了發不了,不得不說刪掉幾張。。。。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.