大資料時代之hadoop 了解hadoop資料流

2021-09-23 11:45:15 字數 1741 閱讀 6731

了解hadoop,首先就需要先了解hadoop的資料流,就像了解servlet的生命週期似的。hadoop是乙個分布式儲存(hdfs)和分布式計算框架(mapreduce),但是hadoop也有乙個很重要的特性:hadoop會將mapreduce計算移動到儲存有部分資料的各台機器上。

術語

mapreduce 作業(job)是客戶端需要執行的乙個工作單元:它包括輸入資料、mapreduce程式和配置資訊。hadoop將作業分成若干個小任務(task)來執行,其中包括兩類任務:map任務和reduce任務。

有兩類節點控制著作業執行過程:乙個jobtracker及一系列tasktracker。 jobtracker通過排程tasktracker上執行的任務,來協調所有執行在系統上的作業。tasktracker在執行任務的同時將執行進度報 告發送給jobtracker,jobtracker由此記錄每項作業任務的整體進度情況。如果其中乙個任務失敗,jobtracker可以在另外乙個 tasktracker節點上重新排程該任務。

輸入

hadoop將mapreduce的輸入資料劃分成等長的小資料塊,稱為輸入分片(input split)或簡稱分片。hadoop為每個分片構建乙個map任務,並由該任務來執行使用者自定義的map函式從而處理分片中的每條記錄。 對於大多數作業來說,乙個合理的分片大小趨向於hdfs的乙個塊的大小,預設是64m,不過可以針對集群調整這個預設值。分片的大小一定要根據執行的任務來定,如果分片過小,那麼管理分片的總時間和構建map任務的總時間將決定著作業的整個執行時間。

hadoop在儲存有輸入資料的節點上執行map任務,可以獲得最佳效能,這就是所謂的資料本地化優化。 因為塊是hdfs儲存資料的最小單元,每個塊可以在多個節點上同時存在(備份),乙個檔案被分成的各個塊被隨機分部在多個節點上,因此如果乙個map任務 的輸入分片跨越多個資料塊,那麼基本上沒有乙個節點能夠恰好同時存在這幾個連續的資料塊,那麼map任務就需要首先通過網路將不存在於此節點上的資料塊遠 程複製到本節點上再執行map函式,那麼這種任務顯然效率非常低。

輸出

map任務將其輸出寫入到本地磁碟,而非hdfs。這是因為map的輸出是中間結果:該中間結果有reduce任務處理後才產生最終結果(儲存在hdfs中)。而一旦作業完成,map的輸出結果可以被刪除。

資料流

作業根據設定的reduce任務的個數不同,資料流也不同,但大同小異。reduce任務的數量並非由輸入資料的大小決定的,而是可以通過手動配置指定的。

單個reduce任務

多個reduce任務

如果是多個reduce任務的話,則每個map任務都會對其輸出進行分割槽(partition),即為每個reduce任務建立乙個分割槽。分割槽有使用者定義的分割槽函式控制,預設的分割槽器(partitioner) 通過雜湊函式來分割槽。

map任務和reduce任務之間的資料流稱為shuffle(混洗)。

沒有reduce任務

當然也可能出現不需要執行reduce任務的情況,即資料可以完全的並行。

combiner(合併函式)

順便在這說下combiner吧,hadoop執行使用者針對map任務的輸出指定乙個合併函式,合併函式的輸出作為reduce函式的輸入。其實合併函式 就是乙個優化方案,說白了就是在map任務執行後在本機先執行合併函式(通常就是reduce函式的拷貝),減少網路傳輸量。

未來大資料時代,Hadoop會被Spark取代

由雅虎為工程師和資料科學家打造的apache hadoop曾因巨大的潛力而備受稱讚,但如今它卻受到了更快的產品的影響,而這些產品往往來自於它本身的生態系統 spark就是其中之一。今年早些,h20.ai的創始人sri ambati對datanami 曾說 spark將會使hadoop處於絕地 但在過...

大資料hadoop之yarn

yarn是乙個資源排程平台負責為運算程式提供伺服器運算資源,相當於乙個分布式作業系統平台,mr等程式在上面執行。mr程式把任務提交到客戶端所在節點 rm將使用者請求初始化乙個task進入自己的任務排程佇列,傳送task任務到nm am向rm申請執行maptask容器 rm向nm分配maptask,n...

大資料之 hadoop 簡介

簡介 hadoop 是乙個由 apache 會所開發的分布式系統基礎架構,它可以使使用者在不了解分布式底層細節的情況下開發分布式程式,充分利用集群的威力進行高速運算和儲存。從其定義就可以發現,它解決了兩大問題 大資料儲存 大資料分析。也就是 hadoop 的兩大核心 hdfs 和 mapreduce...