hadoop生態圈的詳解
學習和使用hadoop有一年了,這裏主要分享一下對hadoop整體上的理解,分門別類的介紹一下相關組件,最後提供了建議的學習路線,希望對hadoop的初學者有參考作用。
1. Hadoop核心件組有哪些? 廣義hadoop指什麽?
核心組件有:Hdfs、Yarn、MapReduce;
廣義上指一個生態圈,泛指大數據技術相關的開源組件或產品,如hdfs、yarn、hbase、hive、spark、pig、zookeeper、kafka、flume、phoenix、sqoop。
2. Spark與hadoop之間有什麽聯系
Spark也是一個生態圈,發展非很快,在計算方面比mapreduce要快很多倍,供了一個簡單而豐富的編程模型,支持多種應用,包括
Hadoop和Spark在某些方面有重疊,但組件之間都可以很好的協同作戰。
3. 分門別類介紹其中詳細組件
為了方便理解以下按照功能進行了分類,並且把較為流行的排在了前面介紹,列表如下:
分類 | 相關產品 |
文件系統 | HDFS,目前大量采用的分布式文件系統,是整個大數據應用場景的基礎通用文件存儲組件 S3, Simple Storage Service簡單存儲服務,更好的可擴展性,內置的持久性,以及較低的價格 |
資源調度 | YARN,分布式資源調度,可以接收計算的任務把它分配到集群各節點處理,相當於大數據操作系統,通用性好,生態支持好; Mesos,同YARN類似,偏向於資源的抽象和管理 |
計算框架 | Spark序列,有流計算、圖計算、機器學習; Flink,支持計算數據不斷變化,即增量計算; Storm,專註於流式計算,功能強大; Mapreduce, 分布式計算基本計算框架,編程難度高,執行效率低 |
數據庫 | Hbase,一種NoSQL列簇數據庫,支持數十億行數百萬列大型數據儲存和訪問,尤其是寫數據的性能非常好,數據讀取實時性較好,提供一套API,不支持SQL操作,數據存儲采用HDFS; Cassandra,對大型表格和 Dynamo支持得最好; Redis,運行異常快,還可應用於分布式緩存場景 |
SQL支持 | Spark SQL,由Shark、Hive發展而來的,以SQL方式訪問數據源(如hdfs、hbase、S3、redis甚至關系統數據庫等,下同); Phoenix,一套專註於SQL方式訪問hbase的JDBC驅動,支持絕大部分SQL語法,支持二級索引,支持事務,低延時; Hive,通過HQL(類似SQL)來統計分析生成查詢結果,通過解析HQL生成可以Mapreduce上執行的任務,典型的應用場景是與hbase集成; 其它:impala、pig等,都實現了類似的功能,解決了直接寫map/reduce分析數據的復雜性,降低了數據分析工作者或開發人員使用大數據的門檻 |
其它工具 | 分布式協作zookeeper,可以理解為一個小型高性能的數據庫,為生態圈中與很多組件提供發布訂閱的功能,還可以監測節點是否失效(心跳檢測),如HBase、Kafka中利用zookeeper存放了主從節點信息; Kafka, 是一種分布式的,基於發布/訂閱的消息系統,類似於消息對列的功能,可以接收生產者(如webservice、文件、hdfs、hbase等)的數據,本身可以緩存起來,然後可以發送給消費者(同上),起到緩沖和適配的作; Flume,分布式的海量日誌采集、聚合和傳輸的系統,主要作用是數據的收集和傳輸,也支持非常多的輸入輸出數據源; Sqoop,主要用於在Hadoop(Hive)與傳統的數據庫(mysql、postgresql...)間進行數據的傳遞,可以將一個關系型數據庫(例如 : MySQL ,Oracle ,Postgres等)中的數據導進到Hadoop的HDFS中,也可以將HDFS的數據導進到關系型數據庫中 |
4. 典型的組合使用場景
Hadoop、Spark生態圈的組件是相互配合使用的,每個組件都有自己“用武之地”,組合起來完成即可以滿足各種系統業務需求,下面列舉兩個例子:
(1)數據采集、存儲、分析場景
該場景下完成了整個數據的采集、存儲、分析,並輸出結果,組件搭配如下:
Flume + kafka(zookeeper)+ Hdfs + Spark/Storm/Hive + Hbase (Zookeeper、Hdfs) /Redis
說明如下:
Flume用來從種渠道(如http、exec、文件、kafka , …)收集數據,並發送到kaffka(當然也可以存放到hdfs、hbase、file、…)
Kafka可以緩存數據,與flume一樣也支持各種協議的輸入和輸出,由於kafka需要zookeeper來完成負載均衡和HA,所以需要zookeeper來支持
開始計算,這裏有三種選擇,Spark/Storm/Hive,各有優勢,相對Hive目前仍使用廣泛,該技術出現的較早;Storm專註於流式處理,延遲非常低; Spark最有前景的計算工具;不管用什麽,最終都是對數據的清理、統計,把得到的結果輸出
展示結果數據存儲,可以使用Hbase kafka(zookeeper) /Redis或mysql等,看使用場景(數據量大小等因素),由於處理之後的結果數據一般比較少可以直接放到Redis,然後就可以采用常規的技術展示出報表或其它消費方式使用這些計算後的結果數據
(2)數據存儲和實時訪問
這種場景非常類似常規應用開發場景,即通過java的JDBC來訪問大數據集群,組件搭配:
Jdbc + Solr + Phoenix/Spark sql + Hbase kafka(zookeeper) + Hdfs
說明如下:
Jdbc是通用的java操作數據庫的方式,使用的是sql語句
Solr為全文檢索,完成站點分詞搜索功能
Phoenix/Spark sql方便以jdbc方式訪問Hbase數據庫
Hdfs最終完成數據的物理存儲
5. 建議的學習線路
僅憑個人經驗,大概的分了三個階段,如下:
本文出自 “飛浪博客” 博客,請務必保留此出處http://cpaqyx.blog.51cto.com/1443979/1941677
hadoop生態圈的詳解