帶有 MapReduce 的 Apache Hadoop 是分布式數(shù)據(jù)處理的骨干力量。借助其獨(dú)特的橫向擴(kuò)展物理集群架構(gòu)和由 Google 最初開(kāi)發(fā)的精細(xì)處理框架,Hadoop 在大數(shù)據(jù)處理的全新領(lǐng)域迎來(lái)了爆炸式增長(zhǎng)。Hadoop 還開(kāi)發(fā)了一個(gè)豐富多樣的應(yīng)用程序生態(tài)系統(tǒng),包括 Apache Pig(一種強(qiáng)大的腳本語(yǔ)言)和 Apache Hive(一個(gè)具有類(lèi)似 SQL 界面的數(shù)據(jù)倉(cāng)庫(kù)解決方案)。
不幸的是,這個(gè)生態(tài)系統(tǒng)構(gòu)建于一種編程模式之上,無(wú)法解決大數(shù)據(jù)中的所有問(wèn)題。MapReduce 提供了一種特定的編程模型,盡管已通過(guò) Pig 和 Hive 等工具得到了簡(jiǎn)化,但它不是大數(shù)據(jù)的靈丹妙藥。我們首先介紹一下 MapReduce 2.0 (MRv2) — 或 Yet Another Resource Negotiator (YARN) — 并快速回顧一下 YARN 之前的 Hadoop 架構(gòu)。
Hadoop 和 MRv1 簡(jiǎn)單介紹
Hadoop 集群可從單一節(jié)點(diǎn)(其中所有 Hadoop 實(shí)體都在同一個(gè)節(jié)點(diǎn)上運(yùn)行)擴(kuò)展到數(shù)千個(gè)節(jié)點(diǎn)(其中的功能分散在各個(gè)節(jié)點(diǎn)之間,以增加并行處理活動(dòng))。圖 1 演示了一個(gè) Hadoop 集群的高級(jí)組件。
圖 1. Hadoop 集群架構(gòu)的簡(jiǎn)單演示
一個(gè) Hadoop 集群可分解為兩個(gè)抽象實(shí)體:MapReduce 引擎和分布式文件系統(tǒng)。MapReduce 引擎能夠在整個(gè)集群上執(zhí)行 Map 和 Reduce 任務(wù)并報(bào)告結(jié)果,其中分布式文件系統(tǒng)提供了一種存儲(chǔ)模式,可跨節(jié)點(diǎn)復(fù)制數(shù)據(jù)以進(jìn)行處理。Hadoop 分布式文件系統(tǒng) (HDFS) 通過(guò)定義來(lái)支持大型文件(其中每個(gè)文件通常為 64 MB 的倍數(shù))。
當(dāng)一個(gè)客戶端向一個(gè) Hadoop 集群發(fā)出一個(gè)請(qǐng)求時(shí),此請(qǐng)求由 JobTracker 管理。JobTracker 與 NameNode 聯(lián)合將工作分發(fā)到離它所處理的數(shù)據(jù)盡可能近的位置。NameNode 是文件系統(tǒng)的主系統(tǒng),提供元數(shù)據(jù)服務(wù)來(lái)執(zhí)行數(shù)據(jù)分發(fā)和復(fù)制。JobTracker 將 Map 和 Reduce 任務(wù)安排到一個(gè)或多個(gè) TaskTracker 上的可用插槽中。TaskTracker 與 DataNode(分布式文件系統(tǒng))一起對(duì)來(lái)自 DataNode 的數(shù)據(jù)執(zhí)行 Map 和 Reduce 任務(wù)。當(dāng) Map 和 Reduce 任務(wù)完成時(shí),TaskTracker 會(huì)告知 JobTracker,后者確定所有任務(wù)何時(shí)完成并最終告知客戶作業(yè)已完成。
從 圖 1 中可以看到,MRv1 實(shí)現(xiàn)了一個(gè)相對(duì)簡(jiǎn)單的集群管理器來(lái)執(zhí)行 MapReduce 處理。MRv1 提供了一種分層的集群管理模式,其中大數(shù)據(jù)作業(yè)以單個(gè) Map 和 Reduce 任務(wù)的形式滲入一個(gè)集群,并最后聚合成作業(yè)來(lái)報(bào)告給用戶。但這種簡(jiǎn)單性有一些隱秘,不過(guò)也不是很隱秘的問(wèn)題。