Hadoop基本原理

2021-08-08 09:54:59 字數 1415 閱讀 4792

hadoop是乙個用於海量資料統計分析的分布式計算框架,封裝了分布式計算中比較困難的程序間通訊、負載均衡,任務排程等模組,降低了學習門檻。在最簡單的程式實現中,僅僅需要重寫map和reduce方法,並實現任務提交邏輯。接下來,就讓我們一起推開hadoop的大門,走進大資料的神奇世界。

hadoop目前主要包括hadoop1.x和hadoop2.x,兩種版本差距較大,目前常用的是hadoop2.x版本,所以主要基於hadoop2.x進行講解

主要組成模組

上圖是mapreduce的工作原理,首先解釋一下各個組成模組的作用。

job:由客戶端向集群提交的一次計算任務。

task:集群的最小可執行單位(乙個job將會分為多個task執行)

resourcemanager(以下簡稱rm):管理整個集群的計算資源,主要用於為每乙個job分配計算資源(整個集群只有乙個rm)

container:資源分配單位,乙個container包括一些cpu和儲存資源

nodemanager(以下簡稱nm):管理單台伺服器的計算資源,類似rm的更細粒度實現(集群中每台伺服器有乙個nm)。

為了便於理解,下面有乙個並不是太恰當的比喻。類似乙個學生宿舍的構成,rm相當於宿舍管理處的大boss,而task則相當於乙個學生,大boss(rm)負責分配一片區域給某個班(job)的學生(task)住,而具體每個學生(task)住哪兒,則由班主任(am)和樓管(nm)商量(當然乙個班級的學生還是可以住在多個樓裡邊的)。

接下來具體解釋圖中每一步的作用:

client呼叫job提交介面,job被提交到集群上

為了便於標識job,會首先向rm請求乙個唯一id,並同時檢查job中的輸入/輸出路徑是否存在,如果輸入路徑不存在,則報錯;如果輸出路徑存在,也會報錯(注意別看錯了)

獲得唯一id之後,就把job所需資源(包括jar包和輸入路徑資訊)上傳到hdfs中(因為分布式環境的原因,需要將這些資源上傳到所有節點都能訪問到的目錄,即這裡的hdfs)

在完成以上步驟之後,則可以真正提交job到集群中。

啟動乙個job的時候,首先需要啟動該job的am,所以rm會主動分配nm上的乙個container(乙個container就是乙個jvm),用於執行am守護程序。

初始化job,包括啟動一些job執行狀態跟蹤物件。

從hdfs中讀取第3步上傳的輸入路徑資訊(包括輸入檔案所在的伺服器節點資訊,乙份輸入檔案可能儲存在多台伺服器上)。

根據上一步的檔案路徑資訊,向rm申請所需資源(container),盡量保證container和輸入檔案在同一臺伺服器上邊,能夠減小網路io(即資料本地化)

am根據rm分配的container,向container所屬的nm申請啟動task。

最後就是task的正式執行階段了。

Hadoop資料切片基本原理

資料切片問題 先給不懂得同學解釋一下概念 資料塊block 是hdfs物理資料塊,乙個大檔案丟到hdfs上,會被hdfs切分成指定大小的資料塊,即block 資料切片 資料切片是邏輯概念,只是程式在輸入資料的時候對資料進行標記,不會實際切分磁碟資料 切片1 假設檔案大小為300m,切片大小為100m...

Hadoop基本原理之一 MapReduce

1 為什麼需要hadoop 目前,一塊硬碟容量約為1tb,讀取速度約為100m s,因此完成一塊硬碟的讀取需時約2.5小時 寫入時間更長 若把資料放在同一硬碟上,且全部資料均需要同乙個程式進行處理,此程式的處理時間將主要浪費在i o時間上。在過去幾十年,硬碟的讀取速度並未明顯增長,而網路傳輸速度此飛...

七 Hadoop基本原理總結 MapReduce

一 主要組成 1 job 由客戶端向集群提交的一次計算任務。2 task 集群的最小可執行單位 乙個job將會分為多個task執行 3 resourcemanager 以下簡稱rm 管理整個集群的計算資源,主要用於為每乙個job分配計算資源 整個集群只有乙個rm 4 container 資源分配單位...