淺析Hadoop基礎原理
2011年的時候我們在百度搜尋Hadoop相關的問題每天只有零星幾個,2015年再去百度搜尋Hadoop已經有800多萬個問題,而如今已然已經過億了,Hadoop已成為大資料必備的基礎設施了。Hadoop被公認是一套行業大資料標準開源軟體,在分散式環境下提供了海量資料的處理能力。幾乎所有主流廠商都圍繞Hadoop開發工具、開源軟體、商業化工具和技術服務。近年大型IT公司,如EMC、Microsoft、Intel、Teradata、Cisco都明顯增加了Hadoop方面的投入。那麼到底什麼是Hadoop?它有什麼作用?它的基礎架構是怎麼樣的?今天就Hadoop的這些基本概念來做一次簡單的梳理。
一、Hadoop是什麼?
Hadoop是一個由Apache基金會所開發的分散式系統基礎架構, 是一個儲存系統+計算框架的軟體框架。主要解決海量資料儲存與計算的問題,是大資料技術中的基石。Hadoop以一種可靠、高效、可伸縮的方式進行資料處理,使用者可以在不瞭解分散式底層細節的情況下,開發分散式程式,使用者可以輕鬆地在Hadoop上開發和執行處理海量資料的應用程式。
二、Hadoop能解決什麼問題
1、海量資料儲存
HDFS有高容錯性的特點,並且設計用來部署在低廉的(low-cost)硬體上;而且它提供高吞吐量(High throughput)來訪問資料,適合那些有著超大資料集(large data set)的應用程式,它由n臺執行著DataNode的機器組成和1臺(另外一個standby)執行NameNode程式一起構成。每個DataNode 管理一部分資料,然後NameNode負責管理整個HDFS 叢集的資訊(儲存後設資料)。
2、資源管理,排程和分配
Apache Hadoop YARN(Yet Another Resource Negotiator,另一種資源協調者)是一種新的 Hadoop 資源管理器,它是一個通用資源管理系統和排程平臺,可為上層應用提供統 一的資源管理和排程,它的引入為叢集在利用率、資源統一管理和資料共享等方面帶來了巨 大好處。
三、Hadoop元件架構是什麼樣的
看過了Hadoop 的基本介紹之後。我們來了解HDFS 和 YARN的核心架構和原理,先上HDFS框架圖:
看完上面的圖之後,先來思考幾個問題:
1、後設資料資訊是什麼,NameNode是如何維護後設資料的,後設資料資訊如何保障一致性?
NameNode維護了HDFS 叢集的後設資料資訊,包括檔案的目錄樹,每個檔案對應的資料塊列表,許可權設定,副本數等等。
後設資料資訊儲存在記憶體裡,那麼NameNode異常當機情況下咋辦?
NameNode對後設資料的修改包含兩個部分
記憶體資料修改
修改記憶體之後寫一條EditLog
再來看兩個概念 FsImage 和 EditLog:
FsImage:FsImage是NameNode記憶體中後設資料的映象檔案,是後設資料的一個永久性checkpoint,包含了HDFS的所有目錄和檔案idnode的序列化資訊,可以類比銀行的賬戶餘額,只有簡單的資訊。
EditLog:EditLog是用於銜接記憶體後設資料和FsImage之間的操作日誌,儲存了自最後一次檢查點之後,所有針對HDFS檔案系統的操作,比如增加檔案、重新命名檔案、刪除目錄等等,可以類比銀行的賬戶流水,包括每一筆的記錄,如果日積月累,流水資訊可以非常大。
那麼如果Editlog變的非常大之後,當機之後需要讀取Editlog進行恢復後設資料,這是一個非常慢點過程。這個時候該StandbyNameNode 節點上場了。Standby 節點從JournalNode集合拉取Editlog,並定時將Editlog合併成FsImage. FsImage是一份合併之後的存量資料資訊。同時將FsImage 上傳到ActiveNode節點。
2、NameNode Active 和 standby 之間是如何切換並始終保持一個ActiveNode?
我們可以在上面的HDFS框架圖中看到,連結ZK叢集和NameNode的元件ZKFC
1、ZKFC 監控NameNode的監控狀態
2、ZKFC 利用ZK提供的主備節點選舉來切換
3、通知和修改NameNode的狀態
4、確認後設資料同步完成之後對外提供服務
再來看YARN框架圖:
上圖描述了YARN的一個任務的提交和資源分配流程,在整個過程中涉及到如下的元件:
ResourceManeger:負責所有資源的監控、分配和管理,並處理客戶端請求,啟動和監控AppMaster,NodeManager
NodeManager:單個節點上的資源管理和任務管理,處理ResourceManager,AppMaster 的命令
AppMaster:負責某個具體應用程式的排程和協調,為應用程式申請資源,並對任務進行監控
Container:YARN中的一個動態資源分配的概念,其擁有一定的記憶體,核數。
一個任務提交的整體流程:
(1)Client向YARN中提交應用程式,
其中包括ApplicationMaster程式、命令、使用者程式,資源等。
(2)ResourceManager為該應用程式分配第一個Container,並與對應的NodeManager通訊,要求它在這個Container中啟動應用程式的ApplicationMaster。
(3)ApplicationMaster首先向ResourceManager註冊,這樣使用者可以直接透過ResourceManager檢視應用程式的執行狀態,然後它將為各個任務申請資源,並監控它的執行狀態
(4)ApplicationMaster採用輪詢的方式透過RPC協議向ResourceManager申請和領取資源。
(5)一旦ApplicationMaster申請到資源後,便與對應的NodeManager通訊,要求它啟動任務。
(6)NodeManager為任務設定好執行環境(包括環境變數、Jar包、二進位制程式等)後,將任務啟動命令寫到一個指令碼中,並透過執行該指令碼啟動任務。
(7)各個任務透過某個RPC協議向ApplicationMaster彙報自己的狀態和進度,以讓ApplicationMaster隨時掌握各個任務的執行狀態,從而可以在任務失敗時重新啟動任務。在應用程式執行過程中,使用者可隨時透過RPC向ApplicationMaster查詢應用程式的當前執行狀態。
(8)應用程式執行完成後,ApplicationMaster向ResourceManager登出並關閉自己。
透過上面的內容,可以對Hadoop 的一些基本框架有一些簡單的印象了。之後在使用的時候可以對照上面的結構圖和Hadoop 官網或者社群進行深入理解。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69995740/viewspace-2763773/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- koa原理淺析
- BTrace 原理淺析
- Seata原理淺析
- 淺析Promise原理Promise
- AQS原理淺析AQS
- Webpack 原理淺析Web
- InheritedWidget原理淺析
- 淺析DES原理
- 淺析大資料框架 Hadoop大資料框架Hadoop
- 淺析Redis基礎資料結構Redis資料結構
- markdown-it 原理淺析
- Hadoop叢集之淺析安全模式Hadoop模式
- Hadoop基礎Hadoop
- 淺析volatile原理及其使用
- redux-saga 原理淺析Redux
- react-loadable原理淺析React
- Vuex 原理淺析筆記Vue筆記
- Array、Slice、Map原理淺析
- MySQL事務原理淺析MySql
- HashSet淺析原理學習
- mydumper使用及原理淺析
- Webpack相關原理淺析Web
- ArrayList底層原理淺析
- javascript訂閱模式淺析和基礎例項JavaScript模式
- Hadoop3.2.1 【 YARN 】原始碼分析 :AdminService 淺析HadoopYarn原始碼
- JavaScript模組化原理淺析JavaScript
- 淺析Java8 Stream原理Java
- Flutter 高效能原理淺析Flutter
- iOS應⽤簽名原理淺析iOS
- 淺析RunLoop原理及其應用OOP
- webpack系列--淺析webpack的原理Web
- vue.js框架原理淺析Vue.js框架
- 淺析Vite本地構建原理Vite
- TSDB - VictoriaMetrics 技術原理淺析
- 淺析瀑布流佈局原理
- Zookeeper ZAB協議原理淺析協議
- 人工智慧定義的 IT 基礎設施淺析人工智慧
- 非對稱加密--RSA原理淺析加密