亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

分布式計算開源框架Hadoop入門實踐(一)

系統(tǒng) 3542 0

── 分布式計算開源框架Hadoop入門實踐(一)

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

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

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

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

什么是Hadoop?

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

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

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

分布式計算開源框架Hadoop入門實踐(一)
圖1:MapReduce結(jié)構(gòu)示意圖

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

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

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

分布式計算開源框架Hadoop入門實踐(一)
圖2:HDFS結(jié)構(gòu)示意圖

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

文件寫入:

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

文件讀取:

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

文件Block復(fù)制:

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

最后再說一下HDFS的幾個設(shè)計特點(對于框架設(shè)計值得借鑒):

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

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

分布式計算開源框架Hadoop入門實踐(一)
圖3:Hadoop結(jié)構(gòu)示意圖

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

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

為什么要選擇Hadoop?

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

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

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

?

轉(zhuǎn)載至http://www.infoq.com/cn/articles/hadoop-intro

分布式計算開源框架Hadoop入門實踐(一)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲一区二区精品视频 | 天天干干 | 久久99久久99精品 | 亚洲国产另类久久久精品小说 | 手机在线看福利 | 老司机午夜精品视频 | 99久久精彩视频 | 成人高清视频在线观看大全 | 久久精品久久久久 | 亚洲成a人v欧美综合天 | 美女视频黄视大全视频免费网址 | 日韩亚洲欧美性感视频影片免费看 | 天天操免费视频 | 香蕉网伊在线中文慕大全 | 国产一区2区 | 国产日韩精品视频 | 日本成人中文字幕 | 国产一区免费观看 | 精品国产日韩一区三区 | 日本高清不卡免费 | 国产亚洲精品91 | 国产成人影院一区二区 | 亚洲视频456 | 亚洲精品一二三四 | 国产成人在线观看免费网站 | 国产一级特黄aa级特黄裸毛片 | 久草在线免费看视频 | 精品久草 | 亚洲综合射 | 国产精品玖玖玖在线观看 | 国产成年人在线观看 | 99re6久精品国产首页 | 国国产自国偷自产第38页 | 99久久国产综合精品网成人影院 | 日韩一级在线 | 欧美一区二区视频 | 六月色| 香蕉视频在线观看免费 | 精品国产一区二区三区19 | 国产免费一级精品视频 | 中文xxx视频 |