国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
分布式計(jì)算開(kāi)源框架Hadoop介紹

  Hadoop是Apache開(kāi)源組織的一個(gè)分布式計(jì)算開(kāi)源框架,在很多大型網(wǎng)站上都已經(jīng)得到了應(yīng)用,如亞馬遜、Facebook和Yahoo等等。對(duì)于我來(lái)說(shuō),最近的一個(gè)使用點(diǎn)就是服務(wù)集成平臺(tái)的日志分析。服務(wù)集成平臺(tái)的日志量將會(huì)很大,而這也正好符合了分布式計(jì)算的適用場(chǎng)景


在SIP項(xiàng)目設(shè)計(jì)的過(guò)程中,對(duì)于它龐大的日志在開(kāi)始時(shí)就考慮使用任務(wù)分解的多線程處理模式來(lái)分析統(tǒng)計(jì),在我從前寫的文章《Tiger Concurrent Practice --日志分析并行分解設(shè)計(jì)與實(shí)現(xiàn)》中有所提到。但是由于統(tǒng)計(jì)的內(nèi)容暫時(shí)還是十分簡(jiǎn)單,所以就采用Memcache作為計(jì)數(shù)器,結(jié)合MySQL就完成了訪問(wèn)控制以及統(tǒng)計(jì)的工作。然而未來(lái),對(duì)于海量日志分析的工作,還是需要有所準(zhǔn)備?,F(xiàn)在最火的技術(shù)詞匯莫過(guò)于“云計(jì)算”,在Open API日益盛行的今天,互聯(lián)網(wǎng)應(yīng)用的數(shù)據(jù)將會(huì)越來(lái)越有價(jià)值,如何去分析這些數(shù)據(jù),挖掘其內(nèi)在價(jià)值,就需要分布式計(jì)算來(lái)支撐海量數(shù)據(jù)的分析工作。

回過(guò)頭來(lái)看,早先那種多線程,多任務(wù)分解的日志分析設(shè)計(jì),其實(shí)是分布式計(jì)算的一個(gè)單機(jī)版縮略,如何將這種單機(jī)的工作進(jìn)行分拆,變成協(xié)同工作的集群,其實(shí)就是分布式計(jì)算框架設(shè)計(jì)所涉及的。在去年參加BEA大會(huì)的時(shí)候,BEA和VMWare合作采用虛擬機(jī)來(lái)構(gòu)建集群,無(wú)非就是希望使得計(jì)算機(jī)硬件能夠類似于應(yīng)用程序中資源池的資源,使用者無(wú)需關(guān)心資源的分配情況,從而最大化了硬件資源的使用價(jià)值。分布式計(jì)算也是如此,具體的計(jì)算任務(wù)交由哪一臺(tái)機(jī)器執(zhí)行,執(zhí)行后由誰(shuí)來(lái)匯總,這都由分布式框架的Master來(lái)抉擇,而使用者只需簡(jiǎn)單地將待分析內(nèi)容提供給分布式計(jì)算系統(tǒng)作為輸入,就可以得到分布式計(jì)算后的結(jié)果。

Hadoop是Apache開(kāi)源組織的一個(gè)分布式計(jì)算開(kāi)源框架,在很多大型網(wǎng)站上都已經(jīng)得到了應(yīng)用,如亞馬遜、Facebook和Yahoo等等。對(duì)于我來(lái)說(shuō),最近的一個(gè)使用點(diǎn)就是服務(wù)集成平臺(tái)的日志分析。服務(wù)集成平臺(tái)的日志量將會(huì)很大,而這也正好符合了分布式計(jì)算的適用場(chǎng)景(日志分析和索引建立就是兩大應(yīng)用場(chǎng)景)。

當(dāng)前沒(méi)有正式確定使用,所以也是自己業(yè)余摸索,后續(xù)所寫的相關(guān)內(nèi)容,都是一個(gè)新手的學(xué)習(xí)過(guò)程,難免會(huì)有一些錯(cuò)誤,只是希望記錄下來(lái)可以分享給更多志同道合的朋友。

什么是Hadoop?

搞什么東西之前,第一步是要知道What(是什么),然后是Why(為什么),最后才是How(怎么做)。但很多開(kāi)發(fā)的朋友在做了多年項(xiàng)目以后,都習(xí)慣是先How,然后What,最后才是Why,這樣只會(huì)讓自己變得浮躁,同時(shí)往往會(huì)將技術(shù)誤用于不適合的場(chǎng)景。

Hadoop框架中最核心的設(shè)計(jì)就是:MapReduce和HDFS。MapReduce的思想是由Google的一篇論文所提及而被廣為流傳的,簡(jiǎn)單的一句話解釋MapReduce就是“任務(wù)的分解與結(jié)果的匯總”。HDFS是Hadoop分布式文件系統(tǒng)(Hadoop Distributed File System)的縮寫,為分布式計(jì)算存儲(chǔ)提供了底層支持。

MapReduce從它名字上來(lái)看就大致可以看出個(gè)緣由,兩個(gè)動(dòng)詞Map和Reduce,“Map(展開(kāi))”就是將一個(gè)任務(wù)分解成為多個(gè)任務(wù),“Reduce”就是將分解后多任務(wù)處理的結(jié)果匯總起來(lái),得出最后的分析結(jié)果。這不是什么新思想,其實(shí)在前面提到的多線程,多任務(wù)的設(shè)計(jì)就可以找到這種思想的影子。不論是現(xiàn)實(shí)社會(huì),還是在程序設(shè)計(jì)中,一項(xiàng)工作往往可以被拆分成為多個(gè)任務(wù),任務(wù)之間的關(guān)系可以分為兩種:一種是不相關(guān)的任務(wù),可以并行執(zhí)行;另一種是任務(wù)之間有相互的依賴,先后順序不能夠顛倒,這類任務(wù)是無(wú)法并行處理的?;氐酱髮W(xué)時(shí)期,教授上課時(shí)讓大家去分析關(guān)鍵路徑,無(wú)非就是找最省時(shí)的任務(wù)分解執(zhí)行方式。在分布式系統(tǒng)中,機(jī)器集群就可以看作硬件資源池,將并行的任務(wù)拆分,然后交由每一個(gè)空閑機(jī)器資源去處理,能夠極大地提高計(jì)算效率,同時(shí)這種資源無(wú)關(guān)性,對(duì)于計(jì)算集群的擴(kuò)展無(wú)疑提供了最好的設(shè)計(jì)保證。(其實(shí)我一直認(rèn)為Hadoop的卡通圖標(biāo)不應(yīng)該是一個(gè)小象,應(yīng)該是螞蟻,分布式計(jì)算就好比螞蟻吃大象,廉價(jià)的機(jī)器群可以匹敵任何高性能的計(jì)算機(jī),縱向擴(kuò)展的曲線始終敵不過(guò)橫向擴(kuò)展的斜線)。任務(wù)分解處理以后,那就需要將處理以后的結(jié)果再匯總起來(lái),這就是Reduce要做的工作。


圖1:MapReduce結(jié)構(gòu)示意圖

上圖就是MapReduce大致的結(jié)構(gòu)圖,在Map前還可能會(huì)對(duì)輸入的數(shù)據(jù)有Split(分割)的過(guò)程,保證任務(wù)并行效率,在Map之后還會(huì)有Shuffle(混合)的過(guò)程,對(duì)于提高Reduce的效率以及減小數(shù)據(jù)傳輸?shù)膲毫τ泻艽蟮膸椭:竺鏁?huì)具體提及這些部分的細(xì)節(jié)。

HDFS是分布式計(jì)算的存儲(chǔ)基石,Hadoop的分布式文件系統(tǒng)和其他分布式文件系統(tǒng)有很多類似的特質(zhì)。分布式文件系統(tǒng)基本的幾個(gè)特點(diǎn):

  1. 對(duì)于整個(gè)集群有單一的命名空間。
  2. 數(shù)據(jù)一致性。適合一次寫入多次讀取的模型,客戶端在文件沒(méi)有被成功創(chuàng)建之前無(wú)法看到文件存在。
  3. 文件會(huì)被分割成多個(gè)文件塊,每個(gè)文件塊被分配存儲(chǔ)到數(shù)據(jù)節(jié)點(diǎn)上,而且根據(jù)配置會(huì)由復(fù)制文件塊來(lái)保證數(shù)據(jù)的安全性。


圖2:HDFS結(jié)構(gòu)示意圖

上圖中展現(xiàn)了整個(gè)HDFS三個(gè)重要角色:NameNode、DataNode和Client。NameNode可以看作是分布式文件系統(tǒng)中的管理者,主要負(fù)責(zé)管理文件系統(tǒng)的命名空間、集群配置信息和存儲(chǔ)塊的復(fù)制等。NameNode會(huì)將文件系統(tǒng)的Meta-data存儲(chǔ)在內(nèi)存中,這些信息主要包括了文件信息、每一個(gè)文件對(duì)應(yīng)的文件塊的信息和每一個(gè)文件塊在DataNode的信息等。DataNode是文件存儲(chǔ)的基本單元,它將Block存儲(chǔ)在本地文件系統(tǒng)中,保存了Block的Meta-data,同時(shí)周期性地將所有存在的Block信息發(fā)送給NameNode。Client就是需要獲取分布式文件系統(tǒng)文件的應(yīng)用程序。這里通過(guò)三個(gè)操作來(lái)說(shuō)明他們之間的交互關(guān)系。

文件寫入:

  1. Client向NameNode發(fā)起文件寫入的請(qǐng)求。
  2. NameNode根據(jù)文件大小和文件塊配置情況,返回給Client它所管理部分DataNode的信息。
  3. Client將文件劃分為多個(gè)Block,根據(jù)DataNode的地址信息,按順序?qū)懭氲矫恳粋€(gè)DataNode塊中。

文件讀?。?/strong>

  1. Client向NameNode發(fā)起文件讀取的請(qǐng)求。
  2. NameNode返回文件存儲(chǔ)的DataNode的信息。
  3. Client讀取文件信息。

文件Block復(fù)制:

  1. NameNode發(fā)現(xiàn)部分文件的Block不符合最小復(fù)制數(shù)或者部分DataNode失效。
  2. 通知DataNode相互復(fù)制Block。
  3. DataNode開(kāi)始直接相互復(fù)制。

最后再說(shuō)一下HDFS的幾個(gè)設(shè)計(jì)特點(diǎn)(對(duì)于框架設(shè)計(jì)值得借鑒):

  1. Block的放置:默認(rèn)不配置。一個(gè)Block會(huì)有三份備份,一份放在NameNode指定的DataNode,另一份放在與指定DataNode非同一Rack上的DataNode,最后一份放在與指定DataNode同一Rack上的DataNode上。備份無(wú)非就是為了數(shù)據(jù)安全,考慮同一Rack的失敗情況以及不同Rack之間數(shù)據(jù)拷貝性能問(wèn)題就采用這種配置方式。
  2. 心跳檢測(cè)DataNode的健康狀況,如果發(fā)現(xiàn)問(wèn)題就采取數(shù)據(jù)備份的方式來(lái)保證數(shù)據(jù)的安全性。
  3. 數(shù)據(jù)復(fù)制(場(chǎng)景為DataNode失敗、需要平衡DataNode的存儲(chǔ)利用率和需要平衡DataNode數(shù)據(jù)交互壓力等情況):這里先說(shuō)一下,使用HDFS的balancer命令,可以配置一個(gè)Threshold來(lái)平衡每一個(gè)DataNode磁盤利用率。例如設(shè)置了Threshold為10%,那么執(zhí)行balancer命令的時(shí)候,首先統(tǒng)計(jì)所有DataNode的磁盤利用率的均值,然后判斷如果某一個(gè)DataNode的磁盤利用率超過(guò)這個(gè)均值Threshold以上,那么將會(huì)把這個(gè)DataNode的block轉(zhuǎn)移到磁盤利用率低的DataNode,這對(duì)于新節(jié)點(diǎn)的加入來(lái)說(shuō)十分有用。
  4. 數(shù)據(jù)交驗(yàn):采用CRC32作數(shù)據(jù)交驗(yàn)。在文件Block寫入的時(shí)候除了寫入數(shù)據(jù)還會(huì)寫入交驗(yàn)信息,在讀取的時(shí)候需要交驗(yàn)后再讀入。
  5. NameNode是單點(diǎn):如果失敗的話,任務(wù)處理信息將會(huì)紀(jì)錄在本地文件系統(tǒng)和遠(yuǎn)端的文件系統(tǒng)中。
  6. 數(shù)據(jù)管道性的寫入:當(dāng)客戶端要寫入文件到DataNode上,首先客戶端讀取一個(gè)Block然后寫到第一個(gè)DataNode上,然后由第一個(gè)DataNode傳遞到備份的DataNode上,一直到所有需要寫入這個(gè)Block的NataNode都成功寫入,客戶端才會(huì)繼續(xù)開(kāi)始寫下一個(gè)Block。
  7. 安全模式:在分布式文件系統(tǒng)啟動(dòng)的時(shí)候,開(kāi)始的時(shí)候會(huì)有安全模式,當(dāng)分布式文件系統(tǒng)處于安全模式的情況下,文件系統(tǒng)中的內(nèi)容不允許修改也不允許刪除,直到安全模式結(jié)束。安全模式主要是為了系統(tǒng)啟動(dòng)的時(shí)候檢查各個(gè)DataNode上數(shù)據(jù)塊的有效性,同時(shí)根據(jù)策略必要的復(fù)制或者刪除部分?jǐn)?shù)據(jù)塊。運(yùn)行期通過(guò)命令也可以進(jìn)入安全模式。在實(shí)踐過(guò)程中,系統(tǒng)啟動(dòng)的時(shí)候去修改和刪除文件也會(huì)有安全模式不允許修改的出錯(cuò)提示,只需要等待一會(huì)兒即可。

下面綜合MapReduce和HDFS來(lái)看Hadoop的結(jié)構(gòu):


圖3:Hadoop結(jié)構(gòu)示意圖

在Hadoop的系統(tǒng)中,會(huì)有一臺(tái)Master,主要負(fù)責(zé)NameNode的工作以及JobTracker的工作。JobTracker的主要職責(zé)就是啟動(dòng)、跟蹤和調(diào)度各個(gè)Slave的任務(wù)執(zhí)行。還會(huì)有多臺(tái)Slave,每一臺(tái)Slave通常具有DataNode的功能并負(fù)責(zé)TaskTracker的工作。TaskTracker根據(jù)應(yīng)用要求來(lái)結(jié)合本地?cái)?shù)據(jù)執(zhí)行Map任務(wù)以及Reduce任務(wù)。

說(shuō)到這里,就要提到分布式計(jì)算最重要的一個(gè)設(shè)計(jì)點(diǎn):Moving Computation is Cheaper than Moving Data。就是在分布式處理中,移動(dòng)數(shù)據(jù)的代價(jià)總是高于轉(zhuǎn)移計(jì)算的代價(jià)。簡(jiǎn)單來(lái)說(shuō)就是分而治之的工作,需要將數(shù)據(jù)也分而存儲(chǔ),本地任務(wù)處理本地?cái)?shù)據(jù)然后歸總,這樣才會(huì)保證分布式計(jì)算的高效性。

為什么要選擇Hadoop?

說(shuō)完了What,簡(jiǎn)單地說(shuō)一下Why。官方網(wǎng)站已經(jīng)給了很多的說(shuō)明,這里就大致說(shuō)一下其優(yōu)點(diǎn)及使用的場(chǎng)景(沒(méi)有不好的工具,只用不適用的工具,因此選擇好場(chǎng)景才能夠真正發(fā)揮分布式計(jì)算的作用):

  1. 可擴(kuò)展:不論是存儲(chǔ)的可擴(kuò)展還是計(jì)算的可擴(kuò)展都是Hadoop的設(shè)計(jì)根本。
  2. 經(jīng)濟(jì):框架可以運(yùn)行在任何普通的PC上。
  3. 可靠:分布式文件系統(tǒng)的備份恢復(fù)機(jī)制以及MapReduce的任務(wù)監(jiān)控保證了分布式處理的可靠性。
  4. 高效:分布式文件系統(tǒng)的高效數(shù)據(jù)交互實(shí)現(xiàn)以及MapReduce結(jié)合Local Data處理的模式,為高效處理海量的信息作了基礎(chǔ)準(zhǔn)備。

使用場(chǎng)景:個(gè)人覺(jué)得最適合的就是海量數(shù)據(jù)的分析,其實(shí)Google最早提出MapReduce也就是為了海量數(shù)據(jù)分析。同時(shí)HDFS最早是為了搜索引擎實(shí)現(xiàn)而開(kāi)發(fā)的,后來(lái)才被用于分布式計(jì)算框架中。海量數(shù)據(jù)被分割于多個(gè)節(jié)點(diǎn),然后由每一個(gè)節(jié)點(diǎn)并行計(jì)算,將得出的結(jié)果歸并到輸出。同時(shí)第一階段的輸出又可以作為下一階段計(jì)算的輸入,因此可以想象到一個(gè)樹(shù)狀結(jié)構(gòu)的分布式計(jì)算圖,在不同階段都有不同產(chǎn)出,同時(shí)并行和串行結(jié)合的計(jì)算也可以很好地在分布式集群的資源下得以高效的處理。


作者介紹:岑文初,就職于阿里軟件公司研發(fā)中心平臺(tái)一部,任架構(gòu)師。當(dāng)前主要工作涉及阿里軟件開(kāi)發(fā)平臺(tái)服務(wù)框架(ASF)設(shè)計(jì)與實(shí)現(xiàn),服務(wù)集成平臺(tái)(SIP)設(shè)計(jì)與實(shí)現(xiàn)。沒(méi)有什么擅長(zhǎng)或者精通,工作到現(xiàn)在唯一提升的就是學(xué)習(xí)能力和速度。個(gè)人Blog為:http://blog.csdn.net/cenwenchu79。


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服