Hadoop生態系統各組件功能

參考: Spark編程基礎(Scala版) 林子雨 賴永炫 陶繼平 人民郵電出版社出版 2018-07-01

在這裏插入圖片描述

1.HDFS 分佈式文件系統

Hadoop分佈式文件系統HDFS是針對谷歌分佈式文件系統(Google File System,GFS)的開源實現,它是Hadoop兩大核心組成部分之一,提供了在廉價服務器集羣中進行大規模分佈式文件存儲的能力。

HDFS具有很好的容錯能力,並且兼容廉價的硬件設備,因此,可以以較低的成本利用現有機器實現大流量和大數據量的讀寫。

HDFS採用了主從(Master/Slave)結構模型,一個HDFS集羣包括一個名稱節點和若干個數據節點。名稱節點作爲中心服務器,負責管理文件系統的命名空間及客戶端對文件的訪問。

集羣中的數據節點一般是一個節點運行一個數據節點進程,負責處理文件系統客戶端的讀/寫請求,在名稱節點的統一調度下進行數據塊的創建、刪除和複製等操作。

客戶端訪問文件機制

在這裏插入圖片描述
用戶在使用 HDFS 時,仍然可以像在普通文件系統中那樣,使用文件名去存儲和訪問文件。

實際上,在系統內部,一個文件會被切分成若干個數據塊,這些數據塊被分佈存儲到若干個數據節點上。

當客戶端需要訪問一個文件時,首先把文件名發送給名稱節點,名稱節點根據文件名找到對應的數據塊(一個文件可能包括多個數據塊),再根據每個數據塊信息找到實際存儲各個數據塊的數據節點的位置,並把數據節點位置發送給客戶端,最後,客戶端直接訪問這些數據節點獲取數據。在整個訪問過程中,名稱節點並不參與數據的傳輸。

這種設計方式,使得一個文件的數據能夠在不同的數據節點上實現併發訪問,大大提高了數據的訪問速度。

2.MapReduce

MapReduce 是一種分佈式並行編程模型,用於大規模數據集(大於1TB)的並行運算,它將複雜的、運行於大規模集羣上的並行計算過程高度抽象到兩個函數:Map和Reduce。MapReduce極大方便了分佈式編程工作,編程人員在不會分佈式並行編程的情況下,也可以很容易將自己的程序運行在分佈式系統上,完成海量數據集的計算。

並行計算流程

在這裏插入圖片描述

在MapReduce中,一個存儲在分佈式文件系統中的大規模數據集,會被切分成許多獨立的小數據塊,這些小數據塊可以被多個Map任務並行處理。MapReduce框架會爲每個Map任務輸入一個數據子集,Map任務生成的結果會繼續作爲Reduce任務的輸入,最終由Reduce任務輸出最後結果,並寫入分佈式文件系統。

涉及理念:計算向數據靠攏

MapReduce 設計的一個理念就是“計算向數據靠攏”,而不是“數據向計算靠攏”,因爲移動數據需要大量的網絡傳輸開銷,尤其是在大規模數據環境下,這種開銷尤爲驚人,所以,移動計算要比移動數據更加經濟。本着這個理念,在一個集羣中,只要有可能,MapReduce框架就會將Map程序就近地在 HDFS 數據所在的節點運行,即將計算節點和存儲節點放在一起運行,從而減少了節點間的數據移動開銷。

3.YARN

YARN 是負責集羣資源調度管理的組件。YARN 的目標就是實現“一個集羣多個框架”,即在一個集羣上部署一個統一的資源調度管理框架YARN,在YARN之上可以部署其他各種計算框架,比如MapReduce、Tez、Storm、Giraph、Spark、OpenMPI等,由YARN爲這些計算框架提供統一的資源調度管理服務(包括 CPU、內存等資源),並且能夠根據各種計算框架的負載需求,調整各自佔用的資源,實現集羣資源共享和資源彈性收縮。

通過這種方式,可以實現一個集羣上的不同應用負載混搭,有效提高了集羣的利用率,同時,不同計算框架可以共享底層存儲,在一個集羣上集成多個數據集,使用多個計算框架來訪問這些數據集,從而避免了數據集跨集羣移動,最後,這種部署方式也大大降低了企業運維成本。

YARN支持的計算框架

在這裏插入圖片描述

目前,可以運行在YARN之上的計算框架包括離線批處理框架MapReduce、內存計算框架Spark、流計算框架Storm和DAG計算框架Tez等。和YARN一樣提供類似功能的其他資源管理調度框架還包括Mesos、Torca、Corona、Borg等。

4.HBase

HBase 是針對谷歌 BigTable 的開源實現,是一個高可靠、高性能、面向列、可伸縮的分佈式數據庫,主要用來存儲非結構化和半結構化的鬆散數據。

HBase可以支持超大規模數據存儲,它可以通過水平擴展的方式,利用廉價計算機集羣處理由超過10億行元素和數百萬列元素組成的數據表

HBase利用MapReduce來處理HBase中的海量數據,實現高性能計算;利用 Zookeeper 作爲協同服務,實現穩定服務和失敗恢復;使用HDFS作爲高可靠的底層存儲,利用廉價集羣提供海量數據存儲能力,當然,HBase也可以在單機模式下使用,直接使用本地文件系統而不用 HDFS 作爲底層數據存儲方式,不過,爲了提高數據可靠性和系統的健壯性,發揮HBase處理大量數據等功能,一般都使用HDFS作爲HBase的底層數據存儲方式。此外,爲了方便在HBase上進行數據處理,Sqoop爲HBase提供了高效、便捷的RDBMS數據導入功能,Pig和Hive爲HBase提供了高層語言支持。

5.Hive

Hive是一個基於Hadoop的數據倉庫工具,可以用於對存儲在Hadoop文件中的數據集進行數據整理、特殊查詢和分析處理。

Hive的學習門檻比較低,因爲它提供了類似於關係數據庫SQL語言的查詢語言——HiveQL,可以通過HiveQL語句快速實現簡單的MapReduce統計,Hive自身可以自動將HiveQL語句快速轉換成MapReduce任務進行運行,而不必開發專門的MapReduce應用程序,因而十分適合數據倉庫的統計分析。

6.Flume

Flume 是 Cloudera 公司開發的一個高可用的、高可靠的、分佈式的海量日誌採集、聚合和傳輸系統。

Flume支持在日誌系統中定製各類數據發送方,用於收集數據;同時,Flume提供對數據進行簡單處理,並寫到各種數據接收方的能力。

7.Sqoop

Sqoop是SQL-to-Hadoop的縮寫,主要用來在Hadoop和關係數據庫之間交換數據,可以改進數據的互操作性。

通過Sqoop,可以方便地將數據從MySQL、Oracle、PostgreSQL等關係數據庫中導入Hadoop(比如導入到HDFS、HBase或Hive中),或者將數據從Hadoop導出到關係數據庫,使得傳統關係數據庫和Hadoop之間的數據遷移變得非常方便。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章