Hadoop大數(shù)據(jù)生態(tài)系統(tǒng)及常用組件簡(jiǎn)介-CSDN.NET http://www.csdn.net/article/a/2016-07-28/3775
摘要:云智慧的李林同學(xué)就為大家介紹一下Hadoop生態(tài)圈一些常用的組件椎侠。
經(jīng)過(guò)多年信息化建設(shè)荚醒,我們已經(jīng)進(jìn)入一個(gè)神奇的“大數(shù)據(jù)”時(shí)代厢钧,無(wú)論是在通訊社交過(guò)程中使用的微信、QQ事富、電話、短信,還是吃喝玩樂(lè)時(shí)的用到的團(tuán)購(gòu)措近、電商虽缕、移動(dòng)支付始藕,都不斷產(chǎn)生海量信息數(shù)據(jù),數(shù)據(jù)和我們的工作生活密不可分氮趋、須臾難離伍派。
什么是大數(shù)據(jù)
什么是大數(shù)據(jù),多大算大剩胁,100G算大么诉植?如果是用來(lái)存儲(chǔ)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ù)之所以為大挂捻,不但是因?yàn)閿?shù)據(jù)量的巨大,同時(shí)各種渠道產(chǎn)生的數(shù)據(jù)既有IT系統(tǒng)生成的標(biāo)準(zhǔn)數(shù)據(jù)船万,還有大量多媒體類的非標(biāo)準(zhǔn)數(shù)據(jù)细层,數(shù)據(jù)類型多種多樣,而且大量無(wú)用數(shù)據(jù)充斥其間唬涧,給數(shù)據(jù)的真實(shí)性帶來(lái)很大影響疫赎,此外很多數(shù)據(jù)必須實(shí)時(shí)處理才最有價(jià)值。
一般數(shù)據(jù)量大(多)或者業(yè)務(wù)復(fù)雜的時(shí)候碎节,常規(guī)技術(shù)無(wú)法及時(shí)捧搞、高效處理如此大量的數(shù)據(jù),這時(shí)候可以使用Hadoop狮荔,它是由Apache基金會(huì)所開(kāi)發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu)胎撇,用戶可以在不了解分布式底層細(xì)節(jié)的情況下,編寫和運(yùn)行分布式應(yīng)用充分利用集群處理大規(guī)模數(shù)據(jù)殖氏。Hadoop可以構(gòu)建在廉價(jià)的機(jī)器上晚树,比如我們淘汰的PC Server或者租用的云主機(jī)都可以拿來(lái)用。
今天雅采,云智慧的李林同學(xué)就為大家介紹一下Hadoop生態(tài)圈一些常用的組件爵憎。
Gartner的一項(xiàng)研究表明,2015年婚瓜,65%的分析應(yīng)用程序和先進(jìn)分析工具都將基于Hadoop平臺(tái)宝鼓,作為主流大數(shù)據(jù)處理技術(shù),Hadoop具有以下特性:
方便:Hadoop運(yùn)行在由一般商用機(jī)器構(gòu)成的大型集群上巴刻,或者云計(jì)算服務(wù)上
健壯:Hadoop致力于在一般商用硬件上運(yùn)行愚铡,其架構(gòu)假設(shè)硬件會(huì)頻繁失效,Hadoop可以從容地處理大多數(shù)此類故障胡陪。
可擴(kuò)展:Hadoop通過(guò)增加集群節(jié)點(diǎn)沥寥,可以線性地?cái)U(kuò)展以處理更大的數(shù)據(jù)集。
目前應(yīng)用Hadoop最多的領(lǐng)域有:
1) 搜索引擎柠座,Doug Cutting設(shè)計(jì)Hadoop的初衷邑雅,就是為了針對(duì)大規(guī)模的網(wǎng)頁(yè)快速建立索引。
2) 大數(shù)據(jù)存儲(chǔ)愚隧,利用Hadoop的分布式存儲(chǔ)能力蒂阱,例如數(shù)據(jù)備份锻全、數(shù)據(jù)倉(cāng)庫(kù)等狂塘。
3) 大數(shù)據(jù)處理录煤,利用Hadoop的分布式處理能力,例如數(shù)據(jù)挖掘荞胡、數(shù)據(jù)分析等妈踊。
Hadoop生態(tài)系統(tǒng)與基礎(chǔ)組 Hadoop2.0的時(shí)候引入了HA(高可用)與YARN(資源調(diào)度),這是與1.0的最大差別泪漂。Hadoop主要由3部分組成:Mapreduce編程模型廊营,HDFS分布式文件存儲(chǔ),與YARN萝勤。
上圖是Hadoop的生態(tài)系統(tǒng)露筒,最下面一層是作為數(shù)據(jù)存儲(chǔ)的HDFS,其他組件都是在HDFS的基礎(chǔ)上組合或者使用的敌卓。HDFS具有高容錯(cuò)性慎式、適合批處理、適合大數(shù)據(jù)處理趟径、可構(gòu)建在廉價(jià)機(jī)器上等優(yōu)點(diǎn)瘪吏,缺點(diǎn)是低延遲數(shù)據(jù)訪問(wèn)、小文件存取蜗巧、并發(fā)寫入掌眠、文件隨機(jī)修改。
Hadoop MapReduce是一個(gè)軟件框架幕屹,基于該框架能夠容易地編寫應(yīng)用程序蓝丙,這些應(yīng)用程序能夠運(yùn)行在由上千個(gè)商用機(jī)器組成的大集群上,并以一種可靠的望拖,具有容錯(cuò)能力的方式并行地處理上TB級(jí)別的海量數(shù)據(jù)集迅腔。這個(gè)定義里面有幾個(gè)關(guān)鍵詞:軟件框架、并行處理靠娱、可靠且容錯(cuò)沧烈、大規(guī)模集群、海量數(shù)據(jù)集就是MapReduce的特色像云。
MapReduce經(jīng)典代碼(wordCount)
上面這段代碼就是接收一堆文本數(shù)據(jù)锌雀,統(tǒng)計(jì)這些文本數(shù)據(jù)中每個(gè)單詞出現(xiàn)的次數(shù)。MapReduce也是一個(gè)計(jì)算模型迅诬,當(dāng)數(shù)據(jù)量很大時(shí)腋逆,比如10個(gè)G,它可以把這10G的數(shù)據(jù)分成10塊侈贷,分發(fā)到10個(gè)節(jié)點(diǎn)去執(zhí)行惩歉,然后再匯總,這就是并行計(jì)算,計(jì)算速度比你一臺(tái)機(jī)器計(jì)算要快的多撑蚌。
HBase
Hadoop的主要組件介紹完畢上遥,現(xiàn)在看下HBase,它是一個(gè)高可靠争涌、高性能粉楚、面向列、可伸縮的分布式存儲(chǔ)系統(tǒng)亮垫,利用Hbase技術(shù)可在廉價(jià)PC Server上搭建大規(guī)模結(jié)構(gòu)化存儲(chǔ)集群模软。HBase 是Google Bigtable 的開(kāi)源實(shí)現(xiàn),與Google Bigtable 利用GFS作為其文件存儲(chǔ)系統(tǒng)類似饮潦,HBase 利用Hadoop HDFS 作為其文件存儲(chǔ)系統(tǒng)燃异;Google 運(yùn)行MapReduce 來(lái)處理Bigtable中的海量數(shù)據(jù), HBase 同樣利用Hadoop MapReduce來(lái)處理HBase中的海量數(shù)據(jù)继蜡;Google Bigtable 利用Chubby作為協(xié)同服務(wù)回俐, HBase 利用Zookeeper作為對(duì)應(yīng)
有人問(wèn)HBase和HDFS是啥關(guān)系,HBase是利用HDFS的存儲(chǔ)的壹瘟,就像MySQL和磁盤鲫剿, MySQL是應(yīng)用,磁盤是具體存儲(chǔ)介質(zhì)稻轨。HDFS因?yàn)樽陨淼奶匦粤榱贿m合隨機(jī)查找,對(duì)更新操作不太友好殴俱,比如百度網(wǎng)盤就是拿HDFS構(gòu)建的政冻,它支持上傳和刪除,但不會(huì)讓用戶直接在網(wǎng)盤上修改某個(gè)文件的內(nèi)容线欲。
HBase的表有以下特點(diǎn):
1 ) 大:一個(gè)表可以有上億行明场,上百萬(wàn)列。
2 ) 面向列:面向列表(簇)的存儲(chǔ)和權(quán)限控制李丰,列(簇)獨(dú)立檢索苦锨。
3 ) 稀疏:對(duì)于為空(NULL)的列,并不占用存儲(chǔ)空間趴泌,因此舟舒,表可以設(shè)計(jì)的非常稀疏。
HBase在淘寶的應(yīng)用場(chǎng)景
HBase的使用場(chǎng)景:
需對(duì)數(shù)據(jù)進(jìn)行隨機(jī)讀操作或者隨機(jī)寫操作皆尔;
大數(shù)據(jù)上高并發(fā)操作,比如每秒對(duì)PB級(jí)數(shù)據(jù)進(jìn)行上千次操作币励;
讀寫訪問(wèn)均是非常簡(jiǎn)單的操作慷蠕,比如歷史記錄,歷史訂單查詢榄审,三大運(yùn)營(yíng)商的流量通話清單的查詢砌们。
Hive
之前我們說(shuō)了MapReduce計(jì)算模型杆麸,但是只有懂Java的才能擼代碼干這個(gè)事搁进,不懂Java的想用Hadoop的計(jì)算模型是不是就沒(méi)法搞了呢?比如HDFS里的海量數(shù)據(jù)昔头,數(shù)據(jù)分析師想弄點(diǎn)數(shù)據(jù)出來(lái)饼问,咋辦?所以就要用到Hive揭斧,它提供了SQL式的訪問(wèn)方式供人使用莱革。
Hive是由Facebook 開(kāi)源, 最初用于解決海量結(jié)構(gòu)化的日志數(shù)據(jù)統(tǒng)計(jì)問(wèn)題的ETL(Extraction-Transformation-Loading) 工具讹开,Hive是構(gòu)建在Hadoop上的數(shù)據(jù)倉(cāng)庫(kù)平臺(tái)盅视,設(shè)計(jì)目標(biāo)是可以用傳統(tǒng)SQL操作Hadoop上的數(shù)據(jù),讓熟悉SQL編程的人員也能擁抱Hadoop(注意旦万。是數(shù)據(jù)倉(cāng)庫(kù)闹击。不是數(shù)據(jù)庫(kù)啊。)
使用HQL作為查詢接口
使用HDFS作為底層存儲(chǔ)
使用MapReduce作為執(zhí)行層
所以說(shuō)Hive就是基于Hadoop的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)工具成艘,是為簡(jiǎn)化MapReduce編程而生的赏半,非常適合數(shù)據(jù)倉(cāng)庫(kù)的統(tǒng)計(jì)分析,通過(guò)解析SQL轉(zhuǎn)化成MapReduce淆两,組成一個(gè)DAG(有向無(wú)環(huán)圖)來(lái)執(zhí)行断箫。
Flume
Flume是Cloudera提供的一個(gè)高可用的,高可靠的秋冰,分布式的海量日志采集仲义、 聚合和傳輸?shù)南到y(tǒng),F(xiàn)lume支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方剑勾,用于收集數(shù)據(jù)埃撵;同時(shí),F(xiàn)lume提供對(duì)數(shù)據(jù)進(jìn)行簡(jiǎn)單處理甥材,并寫到各種數(shù)據(jù)接受方(可定制)的能力盯另。
當(dāng)前Flume有兩個(gè)版本Flume 0.9X版本的統(tǒng)稱Flume-og,F(xiàn)lume1.X版本的統(tǒng)稱Flume-ng洲赵,由于Flume-ng經(jīng)過(guò)重大重構(gòu)鸳惯,與Flume-og有很大不同商蕴,使用時(shí)請(qǐng)注意區(qū)分。
Flume就是一個(gè)數(shù)據(jù)管道芝发,支持很多源(source)绪商,sink(目標(biāo)),和透視寶的suro很像辅鲸,比如拉取nginx日志可以拿這個(gè)工具簡(jiǎn)單一配就可用格郁。當(dāng)然每臺(tái)nginx服務(wù)器上都要配置并啟動(dòng)一個(gè)flume.
下面給大家看看配置文件(把kafka的數(shù)據(jù)寫入hdfs的配置),配置很簡(jiǎn)單.完全免去了自己寫一個(gè)kafka的consumer再調(diào)用hdfs的API寫數(shù)據(jù)的工作量.
YARN
YARN是Hadoop 2.0中的資源管理系統(tǒng),它的基本設(shè)計(jì)思想是將MRv1中的JobTracker拆分成了兩個(gè)獨(dú)立的服務(wù):一個(gè)全局的資源調(diào)度器ResourceManager和每個(gè)應(yīng)用程序特有的應(yīng)用程序管理器ApplicationMaster独悴,該調(diào)度器是一個(gè) "純調(diào)度器"例书,不再參與任何與具體應(yīng)用程序邏輯相關(guān)的工作,而僅根據(jù)各個(gè)應(yīng)用程序的資源需求進(jìn)行分配刻炒,資源分配的單位用一個(gè)資源抽象概念 "Container" 來(lái)表示决采,Container 封裝了內(nèi)存和 CPU。此外坟奥,調(diào)度器是一個(gè)可插拔的組件树瞭,用戶可根據(jù)自己的需求設(shè)計(jì)新的調(diào)度器,YARN 自身提供了 Fair Scheduler 和 Capacity Scheduler爱谁。
應(yīng)用程序管理器負(fù)責(zé)管理整個(gè)系統(tǒng)中所有應(yīng)用程序晒喷,包括應(yīng)用程序的提交、與調(diào)度器協(xié)商資源以啟動(dòng) ApplicationMaster访敌、監(jiān)控 ApplicationMaster 運(yùn)行狀態(tài)并在失敗時(shí)重新啟動(dòng)等凉敲。
Ambari
Ambari是一個(gè)集群的安裝和管理工具,云智慧之前用的是Apache的Hadoop捐顷,運(yùn)維同學(xué)用源碼包安裝荡陷,一個(gè)個(gè)配置文件去改,再分發(fā)到各個(gè)節(jié)點(diǎn)迅涮,中間哪一步搞錯(cuò)了废赞,整個(gè)集群就啟動(dòng)不起來(lái)。所以有幾個(gè)廠商提供Hadoop的這種安裝和管理平臺(tái)叮姑,主要是CDH和HDP唉地,國(guó)內(nèi)的很多人都用CDH的,它是Cloudera公司的传透,如果用它的管理界面安裝耘沼,集群節(jié)點(diǎn)超過(guò)一定數(shù)量就要收費(fèi)了。
Ambari是Apache的頂級(jí)開(kāi)源項(xiàng)目朱盐,可以免費(fèi)使用群嗤,現(xiàn)在用的人也很多。Ambari使用Ganglia收集度量指標(biāo)兵琳,用Nagios支持系統(tǒng)報(bào)警狂秘,當(dāng)需要引起管理員的關(guān)注時(shí)(比如骇径,節(jié)點(diǎn)停機(jī)或磁盤剩余空間不足等問(wèn)題),系統(tǒng)將向其發(fā)送郵件者春。
ZooKeeper
隨著計(jì)算節(jié)點(diǎn)的增多破衔,集群成員需要彼此同步并了解去哪里訪問(wèn)服務(wù)和如何配置,ZooKeeper正是為此而生的钱烟。ZooKeeper 顧名思義就是動(dòng)物園管理員晰筛,它是用來(lái)管大象(Hadoop) 、蜜蜂(Hive) 和 小豬(Pig) 的管理員拴袭, Apache Hbase和 Apache Solr 以及LinkedIn sensei等項(xiàng)目中都采用到了 Zookeeper读第。ZooKeeper是一個(gè)分布式的,開(kāi)放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù)稻扬,以Fast Paxos算法為基礎(chǔ)實(shí)現(xiàn)同步服務(wù)卦方,配置維護(hù)和命名服務(wù)等分布式應(yīng)用羊瘩。
其他組件
以上介紹的都是Hadoop用來(lái)計(jì)算和查詢的比較常用和主流的組件泰佳,上面那副生態(tài)圖中的其他幾個(gè)組件簡(jiǎn)單了解一下就好:
Pig是一種編程語(yǔ)言,它簡(jiǎn)化了Hadoop常見(jiàn)的工作任務(wù)尘吗,Pig為大型數(shù)據(jù)集處理提供了更高層次的抽象逝她,與MapReduce相比,Pig提供了更豐富的數(shù)據(jù)結(jié)構(gòu)睬捶,一般都是多值和嵌套的數(shù)據(jù)結(jié)構(gòu)黔宛。
Mahout是Hadoop提供做機(jī)器學(xué)習(xí)用的,支持的算法也比較少擒贸,但是一些常用的 k-means 聚類臀晃、分類還是有的,他是用MapReduce做的介劫,但是MapReduce不太擅長(zhǎng)這個(gè)東西徽惋,所以Mahout的作者也轉(zhuǎn)投spark ML陣營(yíng)了。
Sqoop是數(shù)據(jù)庫(kù)ETL工具座韵,用于將關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)導(dǎo)入到 Hadoop 及其相關(guān)的系統(tǒng)中,如 Hive和HBase。Sqoop 的核心設(shè)計(jì)思想是利用 MapReduce 加快數(shù)據(jù)傳輸速度奠旺,也就是說(shuō) Sqoop 的導(dǎo)入和導(dǎo)出功能是通過(guò) MapReduce 作業(yè)實(shí)現(xiàn)的舌缤,所以它是一種批處理方式進(jìn)行數(shù)據(jù)傳輸,難以實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)的導(dǎo)入和導(dǎo)出黔帕。比如云智慧監(jiān)控寶以前的業(yè)務(wù)數(shù)據(jù)都存在MySQL代咸,隨著數(shù)據(jù)量越來(lái)越大,要把數(shù)據(jù)導(dǎo)到Hbase成黄,就可以拿Sqoop直接操作呐芥。
本文所介紹的東西都是用于離線計(jì)算的白华,而之前發(fā)布的《面臨大數(shù)據(jù)挑戰(zhàn) 透視寶如何使用Druid實(shí)現(xiàn)數(shù)據(jù)聚合》則是關(guān)于實(shí)時(shí)計(jì)算的框架Druid的。大數(shù)據(jù)常用的流計(jì)算框架主要有Storm贩耐,Spark Streaming弧腥,F(xiàn)link,F(xiàn)link雖然是2014年加入Hadoop的潮太,但至今在生產(chǎn)環(huán)境上用的人還不多管搪,似乎大家都持觀望態(tài)度。
說(shuō)一下流計(jì)算(Druid铡买,Spark Streaming)和批處理(MapReduce更鲁,Hive)有啥區(qū)別,比如電商網(wǎng)站的個(gè)性化廣告投放奇钞,當(dāng)我們?cè)L問(wèn)了亞馬遜搜索筆記本電腦之后澡为,他就會(huì)給你推薦很多筆記本電腦鏈接,你的請(qǐng)求和興趣愛(ài)好被亞馬遜服務(wù)器實(shí)時(shí)接收景埃,流計(jì)算分析之后當(dāng)時(shí)就會(huì)推薦給你可能會(huì)購(gòu)買的東西媒至。如果這個(gè)東西拿批處理去做,服務(wù)端收集完了谷徙,過(guò)半個(gè)小時(shí)才算出你可能要買電腦拒啰,這時(shí)候再給你推薦電腦明顯就不合適了,因?yàn)檫@時(shí)候你可能在搜索電炒鍋……
最后再說(shuō)一下大數(shù)據(jù)的工作流完慧,比如有兩個(gè)MapReduce的任務(wù)是有依賴的谋旦,必須第一個(gè)完成了才能執(zhí)行第二個(gè),這就需要一個(gè)調(diào)度工具來(lái)調(diào)度屈尼。MapReduce也提供調(diào)度的API册着,但是代碼要寫很多,上面的代碼截圖只是一部分脾歧,這個(gè)依賴我寫了大概150行甲捏。所以這時(shí)候出現(xiàn)了工作流,用工作流來(lái)管理我們的各個(gè)job涨椒,我目前知道的有oozie和azkaban摊鸡,oozie的配置比較靈活,推薦大家使用蚕冬。