电竞比分网-中国电竞赛事及体育赛事平台

分享

hadoop學(xué)習(xí)筆記之一:初識hadoop ? Taobao QA Team

 wlscut 2011-01-13

hadoop學(xué)習(xí)筆記之一:初識hadoop

2010年12月14日 由 yedu 留言 »

引言
最近了解到淘寶使用hadoop的項目多了起來,hadoop對于許多測試人員來說或許是個新鮮玩兒,因此,把自己之前整理的學(xué)習(xí)筆記整理發(fā)上來,希望通過此系列文章快速了解Hadoop的基本概念和架構(gòu)原理,從而助于hadoop相關(guān)項目的測試?yán)斫夂蜏贤ā?br>Hadoop簡介
Hadoop 是一個實現(xiàn)了 MapReduce 計算模型的開源分布式并行編程框架,借助于 Hadoop, 程序員可以輕松地編寫分布式并行程序,將其運(yùn)行于計算機(jī)集群上,完成海量數(shù)據(jù)的計算。
如果你對Hadoop不熟悉,下面這些名詞你或許耳熟能詳,Google File System、Google Map/Reduce模型、lucene 、Nutch、阿里云梯、云計算等,他們都與Hadoop有著或深或淺的關(guān)系,原來Hadoop離我們?nèi)绱酥敲椿ㄐr間繼續(xù)了解它吧。
Hadoop的架構(gòu)
先拋開Hadoop,簡單地想想看,假設(shè)我們需要讀一個10TB的數(shù)據(jù)集,怎么辦?在傳統(tǒng)的系統(tǒng)上,這需要很長時間,因為硬盤的傳輸速度是受限的。一個簡單的辦法是將數(shù)據(jù)存儲在多個磁盤上,同時從多個磁盤并行讀取數(shù)據(jù),這將大大減少讀取時間。

上面的方案需要解決兩個主要問題,一個是硬件故障,要保證其中一個硬件壞了但數(shù)據(jù)仍然完整,Hadoop的文件系統(tǒng)HDFS(Hadoop Distributed Filesystem)提供了一種解決方式。另外一個問題是如何并行讀取數(shù)據(jù)并合并保證正確性,通過MapReduce的編程模型可以簡化這個問題。簡而言之,Hadoop提供了一個穩(wěn)定的共享存儲和分析系統(tǒng),存儲由HDFS實現(xiàn),分析由MapReduce實現(xiàn),這兩者構(gòu)成了Hadoop的核心功能。

  • HDFS

  • HDFS集群有兩種節(jié)點(diǎn),以管理者-工作者模式運(yùn)行,即1個名稱節(jié)點(diǎn)(NameNode)和N個數(shù)據(jù)節(jié)點(diǎn)(DataNode)。其底層實現(xiàn)是將文件切割成塊,然后將這些塊存儲在不同的DataNode上。為了容錯容災(zāi),每個塊還被復(fù)制多份存儲在不同的DataNode上。NameNode管理文件系統(tǒng)的命名空間,記錄每個文件被切割成了多少塊,這些塊可以從哪些DataNode上獲得,以及各個DataNode的狀態(tài)信息等。下圖是Hadoop集群的簡化視圖

    HDFS內(nèi)部通信都是基于標(biāo)準(zhǔn)的TCP/IP協(xié)議,NameNode 依賴來自每個 DataNode 的定期心跳(heartbeat)消息。每條消息都包含一個塊報告,NameNode 可以根據(jù)這個報告驗證塊映射和其他文件系統(tǒng)元數(shù)據(jù)。如果 DataNode 不能發(fā)送心跳消息,NameNode 將采取修復(fù)措施,重新復(fù)制在該節(jié)點(diǎn)上丟失的塊。更多HDFS的架構(gòu)和設(shè)計請閱讀http://hadoop./common/docs/current/cn/hdfs_design.html

  • MapReduce
  • 上圖說明了用 MapReduce 來處理大數(shù)據(jù)集的過程, 這個 MapReduce 的計算過程簡而言之,就是將大數(shù)據(jù)集分解為成若干個小數(shù)據(jù)集,每個(或若干個)數(shù)據(jù)集分別由集群中的一個結(jié)點(diǎn)(一般就是一臺普通的計算機(jī))進(jìn)行處理并生成中間結(jié)果,然后這些中間結(jié)果又由大量的結(jié)點(diǎn)進(jìn)行合并, 形成最終結(jié)果。
    計算模型的核心是 Map 和 Reduce 兩個函數(shù),這兩個函數(shù)由用戶負(fù)責(zé)實現(xiàn),功能是按一定的映射規(guī)則將輸入的 對轉(zhuǎn)換成另一個或一批 對輸出。下圖是一個簡單的MapReduce示例,實現(xiàn)字?jǐn)?shù)統(tǒng)計功能。

  • 分布式并行運(yùn)算

  • Hadoop 的分布式并行運(yùn)算有一個作為主控的JobTracker,用于調(diào)度和管理其它的 TaskTracker, JobTracker 可以運(yùn)行于集群中任一臺計算機(jī)上。TaskTracker負(fù)責(zé)執(zhí)行任務(wù),必須運(yùn)行于 DataNode 上,即 DataNode 既是數(shù)據(jù)存儲結(jié)點(diǎn),也是計算結(jié)點(diǎn),這樣可以減少數(shù)據(jù)在網(wǎng)絡(luò)上的傳輸,降低對網(wǎng)絡(luò)帶寬的需求。 JobTracker 將 Map 任務(wù)和 Reduce 任務(wù)分發(fā)給空閑的 TaskTracker, 讓這些任務(wù)并行運(yùn)行,并負(fù)責(zé)監(jiān)控任務(wù)的運(yùn)行情況。如果某一個 TaskTracker 出故障了,JobTracker 會將其負(fù)責(zé)的任務(wù)轉(zhuǎn)交給另一個空閑的 TaskTracker 重新運(yùn)行。

  • Hadoop的其他子項目

  • 上面介紹的MapReduce、HDFS、分布式并行運(yùn)算是Hadoop最核心的功能。還有一些子項目提供補(bǔ)充性服務(wù)。如hive(提供基于sql的查詢語言查詢存儲在HDFS中的數(shù)據(jù))、Hbase(一種分布式、列存儲數(shù)據(jù)庫,適用于需要實時讀寫、隨機(jī)訪問超大數(shù)據(jù)集的場景)、Zookeeper(一個分布式、高可用性的協(xié)調(diào)服務(wù),提供分布式鎖之類的基本服務(wù))、pig(一種數(shù)據(jù)流語言和運(yùn)行環(huán)境,用以檢索非常大的數(shù)據(jù)集,使程序員能專注于數(shù)據(jù)而不是執(zhí)行本質(zhì))等。

    小結(jié)
    如果你堅持看到這里,或許會覺得失望,介紹了一堆的概念和名詞,貌似對你的幫助不大,不要沮喪,第一次接觸分布式知識的人大都如此,至少你跟開發(fā)又多了些共同語言,下次那個哥們沖你說pig(豬)時,你可以認(rèn)為他說的是pig(一種數(shù)據(jù)流語言和運(yùn)行環(huán)境,用以檢索非常大的數(shù)據(jù)集,使程序員能專注于數(shù)據(jù)而不是執(zhí)行本質(zhì))。
    在下篇文章中,我會來點(diǎn)干貨,介紹Hadoop的MapReduce基本編程,如果你有走讀代碼發(fā)現(xiàn)問題或通過代碼了解本質(zhì)的習(xí)慣,不妨期待下。

      本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
      轉(zhuǎn)藏 分享 獻(xiàn)花(0

      0條評論

      發(fā)表

      請遵守用戶 評論公約

      類似文章 更多