Hadoop學習-生態體系(ecosystem)概覽


0. 大背景

全球No.1搜索引擎公司谷歌(Google)面臨每天海量搜索引擎數據的問題,經過長時間的實踐積累,

谷歌形成了自己的大數據框架,但是並沒有開源,而是發表了一篇論文,闡述了自己的思想,在論文中

提到了MapReduce的方法。這篇論文,被Doug Cutting也就是后來的Hadoop之父所關注,引起了他極大的興趣。

因為,這個時候,他正在致力於一個項目,該項目需要多任務並行處理大量的數據,他和伙伴努力了多次,結果都不理想。

於是,Doug和他的團隊決定基於Google的MapReduce的思想重新開發一個框架。

經過一段時間的努力,於 2005 年秋天作為Lucene的子項目Nutch的一部分正式引入Hadoop項目作為Apache基金會的項目。

Hadoop這個名字不是一個縮寫,而是一個虛構的名字。該項目的創建者,Doug Cutting解釋Hadoop的得名 :“這個名字是我孩子給一個棕黃色的大象玩具命名的。

學習Hadoop建議的參考書:Hadoop權威指南,目前中文版到第3版,英文版已經到Edition 4, 該書的作者Tom White是Hadoop創始團隊的核心成員,是Hadoop委員會的成員。

大牛級的人物!!

 

2. 生態體系概覽

經過長時間的發展,Hadoop已經形成了自己的生態體系。

有些框架是諸如一些大公司如Yahoo, Facebook團隊所開發的,下面我們來看一下它的生態圖:

 從上圖可以看出,Apache Hadoop包含如下主要組件:

HDFS and MapReduce: 這是Hadoop的核心框架(也就是Doug Cutting和他的團隊所開發的)

* HBase, Hive, Pig:          這3個框架主要負責數據存儲和查詢,分別由不同公司開發,我們后面會介紹到

Flume, Sqoop:              負責數據的導入/導出

* Mahout:                          機器學習和分析

* Zookeeper:                   分布式協調

* Ambari:                     集群管理

* Avro:                             數據存儲和序列化

* HCatalog:                        元數據管理

 

3. 各組件分別介紹

1)Apache HBase

由於HDFS是只能追加數據的文件系統,它不允許數據的修改

所以,Apache HBase由此而誕生。

HBase是一個分布式的,隨機訪問的,面向列的數據庫系統。

HBase在HDFS的頂層運行,它允許應用程序開發人員直接讀寫HDFS數據

但是,唯一的缺陷在於:HBase並不支持SQL語句

所以,它也是NOSQL數據庫的一種。

然而,它提供了基於命令行的界面以及豐富的API函數來更新數據。

需要提到的是:HBase中的數據是以鍵值對的形式存儲在HDFS文件系統中的。

 

2)Apache Pig

Apache Pig由Yahoo開發,它提供了在MapReduce之上的抽象層。

它提供了一種叫做Pig Latin的被用來創建MapReduce程序的語言。

Pig Latin被程序員用來編寫程序,分析數據,通過它可以創建並行執行的任務,

從而可以更有效地利用Hadoop的分布式集群。

Pig有很多成功的大公司項目案例,如:eBay, LinkedIn, Twitter。

 

3)Apache Hive

Hive被用來作為大數據的數據倉庫,它也使用HDFS文件系統來存儲數據。

在Hive中我們不編寫MapReduce程序,因為Hive提供了一種類SQL語言,叫做HiveQL,

這讓開發者能夠迅速寫出類似關系型數據SQL查詢的點對點(ad-hoc)查詢

 

4)Apache ZooKeeper 

Hadoop通過節點(nodes)的方式提供相互間的通信。

ZooKeeper便是被用來管理這些節點的,它被用來協調各個節點。

除了管理節點以外,它還維護一些配置信息,並且對分布式系統的服務進行分組。

ZooKeeper可以獨立於Hadoop來運行,而不像生態系統中的其它組件一樣。

由於ZooKeeper是基於內存來管理信息的,因此它的性能相對來說還是挺高的。

 

5)Apache Mahout

Mahout是一個開源的機器學習庫,它能使Hadoop用戶高效地進行諸如數據分析,數據挖掘以及集群等一些列操作。

Mahout對於大數據集特別高效,它提供的算法經過性能優化能夠在HDFS文件系統上高效地運行MapReduce框架。

 

6)Apache HCatalog

HCatalog在Hadoop的頂層提供元數據的管理服務。

所有運行在Hadoop之上的軟件能夠使用HCatalog在HDFS文件系統中存儲它們的計划(schema)。

HCatalog以REST API的方式使第三方的軟件能夠創建,編輯和暴露表格的定義以及生成的元數據。

因此,我們通過HCatalog並不需要知道數據的物理位置在那里。

HCatalog提供了數據定義語句(DDL),通過它們MapReduce, Pig, Hive等的工作任務將以隊列的形式等待執行,如有需要

還可以監控它們各自的進度。

 

7)Apache Ambari

Ambari被用來監控Hadoop集群。

它提供了一些列特性,諸如:安裝向導,系統警告,集群管理,任務性能等。

Ambari也提供了RESTful的API以便與其他軟件進行整合。

 

8)Apache Avro

如何用過其它編程語言來有效地組織Hadoop的大數據,Avro便是為了這個目的而生。

Avro提供了各個節點上的數據的壓縮以及存儲。

基於Avro的數據存儲能夠輕松地被很多腳本語言諸如Python,或者非腳本語言如Java來讀取。

另外,Avro還可被用來MapReduce框架中數據的序列化。

 

9)Apache Sqoop

Sqoop被用來在Hadoop中高效地加載大數據集,例如它允許開發人員輕松地從一些數據源,如:

關系型數據庫,企業級數據倉庫,甚至應用程序導入/導出數據數據。

 

10)Apache Flume

Flume常被用來進行日志的聚合操作,它被用來作為ETL(Extract-Transform-Load) - 解轉加(解壓-轉換-加載)工具來使用。

 

好了,Hadoop生態體系以及它們的主要組件就大致介紹到這里了!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM