天天看點

javaScript Windows相關

一、hadoop概述

hadoop由兩部分組成,分别是分布式檔案系統和分布式計算架構mapreduce。其中,分布式檔案系統主要用于大規模資料的分布式存儲,而mapreduce 則建構在分布式檔案系

統之上,對存儲在分布式檔案系統中的資料進行分布式計算。

2、在hadoop 中,mapreduce 底層的分布式檔案系統是獨立子產品,使用者可按照約定的一套接口實作自己的分布式檔案系統,然後經過簡單的配置後,存儲在該檔案系統上的資料便

可以被mapreduce處理。hadoop 預設使用的分布式檔案系統是hfds(hadoop   distributed  file   system ,hadoop   分布式檔案系統),它與mapreduce 架構緊密結合。

二、hadoop hdfs 架構

h d f s 是一個具有高度容錯性的分布式檔案系統,适合部署在廉價的機器上。h d f s 能提供高吞吐量的資料通路,非常适合大規模資料集上的應用。hdfs 的架構如下圖1所示,總體上采用了master/slave 架構,主要由以下幾個元件組成:client 、namenode 、secondary 和datanode 。下面分别對這幾個元件進行介紹。

javaScript Windows相關

                                                             圖1 hadoop   hdfs 架構圖

(1 )client

c l i e n t (代表使用者)通過與namenode和datanode互動通路h d f s 中的檔案。clien提供了一個類似posix 的檔案系統接口供使用者調用。

(2 )namenode

整個h a d o o p 叢集中隻有一個namenode。它是整個系統的“總管”,負責管理h d f s的目錄樹和相關的檔案中繼資料資訊。這些資訊是以“fsimage”(h d f s 中繼資料鏡像檔案)和 “editlog ”(h d f s 檔案改動日志)兩個檔案形式存放在本地磁盤,當h d f s 重新開機時重新構造出來的。此外,namenode 還負責監控各個datanode 的健康狀态,一旦發現某個datanode 宕掉,則将該datanode

移出h d f s 并重新備份其上面的資料。

(3 )secondary  

namenodesecondary   namenode 最重要的任務并不是為namenode 中繼資料進行熱備份,而是定期合并f s i m a g e 和e d i t s 日志,并傳輸給namenode 。這裡需要注意的是,為了減小n a m e n o d e壓力,namenode 自己并不會合并fsimage 和edits ,并将檔案存儲到磁盤上,而是交由secondary   namenode 完成。

(4 )datanode

一般而言,每個s l a v e 節點上安裝一個datanode ,它負責實際的資料存儲,并将資料

息定期彙報給namenode 。datanode 以固定大小的b l o c k 為基本機關組織檔案内容,預設情況下b l o c k 大小為6 4 m b 。當使用者上傳一個大的檔案到h d f s 上時,該檔案會被切分成

若幹個b l o c k ,分别存儲到不同的datanode ;同時,為了保證資料可靠,會将同一個b l o c k以流水線方式寫到若幹個(預設是3 ,該參數可配置)不同的datanode 上。這種檔案切割後存儲的過程是對使用者透明的。

三、hadoop   mapreduce 架構

1、同h d f s 一樣,hadoop   mapreduce 也采用了master / slave (m /s )架構,具體如下圖2所示。它主要由以下幾個元件組成:client 、jobtracker 、  tasktracker 和task 。下面分别對這幾個元件進行介紹。

javaScript Windows相關

                                                                        圖2  h a d o o p   mapreduce 架構圖

使用者編寫的mapreduce 程式通過client 送出到jobtracker 端;同時,使用者可通過client 提供的一些接口檢視作業運作狀态。在hadoop 内部用“作業”(job)表示mapreduce 程式。一個mapreduce 程式可對應若幹個作業,而每個作業會被分解成若幹個map/reduce 任務(task)。

(2 )jobtracker

jobtracker 主要負責資源監控和作業排程。jobtracker 監控所有tasktracker 與作業的健康狀況,一旦發現失敗情況後,其會将相應的任務轉移到其他節點;同時,jobtracker 會跟蹤任務的執行進度、資源使用量等資訊,并将這些資訊告訴任務排程器,而排程器會在資源出現空閑時,選擇合适的任務使用這些資源。在h a d o o p 中,任務排程器是一個可插拔的子產品,使用者可以根據自己的需要設計相應的排程器。

(3 )tasktracker

tasktracker 會周期性地通過heartbeat 将本節點上資源的使用情況和任務的運作進度彙報給jobtracker,同時接收jobtracker 發送過來的指令并執行相應的操作(如啟動新任務、殺死任務等)。tasktracker 使用“slot”等量劃分本節點上的資源量。“slot”代表計算資源(cpu、記憶體等)。一個task 擷取到一個slot 後才有機會運作,而hadoop 排程器的作用就是将各個tasktracker 上的空閑slot

配置設定給task 使用。slot 分為map  slot 和reduce  slot 兩種,分别供map task 和reduce task 使用。tasktracker 通過slot 數目(可配置參數)限定task 的并發度。

(4 )task

task 分為map  task 和reduce  task 兩種,均由tasktracker 啟動。從上一小節中我們知道,hdfs 以固定大小的block 為基本機關存儲資料,而對于mapreduce 而言,其處理機關是split。

split 與block 的對應關系如下圖3所示。split 是一個邏輯概念,它隻包含一些中繼資料資訊,比如資料起始位置、資料長度、資料所在節點等。它的劃分方法完全由使用者自己決定。但需要注意

的是,split 的多少決定了map task 的數目,因為每個split 會交由一個map task 處理。

javaScript Windows相關

                                                        圖3   split 與block 的對應關系

ps:

1、map  task 執行過程如圖4所示。由該圖可知,map  task 先将對應的s p l i t 疊代解析成一個個key / value 對,依次調用使用者自定義的map ( ) 函數進行處理,最終将臨時結果存放到本地磁盤上,其中臨時資料被分成若幹個partition ,每個partition 将被一個reduce  task 處理。

javaScript Windows相關

                                                         圖4    m a p   ta s k 執行流程

2、reduce   task 執行過程如圖5所示。該過程分為三個階段

①從遠端節點上讀取map  task 中間結果(稱為“shuffle 階段”);

②按照key 對key / value 對進行排序(稱為“sort 階段”);

③依次讀取< key,   value   list > ,調用使用者自定義的reduce ( ) 函數處理,并将最終結果存到hdfs 上(稱為“reduce 階段”)。

javaScript Windows相關

                                                                   圖5  r e d u c e   ta s k 執行過程

ps

1、hadoop   mapreduce 直接誕生于搜尋領域,以易于程式設計、良好的擴充性和高容錯性為設計目标。它主要由兩部分組成:程式設計模型和運作時環境。其中,程式設計模型為使用者提供了5個可程式設計元件,分别是inputformat 、mapper 、partitioner 、reducer、outputformat ;運作時環境則将使用者的mapreduce 程式部署到叢集的各個節點上,并通過各種機制保證其成功運作。

2、hadoop   mapreduce 處理的資料一般位于底層分布式檔案系統中。該系統往往将使用者的檔案切分成若幹個固定大小的block 存儲到不同節點上。預設情況下,mapreduce 的每個ta s k 處理一個block。  mapreduce 主要由四個元件構成,分别是client 、job tracker 、tasktracker 和task ,它們共同保障一個作業的成功運作。一個mapreduce 作業的運作周期是,先在client 端被送出到jobtracker 上,然後由jobtr acker

将作業分解成若幹個ta s k ,并對這些ta s k 進行排程和監控,以保障這些程式運作成功,而tasktracker 則啟動jobtracker 發來的ta s k ,并向job tracker 彙報這些task 的運作狀态和本節點上資源的使用情況。

繼續閱讀