Hadoop 生態圈介紹
首先我們先了解一下Hadoop的起源。然後介紹一些關於Hadoop生態系統中的具體工具的使用方法。如:HDFS、MapReduce、Yarn、Zookeeper、Hive、HBase、Oozie、Mahout、Pig、Flume、Sqoop。
Hadoop的起源
Doug Cutting是Hadoop之父 ,起初他開創了一個開源軟體Lucene(用Java語言編寫,提供了全文檢索引擎的架構,與Google類似),Lucene後來面臨與Google同樣的錯誤。於是,Doug Cutting學習並模仿Google解決這些問題的辦法,產生了一個Lucene的微縮版Nutch。
後來,Doug Cutting等人根據2003-2004年Google公開的部分GFS和Mapreduce思想的細節,利用業餘時間實現了GFS和Mapreduce的機制,從而提高了Nutch的效能。由此Hadoop產生了。
Hadoop於2005年秋天作為Lucene的子專案Nutch的一部分正式引入Apache基金會。2006年3月份,Map-Reduce和Nutch Distributed File System(NDFS)分別被納入Hadoop的專案中。
關於Hadoop名字的來源,是Doug Cutting兒子的玩具大象。
Hadoop是什麼
Hadoop是一個開源框架,可編寫和執行分散式應用處理大規模資料。 Hadoop框架的核心是HDFS和MapReduce。其中 HDFS 是分散式檔案系統,MapReduce 是分散式資料處理模型和執行環境。
在一個寬泛而不斷變化的分散式計算領域,Hadoop憑藉什麼優勢能脫穎而出呢?
1. 執行方便:Hadoop是執行在由一般商用機器構成的大型叢集上。Hadoop在雲端計算服務層次中屬於PaaS(Platform-as-a- Service):平臺即服務。
2. 健壯性:Hadoop致力於在一般的商用硬體上執行,能夠從容的處理類似硬體失效這類的故障。
3. 可擴充套件性:Hadoop通過增加叢集節點,可以線性地擴充套件以處理更大的資料集。
4. 簡單:Hadoop允許使用者快速編寫高效的並行程式碼。
Hadoop的生態系統
- 2) Nutch,網際網路資料及Nutch搜尋引擎應用
- 3) HDFS,Hadoop的分散式檔案系統
- 5) MapReduce,分散式計算框架
- 6) Flume、Scribe,Chukwa資料收集,收集非結構化資料的工具。
- 7) Hiho、Sqoop,講關係資料庫中的資料匯入HDFS的工具
- 8) Hive資料倉庫,pig分析資料的工具
- 10)Oozie作業流排程引擎
- 11)Hue,Hadoop自己的監控管理工具
- 12)Avro 資料序列化工具
- 13)mahout資料探勘工具
- 14)Hbase分散式的面向列的開源資料庫
Hadoop生態系統的特點
- 原始碼開源
- 社群活躍、參與者眾多
- 涉及分散式儲存和計算的方方面面
- 已得到企業界驗證
Hadoop生態系統的各組成部分詳解
上面的圖可能有些亂,下面我們用一個簡易的Hadoop生態系統圖譜來描述Hadoop生態系統中出現的各種資料工具。
Hadoop1.0時代的生態系統如下:
Hadoop2.0時代的生態系統如下:
Hadoop的核心
由上圖可以看出Hadoop1.0與Hadoop2.0的區別。Hadoop1.0的核心由HDFS(Hadoop Distributed File System)和MapReduce(分散式計算框架)構成。而在Hadoop2.0中增加了Yarn(Yet Another Resource Negotiator),來負責叢集資源的統一管理和排程。
HDFS(分散式檔案系統)
HDFS源自於Google發表於2003年10月的GFS論文,也即是說HDFS是GFS的克隆版。
此處只是HDFS的概述,如果想了解HDFS詳情,請檢視HDFS詳解這篇文章。
HDFS具有如下特點:
- 良好的擴充套件性
- 高容錯性
- 適合PB級以上海量資料的儲存
HDFS的基本原理
- 將檔案切分成等大的資料塊,儲存到多臺機器上
- 將資料切分、容錯、負載均衡等功能透明化
- 可將HDFS看成容量巨大、具有高容錯性的磁碟
HDFS的應用場景
- 海量資料的可靠性儲存
- 資料歸檔
Yarn(資源管理系統)
Yarn是Hadoop2.0新增的系統,負責叢集的資源管理和排程,使得多種計算框架可以執行在一個叢集中。
此處只是Yarn的概述,如果想了解Yarn詳情,請檢視Yarn詳解這篇文章。
Yarn具有如下特點:
- 良好的擴充套件性、高可用性
- 對多種資料型別的應用程式進行統一管理和資源排程
- 自帶了多種使用者排程器,適合共享叢集環境
MapReduce(分散式計算框架)
MapReduce源自於Google發表於2004年12月的MapReduce論文,也就是說,Hadoop MapReduce是Google MapReduce的克隆版。
此處只是MapReduce的概述,如果想了解MapReduce詳情,請檢視MapReduce詳解這篇文章。
MapReduce具有如下特點:
- 良好的擴充套件性
- 高容錯性
- 適合PB級以上海量資料的離線處理
Hive(基於MR的資料倉庫)
Hive由facebook開源,最初用於解決海量結構化的日誌資料統計問題;是一種ETL(Extraction-Transformation-Loading)工具。它也是構建在Hadoop之上的資料倉庫;資料計算使用MR,資料儲存使用HDFS。
Hive定義了一種類似SQL查詢語言的HiveQL查詢語言,除了不支援更新、索引和實物,幾乎SQL的其他特徵都能支援。它通常用於離線資料處理(採用MapReduce);我們可以認為Hive的HiveQL語言是MapReduce語言的翻譯器,把MapReduce程式簡化為HiveQL語言。但有些複雜的MapReduce程式是無法用HiveQL來描述的。
Hive提供shell、JDBC/ODBC、Thrift、Web等介面。
此處只是Hive的概述,如果想了解Hive詳情,請檢視Hive詳解這篇文章。
Hive應用場景
- 日誌分析:統計一個網站一個時間段內的pv、uv ;比如百度。淘寶等網際網路公司使用hive進行日誌分析
- 多維度資料分析
- 海量結構化資料離線分析
- 低成本進行資料分析(不直接編寫MR)
Pig(資料倉庫)
Pig由yahoo!開源,設計動機是提供一種基於MapReduce的ad-hoc資料分析工具。它通常用於進行離線分析。
Pig是構建在Hadoop之上的資料倉庫,定義了一種類似於SQL的資料流語言–Pig Latin,Pig Latin可以完成排序、過濾、求和、關聯等操作,可以支援自定義函式。Pig自動把Pig Latin對映為MapReduce作業,上傳到叢集執行,減少使用者編寫Java程式的苦惱。
Pig有三種執行方式:Grunt shell、指令碼方式、嵌入式。
此處只是Pig的概述,如果想了解Pig詳情,請檢視Pig詳解這篇文章。
Pig與Hive的比較
Mahout(資料探勘庫)
Mahout是基於Hadoop的機器學習和資料探勘的分散式計算框架。它實現了三大演算法:推薦、聚類、分類。
HBase(分散式資料庫)
HBase源自Google發表於2006年11月的Bigtable論文。也就是說,HBase是Google Bigtable的克隆版。
HBase可以使用shell、web、api等多種方式訪問。它是NoSQL的典型代表產品。
此處只是HBase的概述,如果想了解HBase詳情,請檢視HBase詳解這篇文章。
HBase的特點
- 高可靠性
- 高效能
- 面向列
- 良好的擴充套件性
HBase的資料模型
下面簡要介紹一下:
- Table(表):類似於傳統資料庫中的表
- Column Family(列簇):Table在水平方向有一個或者多個Column Family組成;一個Column Family 中可以由任意多個Column組成。
- Row Key(行健):Table的主鍵;Table中的記錄按照Row Key排序。
- Timestamp(時間戳):每一行資料均對應一個時間戳;也可以當做版本號。
Zookeeper(分散式協作服務)
Zookeeper源自Google發表於2006年11月的Chubby論文,也就是說Zookeeper是Chubby的克隆版。
Zookeeper解決分散式環境下資料管理問題:
- 統一命名
- 狀態同步
- 叢集管理
- 配置同步
Zookeeper的應用
- HDFS
- Yarn
- Storm
- HBase
- Flume
- Dubbo
- Metaq
Sqoop(資料同步工具)
Sqoop是連線Hadoop與傳統資料庫之間的橋樑,它支援多種資料庫,包括MySQL、DB2等;插拔式,使用者可以根據需要支援新的資料庫。
Sqoop實質上是一個MapReduce程式,充分利用MR並行的特點,充分利用MR的容錯性。
此處只是Sqoop的概述,如果想了解Sqoop詳情,請檢視Sqoop詳解這篇文章。
Flume(日誌收集工具)
Flume是Cloudera開源的日誌收集系統。
Flume的特點
- 分散式
- 高可靠性
- 高容錯性
- 易於定製與擴充套件
Flume OG與Flume NG的對比
- Flume OG:Flume original generation 即Flume 0.9.x版本,它由agent、collector、master等元件構成。
- Flume NG:Flume next generation ,即Flume 1.x版本,它由Agent、Client等元件構成。一個Agent包含Source、Channel、Sink和其他元件。
Oozie(作業流排程系統)
目前計算框架和作業型別種類繁多:如MapReduce、Stream、HQL、Pig等。這些作業之間存在依賴關係,週期性作業,定時執行的作業,作業執行狀態監控與報警等。如何對這些框架和作業進行統一管理和排程?
解決方案有多種:
- Linux Crontab
- 自己設計排程系統(淘寶等公司)
- 直接使用開源系統(Oozie)
Hadoop發行版(開源版)介紹
- Apache Hadoop
推薦使用2.x.x版本
- CDH(Cloudera Distributed Hadoop)
推薦使用CDH5版本
- HDP(HortonWorks Data Platform)
推薦使用HDP2.x版本
最後建議:關於不同發行版在架構、部署和使用方法一致,不同之處僅在於內部實現。建議選擇公司發行版,比如CDH或者HDP,因為它們經過整合測試,不會面臨版本相容性問題。
轉自:http://blog.csdn.net/u010270403/article/details/51493191