Hadoop大數(shù)據(jù)生態(tài)系統(tǒng)及常用組件簡介
經(jīng)過多年信息化建設(shè),我們已經(jīng)進(jìn)入一個神奇的“大數(shù)據(jù)”時代,無論是在通訊社交過程中使用的微信、QQ、電話、短信,還是吃喝玩樂時的用到的團(tuán)購、電商、移動支付,都不斷產(chǎn)生海量信息數(shù)據(jù),數(shù)據(jù)和我們的工作生活密不可分、須臾難離。
什么是大數(shù)據(jù)
什么是大數(shù)據(jù),多大算大,100G算大么?如果是用來存儲1080P的高清電影,也就是幾部影片的容量。但是如果100G都是文本數(shù)據(jù),比如我們的后端kafka里的數(shù)據(jù),抽取一條mobileTopic的數(shù)據(jù)如下:【107,5505323054626937,局域網(wǎng),局域網(wǎng),unknown,0,0,09f26f4fd5c9d757b9a3095607f8e1a27fe421c9,1468900733003】,這種數(shù)據(jù)100G能有多少條,我們可想而知。
數(shù)據(jù)之所以為大,不但是因為數(shù)據(jù)量的巨大,同時各種渠道產(chǎn)生的數(shù)據(jù)既有IT系統(tǒng)生成的標(biāo)準(zhǔn)數(shù)據(jù),還有大量多媒體類的非標(biāo)準(zhǔn)數(shù)據(jù),數(shù)據(jù)類型多種多樣,而且大量無用數(shù)據(jù)充斥其間,給數(shù)據(jù)的真實性帶來很大影響,此外很多數(shù)據(jù)必須實時處理才最有價值。
一般數(shù)據(jù)量大(多)或者業(yè)務(wù)復(fù)雜的時候,常規(guī)技術(shù)無法及時、高效處理如此大量的數(shù)據(jù),這時候可以使用Hadoop,它是由Apache基金會所開發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu),用戶可以在不了解分布式底層細(xì)節(jié)的情況下,編寫和運行分布式應(yīng)用充分利用集群處理大規(guī)模數(shù)據(jù)。Hadoop可以構(gòu)建在廉價的機器上,比如我們淘汰的PC Server或者租用的云主機都可以拿來用。
今天,就為大家介紹一下Hadoop生態(tài)圈一些常用的組件。
Gartner的一項研究表明,2015年,65%的分析應(yīng)用程序和先進(jìn)分析工具都將基于Hadoop平臺,作為主流大數(shù)據(jù)處理技術(shù),Hadoop具有以下特性:
方便:Hadoop運行在由一般商用機器構(gòu)成的大型集群上,或者云計算服務(wù)上障。
可擴展:Hadoop通過增加集群節(jié)點,可以線性地擴展以處理更大的數(shù)據(jù)集。
目前應(yīng)用Hadoop最多的領(lǐng)域有:
1) 搜索引擎,Doug Cutting設(shè)計Hadoop的初衷,就是為了針對大規(guī)模的網(wǎng)頁快速建立索引。
2) 大數(shù)據(jù)存儲,利用Hadoop的分布式存儲能力,例如數(shù)據(jù)備份、數(shù)據(jù)倉庫等。
3) 大數(shù)據(jù)處理,利用Hadoop的分布式處理能力,例如數(shù)據(jù)挖掘、數(shù)據(jù)分析等。
Hadoop生態(tài)系統(tǒng)與基礎(chǔ)組
Hadoop2.0的時候引入了HA(高可用)與YARN(資源調(diào)度),這是與1.0的最大差別。Hadoop主要由3部分組成:Mapreduce編程模型,HDFS分布式文件存儲,與YARN。
上圖是Hadoop的生態(tài)系統(tǒng),最下面一層是作為數(shù)據(jù)存儲的HDFS,其他組件都是在HDFS的基礎(chǔ)上組合或者使用的。HDFS具有高容錯性、適合批處理、適合大數(shù)據(jù)處理、可構(gòu)建在廉價機器上等優(yōu)點,缺點是低延遲數(shù)據(jù)訪問、小文件存取、并發(fā)寫入、文件隨機修改。
Hadoop MapReduce是一個軟件框架,基于該框架能夠容易地編寫應(yīng)用程序,這些應(yīng)用程序能夠運行在由上千個商用機器組成的大集群上,并以一種可靠的,具有容錯能力的方式并行地處理上TB級別的海量數(shù)據(jù)集。這個定義里面有幾個關(guān)鍵詞:軟件框架、并行處理、可靠且容錯、大規(guī)模集群、海量數(shù)據(jù)集就是MapReduce的特色。
MapReduce經(jīng)典代碼(wordCount)
上面這段代碼就是接收一堆文本數(shù)據(jù),統(tǒng)計這些文本數(shù)據(jù)中每個單詞出現(xiàn)的次數(shù)。MapReduce也是一個計算模型,當(dāng)數(shù)據(jù)量很大時,比如10個G,它可以把這10G的數(shù)據(jù)分成10塊,分發(fā)到10個節(jié)點去執(zhí)行,然后再匯總,這就是并行計算,計算速度比你一臺機器計算要快的多。
HBase
Hadoop的主要組件介紹完畢,現(xiàn)在看下HBase,它是一個高可靠、高性能、面向列、可伸縮的分布式存儲系統(tǒng),利用Hbase技術(shù)可在廉價PC Server上搭建大規(guī)模結(jié)構(gòu)化存儲集群。HBase 是Google Bigtable 的開源實現(xiàn),與Google Bigtable 利用GFS作為其文件存儲系統(tǒng)類似,HBase 利用Hadoop HDFS 作為其文件存儲系統(tǒng);Google 運行MapReduce 來處理Bigtable中的海量數(shù)據(jù), HBase 同樣利用Hadoop MapReduce來處理HBase中的海量數(shù)據(jù);Google Bigtable 利用Chubby作為協(xié)同服務(wù), HBase 利用Zookeeper作為對應(yīng)
有人問HBase和HDFS是啥關(guān)系,HBase是利用HDFS的存儲的,就像MySQL和磁盤, MySQL是應(yīng)用,磁盤是具體存儲介質(zhì)。HDFS因為自身的特性,不適合隨機查找,對更新操作不太友好,比如百度網(wǎng)盤就是拿HDFS構(gòu)建的,它支持上傳和刪除,但不會讓用戶直接在網(wǎng)盤上修改某個文件的內(nèi)容。
HBase的表有以下特點:
1 ) 大:一個表可以有上億行,上百萬列。
2 ) 面向列:面向列表(簇)的存儲和權(quán)限控制,列(簇)獨立檢索。
3 ) 稀疏:對于為空(NULL)的列,并不占用存儲空間,因此,表可以設(shè)計的非常稀疏。
HBase提供的訪問方式有命令行shell方式,java API(最高效和常用的),Thrift Gateway 支持C ,PHP,Python等多種語言。
HBase在淘寶的應(yīng)用場景
HBase的使用場景:
需對數(shù)據(jù)進(jìn)行隨機讀操作或者隨機寫操作;
大數(shù)據(jù)上高并發(fā)操作,比如每秒對PB級數(shù)據(jù)進(jìn)行上千次操作;
讀寫訪問均是非常簡單的操作,比如歷史記錄,歷史訂單查詢,三大運營商的流量通話清單的查詢。
Hive
之前我們說了MapReduce計算模型,但是只有懂Java的才能擼代碼干這個事,不懂Java的想用Hadoop的計算模型是不是就沒法搞了呢?比如HDFS里的海量數(shù)據(jù),數(shù)據(jù)分析師想弄點數(shù)據(jù)出來,咋辦?所以就要用到Hive,它提供了SQL式的訪問方式供人使用。
Hive是由Facebook 開源,最初用于解決海量結(jié)構(gòu)化的日志數(shù)據(jù)統(tǒng)計問題的ETL(Extraction-Transformation-Loading) 工具,Hive是構(gòu)建在Hadoop上的數(shù)據(jù)倉庫平臺,設(shè)計目標(biāo)是可以用傳統(tǒng)SQL操作Hadoop上的數(shù)據(jù),讓熟悉SQL編程的人員也能擁抱Hadoop(注意。是數(shù)據(jù)倉庫。不是數(shù)據(jù)庫啊。)
使用HQL作為查詢接口
使用HDFS作為底層存儲
使用MapReduce作為執(zhí)行層
所以說Hive就是基于Hadoop的一個數(shù)據(jù)倉庫工具,是為簡化MapReduce編程而生的,非常適合數(shù)據(jù)倉庫的統(tǒng)計分析,通過解析SQL轉(zhuǎn)化成MapReduce,組成一個DAG(有向無環(huán)圖)來執(zhí)行。
Flume
Flume是Cloudera提供的一個高可用的,高可靠的,分布式的海量日志采集、聚合和傳輸?shù)南到y(tǒng),F(xiàn)lume支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方,用于收集數(shù)據(jù);同時,F(xiàn)lume提供對數(shù)據(jù)進(jìn)行簡單處理,并寫到各種數(shù)據(jù)接受方(可定制)的能力。
當(dāng)前Flume有兩個版本Flume 0.9X版本的統(tǒng)稱Flume-og,F(xiàn)lume1.X版本的統(tǒng)稱Flume-ng,由于Flume-ng經(jīng)過重大重構(gòu),與Flume-og有很大不同,使用時請注意區(qū)分。
Flume就是一個數(shù)據(jù)管道,支持很多源(source),sink(目標(biāo)),和透視寶的suro很像,比如拉取nginx日志可以拿這個工具簡單一配就可用。當(dāng)然每臺nginx服務(wù)器上都要配置并啟動一個flume.
下面給大家看看配置文件(把kafka的數(shù)據(jù)寫入hdfs的配置),配置很簡單.完全免去了自己寫一個kafka的consumer再調(diào)用hdfs的API寫數(shù)據(jù)的工作量.
YARN
YARN是Hadoop 2.0中的資源管理系統(tǒng),它的基本設(shè)計思想是將MRv1中的JobTracker拆分成了兩個獨立的服務(wù):一個全局的資源調(diào)度器ResourceManager和每個應(yīng)用程序特有的應(yīng)用程序管理器ApplicationMaster,該調(diào)度器是一個 "純調(diào)度器",不再參與任何與具體應(yīng)用程序邏輯相關(guān)的工作,而僅根據(jù)各個應(yīng)用程序的資源需求進(jìn)行分配,資源分配的單位用一個資源抽象概念 "Container" 來表示,Container 封裝了內(nèi)存和 CPU。此外,調(diào)度器是一個可插拔的組件,用戶可根據(jù)自己的需求設(shè)計新的調(diào)度器,YARN 自身提供了 Fair Scheduler 和 Capacity Scheduler。
應(yīng)用程序管理器負(fù)責(zé)管理整個系統(tǒng)中所有應(yīng)用程序,包括應(yīng)用程序的提交、與調(diào)度器協(xié)商資源以啟動 ApplicationMaster、監(jiān)控 ApplicationMaster 運行狀態(tài)并在失敗時重新啟動等。
Ambari
Ambari是一個集群的安裝和管理工具,我們之前用的是Apache的Hadoop,運維同學(xué)用源碼包安裝,一個個配置文件去改,再分發(fā)到各個節(jié)點,中間哪一步搞錯了,整個集群就啟動不起來。所以有幾個廠商提供Hadoop的這種安裝和管理平臺,主要是CDH和HDP,國內(nèi)的很多人都用CDH的,它是Cloudera公司的,如果用它的管理界面安裝,集群節(jié)點超過一定數(shù)量就要收費了。
Ambari是Apache的頂級開源項目,可以免費使用,現(xiàn)在用的人也很多。Ambari使用Ganglia收集度量指標(biāo),用Nagios支持系統(tǒng)報警,當(dāng)需要引起管理員的關(guān)注時(比如,節(jié)點停機或磁盤剩余空間不足等問題),系統(tǒng)將向其發(fā)送郵件。
ZooKeeper
隨著計算節(jié)點的增多,集群成員需要彼此同步并了解去哪里訪問服務(wù)和如何配置,ZooKeeper正是為此而生的。ZooKeeper 顧名思義就是動物園管理員,它是用來管大象(Hadoop) 、蜜蜂(Hive) 和 小豬(Pig) 的管理員, Apache Hbase和 Apache Solr 以及LinkedIn sensei等項目中都采用到了 Zookeeper。ZooKeeper是一個分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),以Fast Paxos算法為基礎(chǔ)實現(xiàn)同步服務(wù),配置維護(hù)和命名服務(wù)等分布式應(yīng)用。
其他組件
以上介紹的都是Hadoop用來計算和查詢的比較常用和主流的組件,上面那副生態(tài)圖中的其他幾個組件簡單了解一下就好:
Pig是一種編程語言,它簡化了Hadoop常見的工作任務(wù),Pig為大型數(shù)據(jù)集處理提供了更高層次的抽象,與MapReduce相比,Pig提供了更豐富的數(shù)據(jù)結(jié)構(gòu),一般都是多值和嵌套的數(shù)據(jù)結(jié)構(gòu)。
Mahout是Hadoop提供做機器學(xué)習(xí)用的,支持的算法也比較少,但是一些常用的 k-means 聚類、分類還是有的,他是用MapReduce做的,但是MapReduce不太擅長這個東西,所以Mahout的作者也轉(zhuǎn)投spark ML陣營了。
Sqoop是數(shù)據(jù)庫ETL工具,用于將關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)導(dǎo)入到 Hadoop 及其相關(guān)的系統(tǒng)中,如 Hive和HBase。Sqoop 的核心設(shè)計思想是利用 MapReduce 加快數(shù)據(jù)傳輸速度,也就是說 Sqoop 的導(dǎo)入和導(dǎo)出功能是通過 MapReduce 作業(yè)實現(xiàn)的,所以它是一種批處理方式進(jìn)行數(shù)據(jù)傳輸,難以實現(xiàn)實時數(shù)據(jù)的導(dǎo)入和導(dǎo)出。比如很多以前的業(yè)務(wù)數(shù)據(jù)都存在MySQL,隨著數(shù)據(jù)量越來越大,要把數(shù)據(jù)導(dǎo)到Hbase,就可以拿Sqoop直接操作。
本文所介紹的東西都是用于離線計算的,而之前發(fā)布的《面臨大數(shù)據(jù)挑戰(zhàn)透視寶如何使用Druid實現(xiàn)數(shù)據(jù)聚合》則是關(guān)于實時計算的框架Druid的。大數(shù)據(jù)常用的流計算框架主要有Storm,Spark Streaming,F(xiàn)link,F(xiàn)link雖然是2014年加入Hadoop的,但至今在生產(chǎn)環(huán)境上用的人還不多,似乎大家都持觀望態(tài)度。
說一下流計算(Druid,Spark Streaming)和批處理(MapReduce,Hive)有啥區(qū)別,比如電商網(wǎng)站的個性化廣告投放,當(dāng)我們訪問了亞馬遜搜索筆記本電腦之后,他就會給你推薦很多筆記本電腦鏈接,你的請求和興趣愛好被亞馬遜服務(wù)器實時接收,流計算分析之后當(dāng)時就會推薦給你可能會購買的東西。如果這個東西拿批處理去做,服務(wù)端收集完了,過半個小時才算出你可能要買電腦,這時候再給你推薦電腦明顯就不合適了,因為這時候你可能在搜索電炒鍋……
最后再說一下大數(shù)據(jù)的工作流,比如有兩個MapReduce的任務(wù)是有依賴的,必須第一個完成了才能執(zhí)行第二個,這就需要一個調(diào)度工具來調(diào)度。MapReduce也提供調(diào)度的API,但是代碼要寫很多,上面的代碼截圖只是一部分,這個依賴我寫了大概150行。所以這時候出現(xiàn)了工作流,用工作流來管理我們的各個job,我目前知道的有oozie和azkaban,oozie的配置比較靈活,推薦大家使用。
更多大數(shù)據(jù)與分析相關(guān)行業(yè)資訊、解決方案、案例、教程等請點擊查看>>>
詳情請咨詢在線客服!
客服熱線:023-66090381