前言
說(shuō)起Hadoop,知道它是一個(gè)開(kāi)源的、可運(yùn)行于大規(guī)模集群上的分布式計(jì)算平臺(tái)碌宴,實(shí)現(xiàn)了MapReduce計(jì)算模型和分布式文件系統(tǒng)HDFS等功能;但對(duì)Hadoop整個(gè)的生態(tài)不夠了解蒙畴,本著愛(ài)學(xué)習(xí)的態(tài)度贰镣,一塊來(lái)探探hadoop的生態(tài)圈。
關(guān)于Hadoop
日常生活中我們一看到大數(shù)據(jù)和大數(shù)據(jù)相關(guān)的信息就會(huì)想到了hadoop膳凝,但要說(shuō)具體點(diǎn)碑隆,又不知從何說(shuō)起。
hadoop是基于Java開(kāi)發(fā)的蹬音,所以在跨平臺(tái)上有很大的優(yōu)勢(shì)上煤,并且可以部署在廉價(jià)的計(jì)算機(jī)集群中,所以導(dǎo)致hadoop的火熱程度著淆。hadoop的核心是HDFS和MapReduce劫狠,HDFS是針對(duì)谷歌文件系統(tǒng)(GFS)的開(kāi)源實(shí)現(xiàn)拴疤,具有較高的讀寫(xiě)速度、容錯(cuò)性独泞、可伸縮性呐矾,采用MapReduce的整合,可以在不了解分布式系統(tǒng)底層細(xì)節(jié)的情況下開(kāi)發(fā)懦砂。這樣就可以輕松的完成海量數(shù)據(jù)的存儲(chǔ)和計(jì)算蜒犯。
Hadoop的特性
-
高可靠:
采用冗余數(shù)據(jù)存儲(chǔ)方式,這個(gè)即使一個(gè)副本發(fā)生故障荞膘,還有其它的副本保證正常對(duì)外服務(wù)罚随。 -
高效:
采用了分布式存儲(chǔ)和分布式處理兩大核心,能夠很高效的處理大量的數(shù)據(jù)羽资。 -
高可擴(kuò)展:
前面說(shuō)了部署在廉價(jià)的計(jì)算機(jī)集群上毫炉,擴(kuò)展起來(lái)很方便。 -
成本低:
參考高可擴(kuò)展削罩。 -
高容錯(cuò):
參考高可靠,能夠自動(dòng)將失敗任務(wù)重新分配费奸。 -
平臺(tái):
運(yùn)行在Linux上弥激,基于java開(kāi)發(fā)的hadoop跨平臺(tái)優(yōu)勢(shì)可以很好完成。 - 支持多種語(yǔ)言編程
Hadoop生態(tài)系統(tǒng)
hadoop除了HDFS和MapReduce外愿阐,還還包括了其它很多的功能組件微服。例如:經(jīng)常聽(tīng)到的zookeeper、hbase缨历、hive以蕴、pig、mahout辛孵、sqoop丛肮、flume、ambari等功能組件魄缚。
下面對(duì)各個(gè)組件做一個(gè)簡(jiǎn)單的概述宝与,比較常用的著重描述。
-
Ambari:
一種基于web的工具冶匹,就作用來(lái)說(shuō)习劫,就是創(chuàng)建、管理嚼隘、監(jiān)視Hadoop生態(tài)圈的集群诽里;就是為了讓 Hadoop 以及相關(guān)的大數(shù)據(jù)軟件更容易使用的一個(gè)工具。
-
Zookeeper:
為分布式系統(tǒng)提供一致性協(xié)同服務(wù)飞蛹,像配置服務(wù)谤狡、命名服務(wù)灸眼、分布式同步等,前面服務(wù)發(fā)現(xiàn)這篇文章中也講到了為什么Zookeeper不適合做發(fā)現(xiàn)服務(wù)豌汇,感興趣的可以去了解下幢炸,還有消息中間件里面也講到了Kafka使用Zookeeper來(lái)維護(hù)集群信息。
下面講講Zookeeper特性-
最終一致性:
最重要的性能拒贱,client不論連接到哪個(gè)server宛徊,展示都是同一個(gè)視圖。 -
可靠性:
具有簡(jiǎn)單逻澳、健壯闸天、良好性能,如果消息被一臺(tái)server接受斜做,它將被所有server接受苞氮。 -
實(shí)時(shí)性:
保證client在一個(gè)時(shí)間間隔范圍內(nèi)獲得server的更新信息/失效信息,但存在網(wǎng)絡(luò)延時(shí)等原因瓤逼,不能保證所有client同時(shí)得到笼吟,應(yīng)該在讀數(shù)據(jù)之前調(diào)用sync接口同步。 -
等待無(wú)關(guān):
互不相關(guān)霸旗,慢的或者失效的client不得干涉快的client的請(qǐng)求贷帮。 -
原子性:
只有成功或者失敗,沒(méi)有中間狀態(tài)诱告。 -
順序性:
從同一客戶端發(fā)起的事務(wù)請(qǐng)求撵枢,都會(huì)最終被嚴(yán)格的按照其發(fā)送順序被應(yīng)用到zk中,包括全局有序和偏序兩種精居,全局有序好理解锄禽,就是所有的server的發(fā)布消息順序一樣;偏序存在無(wú)法比較的現(xiàn)象靴姿,如果一個(gè)消息B在消息A后被同一個(gè)發(fā)布者發(fā)布沃但,A必將排在B前面。
Zookeeper的核心是原子廣播佛吓,這個(gè)機(jī)制保證了各個(gè)server之間的同步绽慈,leader崩潰,由server發(fā)起選舉辈毯。
典型的應(yīng)用場(chǎng)景(配置文件管理坝疼、集群管理、同步鎖谆沃、leader選舉钝凶、隊(duì)列管理等)
最典型集群模式: Master/Slave 模式(主備模式),Master負(fù)責(zé)寫(xiě),Slave負(fù)責(zé)讀耕陷,但Zookeeper沒(méi)有使這種模式掂名,采用了三種角色。
Zookeeper中三種角色
-
領(lǐng)導(dǎo)者(leader):
負(fù)責(zé)進(jìn)行發(fā)起投票和決議哟沫,更新系統(tǒng)狀態(tài)饺蔑。 -
學(xué)習(xí)者:
分為跟隨著(follower)和觀察者(observer),前者用于接收客戶請(qǐng)求并向客戶端返回結(jié)果嗜诀,參與投票猾警;后者接收客戶端寫(xiě)請(qǐng)求,轉(zhuǎn)發(fā)給領(lǐng)導(dǎo)者隆敢,不參與投票发皿,只同步領(lǐng)導(dǎo)者的狀態(tài)。 -
客戶端:
請(qǐng)求發(fā)起方拂蝎。
-
-
Hbase:
一個(gè)實(shí)時(shí)讀寫(xiě)穴墅、分布式的列式數(shù)據(jù)庫(kù),主要是為了彌補(bǔ)Hadoop對(duì)實(shí)時(shí)操作的缺陷温自。和傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)有一個(gè)很重要的區(qū)別是玄货,一個(gè)是基于行,一個(gè)是基于列悼泌∮幔可以說(shuō)它是鍵值存儲(chǔ),也可以說(shuō)它是多時(shí)間版本映射的數(shù)據(jù)庫(kù)券躁。
四個(gè)描述-
行鍵(rowkey):
可以理解它為唯一ID,唯一標(biāo)識(shí)掉盅,Hbase是不允許跨行的事務(wù)也拜,所有rowkey和列族的設(shè)計(jì)就尤為重要和取巧。 -
列族/列鍵(column family):
一個(gè)表中必須至少有一個(gè)列族趾痘,列族是由多個(gè)列組成的慢哈,列族是能影響數(shù)據(jù)存儲(chǔ)的物理特性。 -
列限定符(column key):
可以理解為列永票。列族里的數(shù)據(jù)是通過(guò)列限定符來(lái)定位卵贱。列限定符不需要事前定義,這也是和關(guān)系型數(shù)據(jù)庫(kù)的區(qū)別侣集,支持任意擴(kuò)展键俱。 -
時(shí)間戳(timestamp):
可以理解為行鍵、列族世分、列限定符組成了一個(gè)單元(cell),cell是有時(shí)間版本编振,用時(shí)間戳標(biāo)識(shí),默認(rèn)是3個(gè)臭埋。
-
Hive:
sql轉(zhuǎn)換MapReduce程序語(yǔ)言踪央,可以減少M(fèi)apReduce jobs編寫(xiě)工作臀玄,Hive提供了類似sql語(yǔ)言的查詢語(yǔ)言-Hive QL,可以通過(guò)Hive QL語(yǔ)句快速實(shí)現(xiàn)簡(jiǎn)單的MapReduce統(tǒng)計(jì),十分適合做數(shù)據(jù)倉(cāng)庫(kù)的統(tǒng)計(jì)分析畅蹂。Pig:
在MapReduce上創(chuàng)建了更簡(jiǎn)單的過(guò)程語(yǔ)言抽象健无,提供了一種更接近結(jié)構(gòu)化查詢語(yǔ)言(SQL)的接口,可以理解為Pig最大的作用就是對(duì)MapReduce算法(框架)實(shí)現(xiàn)了一套shell腳本 液斜,稱之為:Pig Latin累贤。Mahout:
用于機(jī)器學(xué)習(xí)的一個(gè)框架,旨在幫助更方便快捷創(chuàng)建智能應(yīng)用程序旗唁,包含許多實(shí)現(xiàn)畦浓,聚類、分類检疫、推薦過(guò)濾讶请、頻繁子項(xiàng)挖掘等。MapReduce:
一種離線計(jì)算框架屎媳,用于大規(guī)模數(shù)據(jù)集的平行運(yùn)算夺溢,將并行計(jì)算過(guò)程高度抽象到了兩個(gè)函數(shù),Map和Reduce烛谊;這樣就可以在不了解分布式系統(tǒng)底層細(xì)節(jié)的情況下進(jìn)行平行應(yīng)用開(kāi)發(fā)风响,核心思想是:“分而治之”,把輸入的數(shù)據(jù)集切分為若干獨(dú)立的數(shù)據(jù)庫(kù)丹禀,分發(fā)給各個(gè)分節(jié)點(diǎn)共同平行完成状勤,最后聚合結(jié)果得到最終結(jié)果。YARN:
調(diào)度系統(tǒng)双泪,資源管理器持搜,最初是為了修復(fù)MapReduce實(shí)現(xiàn)的不足,因?yàn)镸apReduce是采用了Master/Slave 模式焙矛,一個(gè)JobTracker負(fù)責(zé)作業(yè)調(diào)度和資源管理葫盼,多個(gè)TaskTracker負(fù)責(zé)執(zhí)行被指派的具體任務(wù),所以會(huì)存在單點(diǎn)故障村斟、任務(wù)過(guò)重贫导、內(nèi)存溢出、資源劃分不合理等缺陷蟆盹。HDFS:
Hadoop分布式文件系統(tǒng)孩灯,是針對(duì)谷歌文件系統(tǒng)GFS的開(kāi)源實(shí)現(xiàn),具有處理超大數(shù)據(jù)逾滥、流式處理钱反、可以運(yùn)行在廉價(jià)商用服務(wù)器上等有點(diǎn)。Flume:
分布式的海量日志采集,聚合和傳輸?shù)南到y(tǒng)面哥,F(xiàn)lume具有高可用哎壳,分布式,配置工具尚卫,其設(shè)計(jì)的原理也是基于將數(shù)據(jù)流归榕,如日志數(shù)據(jù)從各種網(wǎng)站服務(wù)器上匯集起來(lái)存儲(chǔ)到HDFS,HBase等集中存儲(chǔ)器中吱涉。Sqoop:
SQL-to-Hadoop的縮寫(xiě)刹泄,主要用來(lái)在Hadoop和關(guān)系數(shù)據(jù)庫(kù)之間交換數(shù)據(jù),通過(guò)Sqoop可以方便的將數(shù)據(jù)從關(guān)系數(shù)據(jù)庫(kù)中導(dǎo)入Hadoop怎爵,或者將數(shù)據(jù)從Hadoop導(dǎo)出到關(guān)系數(shù)據(jù)庫(kù)特石,Sqoop主要通過(guò)JDBC和關(guān)系數(shù)據(jù)庫(kù)進(jìn)行交互。
附加幾個(gè)其它的功能組件
Storm:
Storm是Twitter開(kāi)源的分布式實(shí)時(shí)大數(shù)據(jù)處理框架鳖链,流計(jì)算平臺(tái)姆蘸,優(yōu)點(diǎn)是無(wú)延遲,缺點(diǎn)是不夠靈活芙委,想要統(tǒng)計(jì)的東西必須預(yù)知道逞敷;要達(dá)到更新實(shí)時(shí),在數(shù)據(jù)流進(jìn)來(lái)的時(shí)候就開(kāi)始處理灌侣,比如廣告點(diǎn)擊計(jì)算推捐,它的實(shí)時(shí)性要遠(yuǎn)遠(yuǎn)好于MapReduce計(jì)算框架。Spark:
MapReduce計(jì)算框架不適合迭代計(jì)算和交互計(jì)算侧啼,MapReduce是一種磁盤計(jì)算框架牛柒,而Spark則是一種內(nèi)存計(jì)算框架,它將數(shù)據(jù)盡可能放到內(nèi)存中提高迭代應(yīng)用和交互式應(yīng)用的計(jì)算效率痊乾。Pregel:
Pregel是Google提出的大規(guī)模分布式圖計(jì)算平臺(tái)皮壁,專門用來(lái)解決網(wǎng)頁(yè)鏈接分析、社交數(shù)據(jù)挖掘等實(shí)際應(yīng)用中涉及的大規(guī)模分布式圖計(jì)算問(wèn)題符喝,Pregel作為分布式圖計(jì)算的計(jì)算框架,主要用于圖遍歷甜孤、最短路徑协饲、PageRank計(jì)算等。
針對(duì)Hadoop的改進(jìn)和提升
Hadoop框架自身的改進(jìn)缴川,從1.0到2.0
組件 | Hadoop1.0的問(wèn)題 | Hadoop2.0的改進(jìn) |
---|---|---|
HDFS | 單一名稱節(jié)點(diǎn)茉稠,存在單點(diǎn)失效問(wèn)題 | 設(shè)計(jì)了HDFS HA,提供名稱節(jié)點(diǎn)熱備份機(jī)制 |
單一命名空間把夸,無(wú)法實(shí)現(xiàn)資源隔離 | 設(shè)計(jì)了HDFS聯(lián)邦而线,管理多個(gè)命名空間 | |
MapReduce | 資源管理效率底 | 設(shè)計(jì)了新的資源管理框架YARN |
不斷完善的Hadoop生態(tài)系統(tǒng)
組件 | 功能 | 解決Hadoop中存在的問(wèn)題 |
---|---|---|
Pig | 處理大規(guī)模數(shù)據(jù)的腳本語(yǔ)言,用戶只要編寫(xiě)幾條簡(jiǎn)單的語(yǔ)句,系統(tǒng)會(huì)自動(dòng)轉(zhuǎn)換為MapReduce作業(yè) | 抽象層次低膀篮,需要手工編寫(xiě)大量代碼 |
Oozie | 工作流和協(xié)作服務(wù)引擎嘹狞,協(xié)調(diào)Hadoop上運(yùn)行的不同任務(wù) | 沒(méi)有提供作業(yè)依賴關(guān)系管理機(jī)制,需要用戶自己處理作業(yè)之間的依賴關(guān)系 |
Tez | 支持DAG作業(yè)的計(jì)算框架誓竿,對(duì)作業(yè)的操作進(jìn)行重新分解和組合磅网,形成一個(gè)搭的DAG作業(yè),減少不必要操作 | 不同的MapReduce任務(wù)之間存在重復(fù)操作筷屡,降低了效率 |
Kafka | 分布式發(fā)布訂閱消息系統(tǒng)涧偷,不同類型的分布式系統(tǒng)可以統(tǒng)一接入到Kafka,實(shí)現(xiàn)和Hadoop各個(gè)組件之間的不同類型數(shù)據(jù)的實(shí)時(shí)高效交換 | Hadoop生態(tài)系統(tǒng)中各個(gè)組件和其它產(chǎn)品之間缺乏統(tǒng)一的毙死、高效的數(shù)據(jù)交換中介 |
結(jié)語(yǔ)
這里主要是對(duì)Hadoop生態(tài)系統(tǒng)的一些功能組件做一個(gè)簡(jiǎn)單的歸類描述燎潮,不涉及到具體的實(shí)現(xiàn)。
感興趣的可以看看個(gè)別組件功能的詳細(xì)實(shí)戰(zhàn)扼倘。
淺談Hbase與中間的一些設(shè)計(jì)策略
個(gè)人博客~
簡(jiǎn)書(shū)~