Hadoop自学笔记(三)MapReduce简单介绍
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的一個公共位置(圖中的咖啡位置),由于傳遞代碼和命令相對要easy一些。然后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),就更easy理解以后的內容了。
?
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來看運行結果。
我擦。原來的圖片太多了發不了。不得不說刪掉幾張。
。。。
轉載于:https://www.cnblogs.com/ldxsuanfa/p/9941414.html
總結
以上是生活随笔為你收集整理的Hadoop自学笔记(三)MapReduce简单介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 物联网架构成长之路(24)-Docker
- 下一篇: WPFの操作文件浏览框几种方式