- 大數據技術原理與應用(第2版)
- 林子雨編著
- 1921字
- 2019-07-30 13:20:26
2.2 Hadoop生態系統
經過多年的發展,Hadoop生態系統不斷完善和成熟,目前已經包含了多個子項目(見圖2-2)。除了核心的HDFS和MapReduce以外,Hadoop生態系統還包括Zookeeper、HBase、Hive、Pig、Mahout、Sqoop、Flume、Ambari等功能組件。需要說明的是,Hadoop 2.0中新增了一些重要的組件,即HDFS HA和分布式資源調度管理框架YARN等,但是為了循序漸進地理解Hadoop,在這里暫時不討論這些新特性,在系統學習完MapReduce章節內容后,在第8章Hadoop再探討中將會詳細討論從Hadoop1.0到2.0的特性變化。

圖2-2 Hadoop生態系統
2.2.1 HDFS
Hadoop分布式文件系統(Hadoop Distributed File System,HDFS)是Hadoop項目的兩大核心之一,是針對谷歌文件系統(Google File System,GFS)的開源實現。HDFS具有處理超大數據、流式處理、可以運行在廉價商用服務器上等優點。HDFS 在設計之初就是要運行在廉價的大型服務器集群上,因此在設計上就把硬件故障作為一種常態來考慮,可以保證在部分硬件發生故障的情況下仍然能夠保證文件系統的整體可用性和可靠性。HDFS放寬了一部分POSIX(Portable Operating System Interface)約束,從而實現以流的形式訪問文件系統中的數據。HDFS在訪問應用程序數據時,可以具有很高的吞吐率,因此對于超大數據集的應用程序而言,選擇HDFS作為底層數據存儲是較好的選擇。
2.2.2 HBase
HBase是一個提供高可靠性、高性能、可伸縮、實時讀寫、分布式的列式數據庫,一般采用HDFS作為其底層數據存儲。HBase是針對谷歌BigTable的開源實現,二者都采用了相同的數據模型,具有強大的非結構化數據存儲能力。HBase與傳統關系數據庫的一個重要區別是,前者采用基于列的存儲,而后者采用基于行的存儲。HBase具有良好的橫向擴展能力,可以通過不斷增加廉價的商用服務器來增加存儲能力。
2.2.3 MapReduce
Hadoop MapReduce是針對谷歌MapReduce的開源實現。MapReduce是一種編程模型,用于大規模數據集(大于1 TB)的并行運算,它將復雜的、運行于大規模集群上的并行計算過程高度地抽象到了兩個函數——Map 和 Reduce 上,并且允許用戶在不了解分布式系統底層細節的情況下開發并行應用程序,并將其運行于廉價計算機集群上,完成海量數據的處理。通俗地說,MapReduce 的核心思想就是“分而治之”,它把輸入的數據集切分為若干獨立的數據塊,分發給一個主節點管理下的各個分節點來共同并行完成;最后,通過整合各個節點的中間結果得到最終結果。
2.2.4 Hive
Hive是一個基于Hadoop的數據倉庫工具,可以用于對Hadoop文件中的數據集進行數據整理、特殊查詢和分析存儲。Hive 的學習門檻較低,因為它提供了類似于關系數據庫 SQL 語言的查詢語言——Hive QL,可以通過Hive QL語句快速實現簡單的MapReduce統計,Hive自身可以將Hive QL語句轉換為MapReduce任務進行運行,而不必開發專門的MapReduce應用,因而十分適合數據倉庫的統計分析。
2.2.5 Pig
Pig是一種數據流語言和運行環境,適合于使用Hadoop和MapReduce平臺來查詢大型半結構化數據集。雖然MapReduce應用程序的編寫不是十分復雜,但畢竟也是需要一定的開發經驗的。Pig的出現大大簡化了Hadoop常見的工作任務,它在MapReduce的基礎上創建了更簡單的過程語言抽象,為Hadoop應用程序提供了一種更加接近結構化查詢語言(SQL)的接口。Pig是一個相對簡單的語言,它可以執行語句,因此當我們需要從大型數據集中搜索滿足某個給定搜索條件的記錄時,采用 Pig要比 MapReduce具有明顯的優勢,前者只需要編寫一個簡單的腳本在集群中自動并行處理與分發,而后者則需要編寫一個單獨的MapReduce應用程序。
2.2.6 Mahout
Mahout是Apache軟件基金會旗下的一個開源項目,提供一些可擴展的機器學習領域經典算法的實現,旨在幫助開發人員更加方便快捷地創建智能應用程序。Mahout包含許多實現,包括聚類、分類、推薦過濾、頻繁子項挖掘。此外,通過使用 Apache Hadoop 庫,Mahout 可以有效地擴展到云中。
2.2.7 Zookeeper
Zookeeper是針對谷歌Chubby的一個開源實現,是高效和可靠的協同工作系統,提供分布式鎖之類的基本服務(如統一命名服務、狀態同步服務、集群管理、分布式應用配置項的管理等),用于構建分布式應用,減輕分布式應用程序所承擔的協調任務。Zookeeper使用Java編寫,很容易編程接入,它使用了一個和文件樹結構相似的數據模型,可以使用Java或者C來進行編程接入。
2.2.8 Flume
Flume是Cloudera提供的一個高可用的、高可靠的、分布式的海量日志采集、聚合和傳輸的系統。Flume 支持在日志系統中定制各類數據發送方,用于收集數據;同時,Flume 提供對數據進行簡單處理并寫到各種數據接受方的能力。
2.2.9 Sqoop
Sqoop是SQL-to-Hadoop的縮寫,主要用來在Hadoop和關系數據庫之間交換數據,可以改進數據的互操作性。通過Sqoop可以方便地將數據從MySQL、Oracle、PostgreSQL等關系數據庫中導入Hadoop(可以導入HDFS、HBase或Hive),或者將數據從Hadoop導出到關系數據庫,使得傳統關系數據庫和Hadoop之間的數據遷移變得非常方便。Sqoop主要通過JDBC(Java DataBase Connectivity)和關系數據庫進行交互,理論上,支持JDBC的關系數據庫都可以使Sqoop和Hadoop進行數據交互。Sqoop 是專門為大數據集設計的,支持增量更新,可以將新記錄添加到最近一次導出的數據源上,或者指定上次修改的時間戳。
2.2.10 Ambari
Apache Ambari是一種基于Web的工具,支持Apache Hadoop集群的安裝、部署、配置和管理。Ambari目前已支持大多數Hadoop組件,包括HDFS、MapReduce、Hive、Pig、HBase、Zookeeper、Sqoop等。
- Getting Started with Oracle SOA B2B Integration:A Hands-On Tutorial
- 計算機應用復習與練習
- 菜鳥起飛系統安裝與重裝
- 深度學習與目標檢測
- 網絡服務搭建、配置與管理大全(Linux版)
- Linux Shell編程從初學到精通
- Linux系統下C程序開發詳解
- Microsoft Dynamics CRM 2013 Marketing Automation
- PostgreSQL 10 High Performance
- Mastering Machine Learning with R
- AVR單片機C語言程序設計實例精粹
- 多傳感器數據智能融合理論與應用
- 數字中國:大數據與政府管理決策
- 群體智能與智能網聯:原理、算法與應用
- Photoshop CS6兒童數碼照片處理達人秘笈