官术网_书友最值得收藏!

2.2 Hadoop生態(tài)系統(tǒng)

經(jīng)過多年的發(fā)展,Hadoop生態(tài)系統(tǒng)不斷完善和成熟,目前已經(jīng)包含了多個子項目(見圖2-2)。除了核心的HDFS和MapReduce以外,Hadoop生態(tài)系統(tǒng)還包括Zookeeper、HBase、Hive、Pig、Mahout、Sqoop、Flume、Ambari等功能組件。需要說明的是,Hadoop 2.0中新增了一些重要的組件,即HDFS HA和分布式資源調(diào)度管理框架YARN等,但是為了循序漸進(jìn)地理解Hadoop,在這里暫時不討論這些新特性,在系統(tǒng)學(xué)習(xí)完MapReduce章節(jié)內(nèi)容后,在第8章Hadoop再探討中將會詳細(xì)討論從Hadoop1.0到2.0的特性變化。

圖2-2 Hadoop生態(tài)系統(tǒng)

2.2.1 HDFS

Hadoop分布式文件系統(tǒng)(Hadoop Distributed File System,HDFS)是Hadoop項目的兩大核心之一,是針對谷歌文件系統(tǒng)(Google File System,GFS)的開源實現(xiàn)。HDFS具有處理超大數(shù)據(jù)、流式處理、可以運(yùn)行在廉價商用服務(wù)器上等優(yōu)點(diǎn)。HDFS 在設(shè)計之初就是要運(yùn)行在廉價的大型服務(wù)器集群上,因此在設(shè)計上就把硬件故障作為一種常態(tài)來考慮,可以保證在部分硬件發(fā)生故障的情況下仍然能夠保證文件系統(tǒng)的整體可用性和可靠性。HDFS放寬了一部分POSIX(Portable Operating System Interface)約束,從而實現(xiàn)以流的形式訪問文件系統(tǒng)中的數(shù)據(jù)。HDFS在訪問應(yīng)用程序數(shù)據(jù)時,可以具有很高的吞吐率,因此對于超大數(shù)據(jù)集的應(yīng)用程序而言,選擇HDFS作為底層數(shù)據(jù)存儲是較好的選擇。

2.2.2 HBase

HBase是一個提供高可靠性、高性能、可伸縮、實時讀寫、分布式的列式數(shù)據(jù)庫,一般采用HDFS作為其底層數(shù)據(jù)存儲。HBase是針對谷歌BigTable的開源實現(xiàn),二者都采用了相同的數(shù)據(jù)模型,具有強(qiáng)大的非結(jié)構(gòu)化數(shù)據(jù)存儲能力。HBase與傳統(tǒng)關(guān)系數(shù)據(jù)庫的一個重要區(qū)別是,前者采用基于列的存儲,而后者采用基于行的存儲。HBase具有良好的橫向擴(kuò)展能力,可以通過不斷增加廉價的商用服務(wù)器來增加存儲能力。

2.2.3 MapReduce

Hadoop MapReduce是針對谷歌MapReduce的開源實現(xiàn)。MapReduce是一種編程模型,用于大規(guī)模數(shù)據(jù)集(大于1 TB)的并行運(yùn)算,它將復(fù)雜的、運(yùn)行于大規(guī)模集群上的并行計算過程高度地抽象到了兩個函數(shù)——Map 和 Reduce 上,并且允許用戶在不了解分布式系統(tǒng)底層細(xì)節(jié)的情況下開發(fā)并行應(yīng)用程序,并將其運(yùn)行于廉價計算機(jī)集群上,完成海量數(shù)據(jù)的處理。通俗地說,MapReduce 的核心思想就是“分而治之”,它把輸入的數(shù)據(jù)集切分為若干獨(dú)立的數(shù)據(jù)塊,分發(fā)給一個主節(jié)點(diǎn)管理下的各個分節(jié)點(diǎn)來共同并行完成;最后,通過整合各個節(jié)點(diǎn)的中間結(jié)果得到最終結(jié)果。

2.2.4 Hive

Hive是一個基于Hadoop的數(shù)據(jù)倉庫工具,可以用于對Hadoop文件中的數(shù)據(jù)集進(jìn)行數(shù)據(jù)整理、特殊查詢和分析存儲。Hive 的學(xué)習(xí)門檻較低,因為它提供了類似于關(guān)系數(shù)據(jù)庫 SQL 語言的查詢語言——Hive QL,可以通過Hive QL語句快速實現(xiàn)簡單的MapReduce統(tǒng)計,Hive自身可以將Hive QL語句轉(zhuǎn)換為MapReduce任務(wù)進(jìn)行運(yùn)行,而不必開發(fā)專門的MapReduce應(yīng)用,因而十分適合數(shù)據(jù)倉庫的統(tǒng)計分析。

2.2.5 Pig

Pig是一種數(shù)據(jù)流語言和運(yùn)行環(huán)境,適合于使用Hadoop和MapReduce平臺來查詢大型半結(jié)構(gòu)化數(shù)據(jù)集。雖然MapReduce應(yīng)用程序的編寫不是十分復(fù)雜,但畢竟也是需要一定的開發(fā)經(jīng)驗的。Pig的出現(xiàn)大大簡化了Hadoop常見的工作任務(wù),它在MapReduce的基礎(chǔ)上創(chuàng)建了更簡單的過程語言抽象,為Hadoop應(yīng)用程序提供了一種更加接近結(jié)構(gòu)化查詢語言(SQL)的接口。Pig是一個相對簡單的語言,它可以執(zhí)行語句,因此當(dāng)我們需要從大型數(shù)據(jù)集中搜索滿足某個給定搜索條件的記錄時,采用 Pig要比 MapReduce具有明顯的優(yōu)勢,前者只需要編寫一個簡單的腳本在集群中自動并行處理與分發(fā),而后者則需要編寫一個單獨(dú)的MapReduce應(yīng)用程序。

2.2.6 Mahout

Mahout是Apache軟件基金會旗下的一個開源項目,提供一些可擴(kuò)展的機(jī)器學(xué)習(xí)領(lǐng)域經(jīng)典算法的實現(xiàn),旨在幫助開發(fā)人員更加方便快捷地創(chuàng)建智能應(yīng)用程序。Mahout包含許多實現(xiàn),包括聚類、分類、推薦過濾、頻繁子項挖掘。此外,通過使用 Apache Hadoop 庫,Mahout 可以有效地擴(kuò)展到云中。

2.2.7 Zookeeper

Zookeeper是針對谷歌Chubby的一個開源實現(xiàn),是高效和可靠的協(xié)同工作系統(tǒng),提供分布式鎖之類的基本服務(wù)(如統(tǒng)一命名服務(wù)、狀態(tài)同步服務(wù)、集群管理、分布式應(yīng)用配置項的管理等),用于構(gòu)建分布式應(yīng)用,減輕分布式應(yīng)用程序所承擔(dān)的協(xié)調(diào)任務(wù)。Zookeeper使用Java編寫,很容易編程接入,它使用了一個和文件樹結(jié)構(gòu)相似的數(shù)據(jù)模型,可以使用Java或者C來進(jìn)行編程接入。

2.2.8 Flume

Flume是Cloudera提供的一個高可用的、高可靠的、分布式的海量日志采集、聚合和傳輸?shù)南到y(tǒng)。Flume 支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方,用于收集數(shù)據(jù);同時,F(xiàn)lume 提供對數(shù)據(jù)進(jìn)行簡單處理并寫到各種數(shù)據(jù)接受方的能力。

2.2.9 Sqoop

Sqoop是SQL-to-Hadoop的縮寫,主要用來在Hadoop和關(guān)系數(shù)據(jù)庫之間交換數(shù)據(jù),可以改進(jìn)數(shù)據(jù)的互操作性。通過Sqoop可以方便地將數(shù)據(jù)從MySQL、Oracle、PostgreSQL等關(guān)系數(shù)據(jù)庫中導(dǎo)入Hadoop(可以導(dǎo)入HDFS、HBase或Hive),或者將數(shù)據(jù)從Hadoop導(dǎo)出到關(guān)系數(shù)據(jù)庫,使得傳統(tǒng)關(guān)系數(shù)據(jù)庫和Hadoop之間的數(shù)據(jù)遷移變得非常方便。Sqoop主要通過JDBC(Java DataBase Connectivity)和關(guān)系數(shù)據(jù)庫進(jìn)行交互,理論上,支持JDBC的關(guān)系數(shù)據(jù)庫都可以使Sqoop和Hadoop進(jìn)行數(shù)據(jù)交互。Sqoop 是專門為大數(shù)據(jù)集設(shè)計的,支持增量更新,可以將新記錄添加到最近一次導(dǎo)出的數(shù)據(jù)源上,或者指定上次修改的時間戳。

2.2.10 Ambari

Apache Ambari是一種基于Web的工具,支持Apache Hadoop集群的安裝、部署、配置和管理。Ambari目前已支持大多數(shù)Hadoop組件,包括HDFS、MapReduce、Hive、Pig、HBase、Zookeeper、Sqoop等。

主站蜘蛛池模板: 西畴县| 贡嘎县| 遂溪县| 孟州市| 天祝| 霍邱县| 股票| 屏东县| 太康县| 克拉玛依市| 朝阳市| 湖南省| 华蓥市| 桃园县| 姚安县| 车致| 老河口市| 东明县| 娱乐| 兴业县| 西和县| 古蔺县| 石屏县| 波密县| 同江市| 柞水县| 黄陵县| 长沙市| 甘泉县| 隆化县| 黔东| 江油市| 上饶市| 五台县| 天镇县| 银川市| 留坝县| 蓝山县| 万宁市| 乌拉特前旗| 武威市|