Hadoop中HDFS和MapReduce節點基本簡介

    Hadoop提供存儲文件和分析文件的機制。

    HDFS負責文件的存儲,MapReduce負責文件的分析過程。

HDFS主要組件由NameNodeDataNode組成

HDFS文件切分成塊(默認大小64M),以塊爲單位,每個塊有多個副本存儲在不同的機器上,副本數可在文件生成時指定(默認3

NameNode是主節點,存儲文件的元數據如文件名,文件目錄結構,文件屬性(生成時間,副本數,文件權限),以及每個文件的塊列表以及塊所在的DataNode等等。它是一箇中心服務器,單一節,負責管理文件系統的名字空間(namespace)以及客戶端對文件的訪問,它維護着每個文件系統樹和整棵樹內所有的文件和目錄,這些信息已兩個文件形式永久保存在本地磁盤上:命名控件鏡像文件(Fsimage)和編輯日誌(Edit log)。文件操作,NameNode負責文件元數據的操作,DataNode負責處理文件內容的讀寫請求,跟文件內容相關的數據流不經過NameNode,只會詢問它跟那個DataNode聯繫,否則NameNode會成爲系統的瓶頸

DataNode在本地文件系統存儲文件塊數據,以及塊數據的校驗和。可以創建、刪除、移動或重命名文件,當文件創建、寫入和關閉之後不能修改文件內容。一個數據塊在DataNode以文件存儲在磁盤上,包括兩個文件,一個是數據本身,一個是元數據包括數據塊的長度,塊數據的校驗和,以及時間戳。DataNode啓動後向NameNode註冊,通過後,週期性(1小時)向NameNode上報所有的塊信息。心跳是每3秒一次,心跳返回結果帶有NameNode給該DataNode的命令如複製塊數據到另一臺機器,或刪除某個數據塊。如果超過10分鐘沒有收到某個DataNode 的心跳,則認爲該節點不可用。

DataNode磁盤掛了,都會盡快的通知NameNode。如果該機器掛了,由於datanode3秒鐘向namenode發送心跳,如果10分鐘datanode沒有向namenode發送心跳,則namenode認爲該datanode已經deadnamenode將取出該datanode上對應的block,對其進行復制。

Map的數據流

   原理:利用一個輸入key/value pair集合來產生一個輸出的key/value pair集合

   Map函數:接受一個輸入的key/value pair值,然後產生一箇中間key/value pair值的集合。

   Reduce函數:接受一個由Map函數產生的中間key值和其相關的一個value值集合,然後分析合併這些value

   在MapReduce中作業(Job)是客戶端需要執行的工作單元,它包含了輸入數據、MapReduce程序和配置信息。Hadoop將作業分爲若干個小任務(task)來執行,其中每個小任務又分爲Map任務和Reduce任務。

兩類節點控制着作業執行過程:一個JobTracker和多個TaskTrackerJobTracker主要就是調度TaskTracker來運行小任務,協調所有運行在系統上的作業。TaskTracker在運行小任務的時候,將進度報告給JobTracker,這樣一旦發生錯誤,就由JobTracker來負責調度另一個TaskTrackerTaskTracker每隔3秒向JobTracker發送心跳來詢問是否有任務可做,如有則讓你分發任務給它,此時就是slave主動向master諮詢。

Hadoop對於用戶輸入的作業中的輸入數據,由MapReduce將其劃分爲等長的小數據塊。

Hadoop僅僅在存儲有輸入數據的節點上運行Map任務,而且Map任務將其輸出寫入到本地磁盤中。當Map開始產生輸出時候,數據首先寫到內存的緩衝區中,進行預排序。這個默認的內存循環緩衝區大小爲100MB,直到緩衝區達到80%的時候纔將其數據spill到磁盤中。在輸出中間結果的時候,可以使用Combiner來對其進行一個簡單壓縮。當緩衝區達到閥值的時候,都會產生一個spill文件,一個Map可能產生多個spill,Map任務完成之前,都會將其產生的spill文件進行歸併排序,然後刪除臨時的spill文件,通知TaskTracker自己的Map執行完畢.

只要有一個Map任務完成,則Reduce就開始拷貝其輸出,一個Reduce有多個拷貝線程。Reduce會對其Map的輸出進行歸併排序處理。Reduce的輸出結果最終會存儲在HDFS中,當有多個reduce任務,每個map任務都會爲每一個reduce任務建立一個分區


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章