Hadoop YARN
帶有 MapReduce 的 Apache Hadoop 是分布式數(shù)據(jù)處理的骨干力量。借助其獨(dú)特的橫向擴(kuò)展物理集群架構(gòu)和由 Google 最初開發(fā)的精細(xì)處理框架,Hadoop 在大數(shù)據(jù)處理的全新領(lǐng)域迎來了爆炸式增長。Hadoop 還開發(fā)了一個(gè)豐富多樣的應(yīng)用程序生態(tài)系統(tǒng),包括 Apache Pig(一種強(qiáng)大的腳本語言)和 Apache Hive(一個(gè)具有類似 SQL 界面的數(shù)據(jù)倉庫解決方案)。
不幸的是,這個(gè)生態(tài)系統(tǒng)構(gòu)建于一種編程模式之上,無法解決大數(shù)據(jù)中的所有問題。MapReduce 提供了一種特定的編程模型,盡管已通過 Pig 和 Hive 等工具得到了簡化,但它不是大數(shù)據(jù)的靈丹妙藥。我們首先介紹一下 MapReduce 2.0 (MRv2) — 或 Yet Another Resource Negotiator (YARN) — 并快速回顧一下 YARN 之前的 Hadoop 架構(gòu)。
Hadoop 和 MRv1 簡單介紹
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)的簡單演示
一個(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) 通過定義來支持大型文件(其中每個(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ù)來執(zhí)行數(shù)據(jù)分發(fā)和復(fù)制。JobTracker 將 Map 和 Reduce 任務(wù)安排到一個(gè)或多個(gè) TaskTracker 上的可用插槽中。TaskTracker 與 DataNode(分布式文件系統(tǒng))一起對(duì)來自 DataNode 的數(shù)據(jù)執(zhí)行 Map 和 Reduce 任務(wù)。當(dāng) Map 和 Reduce 任務(wù)完成時(shí),TaskTracker 會(huì)告知 JobTracker,后者確定所有任務(wù)何時(shí)完成并最終告知客戶作業(yè)已完成。
InfoSphere BigInsights Quick Start Edition
InfoSphere BigInsights Quick Start Edition 是 IBM 基于 Hadoop 的產(chǎn)品 InfoSphere BigInsights 的一個(gè)免費(fèi)可下載版本。使用 Quick Start Edition,您可嘗試 IBM 開發(fā)的特性來擴(kuò)大開源 Hadoop 的價(jià)值,比如 Big SQL、文本分析和 BigSheets。引導(dǎo)式學(xué)習(xí)可讓您的體驗(yàn)盡可能順暢,包括按部就班、自定進(jìn)度的教程和視頻,可以幫助開始讓 Hadoop 為您所用。沒有時(shí)間或數(shù)據(jù)限制,您可自行安排時(shí)間在大量數(shù)據(jù)上進(jìn)行試驗(yàn)。請(qǐng)?觀看視頻、學(xué)習(xí)教程 (PDF)?和?下載 BigInsights Quick Start Edition。
從 圖 1 中可以看到,MRv1 實(shí)現(xiàn)了一個(gè)相對(duì)簡單的集群管理器來執(zhí)行 MapReduce 處理。MRv1 提供了一種分層的集群管理模式,其中大數(shù)據(jù)作業(yè)以單個(gè) Map 和 Reduce 任務(wù)的形式滲入一個(gè)集群,并最后聚合成作業(yè)來報(bào)告給用戶。但這種簡單性有一些隱秘,不過也不是很隱秘的問題。
MRv1 的缺陷
MapReduce 的第一個(gè)版本既有優(yōu)點(diǎn)也有缺點(diǎn)。MRv1 是目前使用的標(biāo)準(zhǔn)的大數(shù)據(jù)處理系統(tǒng)。但是,這種架構(gòu)存在不足,主要表現(xiàn)在大型集群上。當(dāng)集群包含的節(jié)點(diǎn)超過 4,000 個(gè)時(shí)(其中每個(gè)節(jié)點(diǎn)可能是多核的),就會(huì)表現(xiàn)出一定的不可預(yù)測(cè)性。其中一個(gè)最大的問題是級(jí)聯(lián)故障,由于要嘗試復(fù)制數(shù)據(jù)和重載活動(dòng)的節(jié)點(diǎn),所以一個(gè)故障會(huì)通過網(wǎng)絡(luò)泛洪形式導(dǎo)致整個(gè)集群嚴(yán)重惡化。
但 MRv1 的最大問題是多租戶。隨著集群規(guī)模的增加,一種可取的方式是為這些集群采用各種不同的模型。MRv1 的節(jié)點(diǎn)專用于 Hadoop,所以可以改變它們的用途以用于其他應(yīng)用程序和工作負(fù)載。當(dāng)大數(shù)據(jù)和 Hadoop 成為云部署中一個(gè)更重要的使用模型時(shí),這種能力也會(huì)增強(qiáng),因?yàn)樗试S在服務(wù)器上對(duì) Hadoop 進(jìn)行物理化,而無需虛擬化且不會(huì)增加管理、計(jì)算和輸入/輸出開銷。
我們現(xiàn)在看看 YARN 的新架構(gòu),看看它如何支持 MRv2 和其他使用不同處理模型的應(yīng)用程序。
回頁首
YARN (MRv2) 簡介
為了實(shí)現(xiàn)一個(gè) Hadoop 集群的集群共享、可伸縮性和可靠性。設(shè)計(jì)人員采用了一種分層的集群框架方法。具體來講,特定于 MapReduce 的功能已替換為一組新的守護(hù)程序,將該框架向新的處理模型開放。
可在何處找到 YARN?
YARN 是在 hadoop-0.23 版本時(shí)引入 Hadoop 中的。隨著徹底檢查的不斷完善,您將會(huì)發(fā)現(xiàn)此框架也在不斷更新。
回想一下,由于限制了擴(kuò)展以及網(wǎng)絡(luò)開銷所導(dǎo)致的某些故障模式,MRv1 JobTracker 和 TaskTracker 方法曾是一個(gè)重要的缺陷。這些守護(hù)程序也是 MapReduce 處理模型所獨(dú)有的。為了消除這一限制,JobTracker 和 TaskTracker 已從 YARN 中刪除,取而代之的是一組對(duì)應(yīng)用程序不可知的新守護(hù)程序。
圖 2. YARN 的新架構(gòu)
YARN 分層結(jié)構(gòu)的本質(zhì)是 ResourceManager。這個(gè)實(shí)體控制整個(gè)集群并管理應(yīng)用程序向基礎(chǔ)計(jì)算資源的分配。ResourceManager 將各個(gè)資源部分(計(jì)算、內(nèi)存、帶寬等)精心安排給基礎(chǔ) NodeManager(YARN 的每節(jié)點(diǎn)代理)。ResourceManager 還與 ApplicationMaster 一起分配資源,與 NodeManager 一起啟動(dòng)和監(jiān)視它們的基礎(chǔ)應(yīng)用程序。在此上下文中,ApplicationMaster 承擔(dān)了以前的 TaskTracker 的一些角色,ResourceManager 承擔(dān)了 JobTracker 的角色。
ApplicationMaster 管理一個(gè)在 YARN 內(nèi)運(yùn)行的應(yīng)用程序的每個(gè)實(shí)例。ApplicationMaster 負(fù)責(zé)協(xié)調(diào)來自 ResourceManager 的資源,并通過 NodeManager 監(jiān)視容器的執(zhí)行和資源使用(CPU、內(nèi)存等的資源分配)。請(qǐng)注意,盡管目前的資源更加傳統(tǒng)(CPU 核心、內(nèi)存),但未來會(huì)帶來基于手頭任務(wù)的新資源類型(比如圖形處理單元或?qū)S锰幚碓O(shè)備)。從 YARN 角度講,ApplicationMaster 是用戶代碼,因此存在潛在的安全問題。YARN 假設(shè) ApplicationMaster 存在錯(cuò)誤或者甚至是惡意的,因此將它們當(dāng)作無特權(quán)的代碼對(duì)待。
NodeManager 管理一個(gè) YARN 集群中的每個(gè)節(jié)點(diǎn)。NodeManager 提供針對(duì)集群中每個(gè)節(jié)點(diǎn)的服務(wù),從監(jiān)督對(duì)一個(gè)容器的終生管理到監(jiān)視資源和跟蹤節(jié)點(diǎn)健康。MRv1 通過插槽管理 Map 和 Reduce 任務(wù)的執(zhí)行,而 NodeManager 管理抽象容器,這些容器代表著可供一個(gè)特定應(yīng)用程序使用的針對(duì)每個(gè)節(jié)點(diǎn)的資源。YARN 繼續(xù)使用 HDFS 層。它的主要 NameNode 用于元數(shù)據(jù)服務(wù),而 DataNode 用于分散在一個(gè)集群中的復(fù)制存儲(chǔ)服務(wù)。
要使用一個(gè) YARN 集群,首先需要來自包含一個(gè)應(yīng)用程序的客戶的請(qǐng)求。ResourceManager 協(xié)商一個(gè)容器的必要資源,啟動(dòng)一個(gè) ApplicationMaster 來表示已提交的應(yīng)用程序。通過使用一個(gè)資源請(qǐng)求協(xié)議,ApplicationMaster 協(xié)商每個(gè)節(jié)點(diǎn)上供應(yīng)用程序使用的資源容器。執(zhí)行應(yīng)用程序時(shí),ApplicationMaster 監(jiān)視容器直到完成。當(dāng)應(yīng)用程序完成時(shí),ApplicationMaster 從 ResourceManager 注銷其容器,執(zhí)行周期就完成了。
通過這些討論,應(yīng)該明確的一點(diǎn)是,舊的 Hadoop 架構(gòu)受到了 JobTracker 的高度約束,JobTracker 負(fù)責(zé)整個(gè)集群的資源管理和作業(yè)調(diào)度。新的 YARN 架構(gòu)打破了這種模型,允許一個(gè)新 ResourceManager 管理跨應(yīng)用程序的資源使用,ApplicationMaster 負(fù)責(zé)管理作業(yè)的執(zhí)行。這一更改消除了一處瓶頸,還改善了將 Hadoop 集群擴(kuò)展到比以前大得多的配置的能力。此外,不同于傳統(tǒng)的 MapReduce,YARN 允許使用 Message Passing Interface 等標(biāo)準(zhǔn)通信模式,同時(shí)執(zhí)行各種不同的編程模型,包括圖形處理、迭代式處理、機(jī)器學(xué)習(xí)和一般集群計(jì)
總結(jié)
以上是生活随笔為你收集整理的Hadoop YARN的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop Streaming 编程
- 下一篇: Hadoop学习全程记录——在Eclip