Hadoop概述
Hadoop這個單詞本身並沒有什麼特殊的含義,而只是其作者Doug Cutting孩子的一個棕黃色的大象玩具的名字。
Hadoop是一個高可靠的(reliable),規模可擴展的(scalable),分布式(distributed computing)的開源軟體框架。它使我們能用一種簡單的編程模型來處理存儲於集群上的大數據集。
Hadoop是Apache基金會的一個開源項目,是一個提供了分布式存儲和分布式計算功能的基礎架構平台。可以應用於企業中的數據存儲,日誌分析,商業智能,數據挖掘等。
hadoop核心組件
1. hadoop包含的模塊:
2. HDFS:
HDFS是谷歌GFS的一個開源實現,具有擴展性,容錯性,海量數據存儲的特點:
數據切分,多副本,容錯等機制都是Hadoop底層已經設計好的,對用戶透明,用戶不需要關係細節。只需要按照對單機文件的操作方式,就可以進行分布式文件的操作。如文件的上傳,查看,下載等。
多副本存儲示例:
HDFS多副本存儲示意圖
以part-1為例進行說明,它被分成三個block,block_id分別是2,4,5,且副本係數為3。可以看到在DataNode上,2,4,5都各存儲在了三個節點上,這樣當其中一個節點故障時,仍然能夠保證文件的可用。block_id存在的必要性在於,在用戶需要對文件進行操作時,相應的block能夠按順序進行「組合」起來。
3. YARN:
Yarn的全稱是Yet Another Resource Negotiator,負責整個集群資源的管理和調度。例如對每個作業,分配CPU,內存等等,都由yarn來管理。它的特點是擴展性,容錯性,多框架資源統一調度。
擴展性和HDFS的擴展性類似,yarn也很容易擴展其計算資源。
容錯性,主要是指當某個任務出現異常,yarn會對其進行一定次數的重試。
多框架資源統一調度,這個是相對於hadoop1.0版本的一個優勢。區別於hadoop1.0只支持MapReduce作業。而yarn之上可以運行不同類型的作業。如下圖所示,很多應用都可以運行在yarn之上,由yarn統一進行調度。
運行在YARN上的多種應用
4. mapreduce:
是一個分布式計算框架,是GoogleMapReduce的克隆版。和HDFS、Yarn類似,也具有擴展性和容錯性的特點,還將具有海量數據離線處理的特點:能夠處理的數據量大,但並不是實時處理,具有較大的延時性。
MapReduce計算過程示意圖
WordCount的MapReduce流程如圖所示,主要分為Map和Reduce兩個過程。Map階段做映射,對所有輸入的單詞賦值為1,Reduce階段做匯總,相同的單詞分發到一個節點上並進行求和,最終就可以統計出單詞的個數。
hadoop的優勢
hadoop的優勢主要體現在高可靠性,高擴展性等方面。
高可靠性是指多副本的存儲機制和失敗作業的重新調度計算。
高擴展性是指資源不夠時很容易直接擴展機器。一個集群可以包含數以千計的節點。
其他優勢還表現在:hadoop完全可以部署在普通廉價的機器上,成本低。同時它具有成熟的生態圈和開源社區。
狹義hadoop VS 廣義hadoop:
狹義hadoop:指一個用於大數據分布式存儲(HDFS),分布式計算(MapReduce)和資源調度(YARN)的平台,這三樣只能用來做離線批處理,不能用於實時處理,因此才需要生態系統的其他的組件。
廣義的hadoop:指的是hadoop的生態系統,即其他各種組件在內的一整套軟體。hadoop生態系統是一個很龐大的概念,hadoop只是其中最重要最基礎的部分,生態系統的每一個子系統只結局的某一個特定的問題域。不是一個全能系統,而是多個小而精的系統。
hadoop生態系統
hadoop生態系統
上圖是hadoop生態系統的一個構成。HDFS是基礎的文件系統,用來存儲數據,多副本,高容錯。MapReduce用來進行並行計算,它運行在Yarn之上。這是前文提到過的三大核心組件,下面我們簡要介紹圖中的其他部分。
由於MapReduce的學習成本相對較高,這樣就誕生了一些其他框架。
Hive 處理的是海量結構化日誌數據的統計問題。它定義了一種類似SQL的語言Hive QL,藉助於hive引擎能將其轉換為MapReduce作業並提交到集群上進行運算。hive適用於離線處理。相比之下,SQL的門檻就低得多
Mahout是一個機器學習算法庫,實現了很多數據挖掘的經典算法,幫助用戶很方便地創建應用程式。
Pig可以將腳本任務轉換為MapReduce作業,同樣是適用於離線分析。
Oozie是一個工作流調度引擎,用來處理具有依賴關係的作業調度。類似的框架有Azkaban,airflow等。
Zookeeper:分布式協調服務,「動物園管理員」角色,是一個對集群服務進行管理的框架,如維護故障切換等。
Flume:日誌收集框架。將多種應用伺服器上的日誌,統一收集到HDFS上,這樣就可以使用hadoop進行處理
Sqoop:提供關係型資料庫與HDFS數據相互傳輸的功能。
Hbase:面向列存儲的資料庫。適用於實時快速查詢的場景。
除此之外,還有spark,kafka,flink,redis等新興的一些實用框架。
Hadoop生態系統的特點:
hadoop發行版本的選擇
總結
關於Hadoop概述的知識就講解到這裡。