1. 程式人生 > >《Hadoop權威指南》---關於MapReduce

《Hadoop權威指南》---關於MapReduce

一、概述

MapReduce是一種用於資料處理的程式設計模型,Hadoop可以執行各種語言版本的MapReduce,並且這種程式還是並行執行的,因此可以將大規模的資料分析任務分發給任何一個擁有足夠多機器的資料中心。

二、資料集

MapReduce的優勢就是能夠處理大規模的資料集。比如說氣象資料集,需要收集全球各地的氣象感測器每隔一個小時收集氣象資料和收集大量的日誌資料,這種大資料就適合用MapReduce來分析。比如說像找出最近一個世紀的最高氣溫,傳統的就是利用指令碼程式和awk(傳統按行儲存資料的工具)來完成,原理就是遍歷比較、交換值、最後輸出最大值。後來的做法就是利用並行處理程式來資料分析,按照不同年份的劃分分配不同的執行緒執行,但是由於資料量和執行緒處理的問題還是會導致有些執行緒處理得緩慢,但是時間確實取決於這個最慢的執行緒時間,為了更好的縮短時間,我們可以把資料分割成固定大小的塊,如果一個執行緒能夠處理更多的塊,那就給他更多的塊資料,資料處理完就能得到每塊的最大值,最後後就是對這些最大值進行處理,加入一個年份的資料分割成幾塊,就需要找出這幾個塊中的最大值作為這一年的最大值,但是受限於單臺計算機的處理能力,為了更好的提高處理速度,多臺計算機處理模式是我們考慮的方向,但是如何保證協調性和可靠性是一個問題,這就要使用Hadoop這樣的框架來解決了。

三、Hadoop分析資料

其實MapReduce的處理過程是分為map階段和reduce階段,前者主要獲取並刷選需要分析的資料,後者是對這些資料進行分析得出結果。

  • Java MapReduce:主要是基於org.apache.hadoop.io包,其中map函式是基於mapper類實現的,reduce函式是基於reduce類類來實現的,當然為了執行這兩個類需要一個負責執行的main方法。(現在所說的都是新的API,是基於Hadoop 0.20.0中釋出的,對於新舊API中的區別,請自行查詢)

四、橫向擴充套件

MapReduce作業(Job)是客戶端需要執行的一個工作單元:包括輸入資料、MapReduce程式和配置資訊。MapReduce將作業分成若干個小任務(task)來執行,其中包括map任務和reduce任務。其中兩類節點控制著作業執行過程:一個jobtracker以及一些列的tasktracker。jobtracker通過排程tasktracker上的任務來協調所有的執行在系統上的作業。同時Hadoop將MapReduce的輸入資料劃分為等長的小資料塊,稱為輸入分片,hadoop為每個分片構建一個map任務。

叢集上的可用寬頻限制了MapReduce作業的數量,因此儘量避免map和reduce任務之間的資料傳輸是有利的。Hadoop允許使用者針對map任務的輸出指定一個combiner-combiner函式的輸出作為reduce函式的輸入,但是並不是針對所有的情況,使用的時候需要慎重考慮。