一、概述
Hadoop這個名字的由來是Hadoopde之父Doug Cutting的孩子給一個棕黃色大象樣子的玩具起的名字
Hadoop官網地址http://hadoop.apache.org/
什麼是Hadoop?
官網原話:The Apache™ Hadoop® project develops open-source software for reliable, scalable, distributed computing.
翻譯過來:Apache的Hadoop項目是一個可靠的,可拓展的分佈式計算開源軟件
Hadoop 的功能是利用服務器集羣,根據用戶自定義業務邏輯對海量數據進行分佈式處理。它包括四個核心部分:Hadoop Common、Hadoop Distributed File System(HDFS)、Hadoop YARN、Hadoop MapReduce。
- Hadoop Commmon:支持其他Hadoop模塊的通用功能
- HDFS:分佈式文件系統,可提供對應用程序數據的高吞吐量訪問
- Hadoop YARN:作業調度和集羣資源管理的框架
- Hadoop MapReduce:基於YARN的並行處理大型數據集的框架
狹義Hadoop是指集分佈式文件系統(HDFS)和分佈式計算(MapReduce)以及集羣資源調度管理框架(YARN)的一個軟件平臺。
廣義的Hapdoop指的是Hadoop生態系統,在Hadoop生態中Hadoop是重要和基礎的一個部分,生態中包含了很多子系統,每一個子系統只能解決某一個特定的問題域。
Hadoop核心組件HDFS和YARN都是採用主從架構
在一個集羣中,會有部分節點充當主服務器的角色,其他服務器是從服務器的角色,這種架構模式就叫主從結構
- HDFS 的主節點是NameNode,從節點是DataNode
- YARN 的主節點是ResourceManager,從節點是NodeManager
二、核心組件——HDFS
- 源自於Google在2003年10月的GFS論文
- HDFS是GFS的一個開源實現版本
HDFS是一個分佈式的文件系統,其設計的核心思想:分散均勻存儲 + 備份冗餘存儲。HDFS會把一個大文件按照blocksize(塊大小)的要求將其拆分成多個block(塊),並以多副本的方式存儲在HDFS集羣中的多臺服務器的本地硬盤上,通過統一的命名空間來定位文件、由很多服務器聯合起來實現其功能。在一個HDFS集羣中包含兩個重要的部分:NameNode、DateNode
- **NameNode(NN)**是HDFS集羣的主節點,一個HDFS集羣中只有一個NN,負責維護目錄結構和文件分塊信息,同時還負責接收客戶端的請求進行處理
- **SecondaryNameNode(SNN)**是NN的一個冷備份,一個HDFS集羣中也只有一個SNN,SNN是保證Hadoop高可用和穩定性的設計,在NN無法正常工作時SNN會承擔NN的工作繼續服務,同時SNN也對NN有一定的輔助作用,它會從NN獲取fsimage和edits來進行合併,然後再發送給NN,以減少NN的工作負載
對namenode的操作都放在edits中,相當於一個文件操作的記錄
fsimage是namenode中關於元數據的鏡像,一般稱爲檢查點
- **DataNode(DN)**是HDFS集羣的從節點,在一個集羣中可以有多個DataNode,它是負責各個文件block的存儲管理,執行數據塊的讀寫操作。
特性
- 文件在物理上是分塊並以多副本的方式存儲
- HDFS文件系統給客戶端提供統一的抽象目錄樹,數據切分、多副本、容錯等操作對用戶是透明的
- 適用於一次寫入多次讀出的場景,不支持文件修改
- 適合存儲大文件,不適合存儲小文件(每個小文件都是一個block塊,存儲相同大小的文件,小文件會使用更多的塊,增大NN的負擔)
- 分散均勻存儲和備份冗餘存儲的設計思想,保證了存儲在HDFS上的數據高可用
劣勢
- 數據訪問延遲高
- 小文件存儲不友好
- 單用戶寫入不支持修改
三、核心組件——MapReduce
源自於Google在2004年12月發表的MapReduce論文
MapReduce是Google MapReduce的一個開源實現版本
MapReduce是一個分佈式計算編程框架,核心功能是將用戶編寫的業務邏輯代碼和自帶默認組件整合成一個完整的分佈式運算程序,併發運行在一個 Hadoop 集羣上。
一個MapReduce作業主要分爲兩部分Map(映射)和Reduce(歸約)。首先把輸入數據集切分成若干獨立數據塊,然後將數據塊分給多個Map任務並行處理,將map並行處理的結果輸入給reduce任務進行處理。
MapReduce作業的輸入和輸出都會被存儲在文件系統中,一般情況下運行MapReduce框架和運行HDFS文件系統的節點通常是在一起的。這種配置允許框架在那些已經存好數據的節點上高效地調度任務,這可以使整個集羣的網絡帶寬被非常高效地利用。當然MapReduce作業讀取的數據文件並不一定要求是在HDFS上,這是由用戶指定的,默認是HDFS。
MapReduce作業的過程描述
-
輸入文件的存儲位置
-
InputFormat接口可以設置文件分割的邏輯,對文件進行分割,將分割後的文件輸送給Mapper
-
Map讀取Input的key-value,根據用戶自定義邏輯進行計算,對Key和Value重新映射,產生新的key-value
-
經過Map後所產生的新的key-value會按key進行分區,並寫入一個環形內存緩衝區中
-
當環形緩衝區存滿後,會生成臨時文件,將數據寫在磁盤上(這個過程叫溢寫,本文只是概述不再詳細講解,在後續文章會細講)
-
Map中所有數據處理完畢後,會將所有臨時文件進行合併生成只生成一個數據文件
-
進入shuffle過程,將map的結果按照key進行分組,將相同的key的數據放在一起
-
在reduce函數中數據以 key-value 列表輸入,根據用戶自定義邏輯計算,產生新的key-value數據,將其作爲輸出結果存儲在HDFS上
四、核心組件——YARN
YARN是一個分佈式的資源管理和作業調度框架,負責將自己管理的系統資源分配給在集羣中運行的應用程序,並調度在不同集羣節點上執行的任務。YARN的設計是主從結構,包含兩個主要服務:ResourceManager、NodeManager,還有兩個重要概念:ApplicationMaster、Container
-
**ResourceManager(RM)**是YARN的主節點服務,是在系統中的所有應用程序之間仲裁資源的最終權限
-
**NodeManager(NM)**是YARN服務的從節點,是每個節點上的資源和任務管理器,負責 Containers的啓動停止以及運行狀態監控,監視其當前節點資源使用情況(CPU,內存,磁盤,網絡)並將其報告給 RM
-
**ApplicationMaster(AM)**是每個用戶程序的管理者,每個運行在YARN上的應用程序都有一個AM,負責與RM協商進行資源獲取,負責監控、管理Application在各個節點上的具體運行的內部任務
-
Container封裝了某個節點上的多維度資源,如內存、CPU、磁盤、網絡等,當AM向RM申請資源時,RM爲AM返回的資源便是使用Container作爲單位表示。YARN會爲每個任務分配一個Container,且該任務只能使用該Container中描述的資源
五、其他
優勢
- 可靠性
數據存儲:數據塊多副本,NameNode主備設計
數據計算:失敗任務會重新調度計算
- 可拓展性
可橫向的線性拓展集羣節點
集羣中節點的個數可以數以千計
-
存儲在廉價機器上,成本低
-
有一個相對成熟的生態圈
常用發行版
- Apache版本
完全開源
不同版本、不同框架的整合比較麻煩
- CDH發行版
cloudera manager可視化安裝,組件管理方便
cloudera manager不開源,且組件與Apache社區版稍有改動
- HortonWorks(HDP)
原裝Hadoop、純開源、可以基於頁面框架自己定製改造
企業級安全服務不開源
.
文章歡迎轉載,轉載請註明出處,個人公衆號【愛做夢的錘子】,全網同id,個站 http://te-amo.site,歡迎關注,裏面會分享更多有用知識,還有我的私密照片