日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

第六章-Hadoop优化与发展

發(fā)布時間:2025/3/21 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第六章-Hadoop优化与发展 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

第六章-Hadoop優(yōu)化與發(fā)展

文章目錄

  • 第六章-Hadoop優(yōu)化與發(fā)展
    • Hadoop探討
    • HDFS HA
    • HDFS Federation
    • 資源調(diào)度框架YARN
      • MapReduce1.0的缺陷
      • YARN設(shè)計思路
      • YARN體系結(jié)構(gòu)
      • YARN工作流程
      • YARN與MapReduce1.0的對比
      • YARN的發(fā)展目標(biāo)

Hadoop探討

Hadoop1.0 的核心組件(僅指 MapReduce 和 HDFS, 不包括 Hadoop 生態(tài)系統(tǒng)內(nèi)的 Pig、Hive、HBase 等其他組件),主要存在以下不足:

  • 抽象層次低,需人工編碼
  • 表達(dá)能力有限
  • 開發(fā)者自己管理作業(yè)(Job)之間的依賴關(guān)系
  • 難以看到程序整體邏輯
  • 執(zhí)行迭代操作效率低
  • 資源浪費(Map和Reduce分兩階段執(zhí)行)
  • 實時性差(適合批處理,不支持實時交互式)

Hadoop的優(yōu)化與發(fā)展主要體現(xiàn)在兩個方面:

  • 一方面是 Hadoop 自身兩大核心組件 MapReduce 和 HDFS的架構(gòu)設(shè)計改進(jìn)
  • 另一方面是 Hadoop 生態(tài)系統(tǒng)其它組件的不斷豐富,加入了Pig、Tez、Spark 等新組件

組件Hadoop1.0的問題Hadoop2.0的改進(jìn)
HDFS單一名稱節(jié)點,存在單點失效問題設(shè)計了HDFS HA,提供名稱節(jié)點熱備機制
HDFS單一命名空間,無法實現(xiàn)資源隔離設(shè)計了HDFS Federation,管理多個命名空間
MapReduce資源管理效率低設(shè)計了新的資源管理框架YARN

HDFS HA

HDFS 1.0 只存在一個名稱節(jié)點,一旦這個唯一的節(jié)點發(fā)生故障,將會導(dǎo)致整個集群的不可用,因此存在“單點故障問題”。而第二名稱節(jié)點只能起到冷備份的作用,無法解決單點故障問題。

為了解決單點故障問題,HDFS 2.0 采用了 HA(High Availability)架構(gòu)

HA集群中設(shè)置兩個名稱節(jié)點,分別處于“活躍(Active)”狀態(tài)和“待命(Standby)”狀態(tài)。活躍名稱節(jié)點負(fù)責(zé)對外處理所有客戶端的請求,而待命名稱節(jié)點作為備用節(jié)點。兩種名稱節(jié)點的狀態(tài)同步,可以借助于一個共享存儲系統(tǒng)來實現(xiàn)。(相當(dāng)于說待命名稱節(jié)點提供了“熱備份”的功能

一旦活躍名稱節(jié)點出現(xiàn)故障,就可以立即切換到待命名稱節(jié)點,不會影響到系統(tǒng)的正常對外服務(wù)。Zookeeper確保只有一個名稱節(jié)點在對外服務(wù),不會出現(xiàn)“兩個管家”的情況。名稱節(jié)點維護(hù)映射信息,數(shù)據(jù)節(jié)點同時向兩個名稱節(jié)點匯報信息。

HDFS Federation

HDFS 1.0中存在的問題:

  • 單點故障問題
  • 不可以水平擴展(通過縱向擴展會帶來過長的系統(tǒng)啟動時間,不可取)
  • 系統(tǒng)整體性能受限于單個名稱節(jié)點的吞吐量
  • 單個名稱節(jié)點難以提供不同程序之間的隔離性

雖然 HDFS HA 是熱備份,提供高可用性,但是其本質(zhì)上還是單名稱節(jié)點,只是解決了單點故障,還是無法解決可擴展性、系統(tǒng)性能和隔離性的問題,而 HDFS Federation 可以很好地解決這三個問題。

HDFS Federation的設(shè)計:

  • 在HDFS Federation中,設(shè)計了多個相互獨立的名稱節(jié)點,使得 HDFS 的命名服務(wù)能夠水平擴展, 這些名稱節(jié)點分別進(jìn)行各自命名空間和塊的管理,相互之間是聯(lián)盟(Federation)關(guān)系,不需要彼此協(xié)調(diào)。并且向后兼容
  • HDFS Federation中,所有名稱節(jié)點會共享底層的數(shù)據(jù)節(jié)點存儲 資源,數(shù)據(jù)節(jié)點向所有名稱節(jié)點匯報
  • 屬于同一個命名空間的塊構(gòu)成一個“塊池”

HDFS Federation設(shè)計可解決單名稱節(jié)點存在的以下幾個問題:

  • HDFS集群擴展性。多個名稱節(jié)點各自分管一部分目錄,使得一個集 群可以擴展到更多節(jié)點,不再像HDFS1.0中那樣由于內(nèi)存的限制制約文件 存儲數(shù)目
  • 性能更高效。多個名稱節(jié)點管理不同的數(shù)據(jù),且同時對外提供服務(wù), 將為用戶提供更高的讀寫吞吐率
  • 良好的隔離性。用戶可根據(jù)需要將不同業(yè)務(wù)數(shù)據(jù)交由不同名稱節(jié)點 管理,這樣不同業(yè)務(wù)之間影響很小
  • 需要注意的,HDFS Federation并不能解決單點故障問題,也就是說,每個名稱節(jié)點都存在在單點故障問題,需要為每個名稱節(jié)點部署一個后備名稱節(jié)點,以應(yīng)對名稱節(jié)點故障對業(yè)務(wù)產(chǎn)生的影響。

    資源調(diào)度框架YARN

    MapReduce1.0的缺陷

    MapReduce 1.0采用 Master/Slaver 架構(gòu)設(shè)計,包括一個 JobTracer 和若干個 TaskTracer ,前者負(fù)責(zé)作業(yè)的調(diào)度和資源的管理,后者負(fù)責(zé)執(zhí)行 JobTracer 指派的具體任務(wù)。 MapReduce 1.0既是一個計算框架,也是一個資源管理調(diào)度框架。

    但是,這樣一種架構(gòu)有一些難以克服的缺陷:

  • JobTracker 存在單點故障
  • JobTracker 任務(wù)過重(任務(wù)多時內(nèi)存開銷大,增加潛在失敗風(fēng)險,上限4000節(jié)點)
  • 容易出現(xiàn)內(nèi)存溢出(分配資源只考慮MapReduce任務(wù)數(shù),不考慮CPU、內(nèi)存實際使用情況)
  • 資源劃分不夠合理(強制劃分為slot ,包括Map slot和Reduce slot)
  • YARN設(shè)計思路

    Hadoop2.0 以后, MapReduce 1.0中的資源 管理調(diào)度功能,被單獨分離出來形成了 YARN,它是一個純粹的資源管理調(diào)度框架,而不是一個計算框架。被剝離了資源管理調(diào)度功能的 MapReduce 框架就變成了MapReduce 2.0, 它是運行在 YARN 之上的 一個純粹的計算框架,不再自己負(fù)責(zé)資源調(diào)度管理服務(wù),而是由 YARN 為其提供資源管理調(diào)度服務(wù)。

    YARN的設(shè)計思路:把原 JobTracer 的三大功能進(jìn)行拆分,即不讓JobTracer 承擔(dān)過多的功能,這樣大大降低了 JobTracer 的負(fù)擔(dān),提升了系統(tǒng)運行的效率和穩(wěn)定性。

    重新設(shè)計后得到的 YARN 包括 ResourceManager、ApplicationMater 和 NodeManager。

    • ResourceManager 負(fù)責(zé)資源管理
    • ApplicationMaster 負(fù)責(zé)任務(wù)調(diào)度和監(jiān)控
    • NodeManager 負(fù)責(zé)執(zhí)行原 TaskTracer 的任務(wù)

    YARN體系結(jié)構(gòu)

    組件功能
    ResourceManager
    • 處理客戶端請求
    • 啟動/監(jiān)控 ApplicationMaster
    • 監(jiān)控 NodeManager
    • 資源分配和調(diào)度
    ApplicationMaster
    • 為應(yīng)用程序申請資源,并分配給內(nèi)部任務(wù)
    • 任務(wù)調(diào)度、監(jiān)控與容錯
    NodeManager
    • 單個節(jié)點上的資源管理
    • 處理來自 ResourceManager 的命令
    • 處理來自 ApplicationMaster 的命令

    Resource Manager:

    • ResourceManager(RM)是一個全局的資源管理器,負(fù)責(zé)整個系統(tǒng)的資源 管理和分配,主要包括兩個組件,即調(diào)度器(Scheduler)和應(yīng)用程序管理 器(Applications Manager)
    • 調(diào)度器接收來自ApplicationMaster的應(yīng)用程序資源請求,把集群中的資源以 “容器”的形式分配給提出申請的應(yīng)用程序,容器的選擇通常會考慮應(yīng)用 程序所要處理的數(shù)據(jù)的位置,進(jìn)行就近選擇,從而實現(xiàn)“計算向數(shù)據(jù)靠攏”
    • 容器(Container)作為動態(tài)資源分配單位,每個容器中都封裝了一定數(shù)量 的CPU、內(nèi)存、磁盤等資源,從而限定每個應(yīng)用程序可以使用的資源量
    • 調(diào)度器被設(shè)計成是一個可插拔的組件,YARN不僅自身提供了許多種直接可 用的調(diào)度器,也允許用戶根據(jù)自己的需求重新設(shè)計調(diào)度器
    • 應(yīng)用程序管理器(Applications Manager)負(fù)責(zé)系統(tǒng)中所有應(yīng)用程序的管理 工作,主要包括應(yīng)用程序提交、與調(diào)度器協(xié)商資源以啟動ApplicationMaster、 監(jiān)控ApplicationMaster運行狀態(tài)并在失敗時重新啟動等

    Application Master:

    • ResourceManager接收用戶提交的作業(yè),按照作業(yè)的上下文信息以及從 NodeManager收集來的容器狀態(tài)信息,啟動調(diào)度過程,為用戶作業(yè)啟動一 個ApplicationMaster
    • ApplicationMaster的主要功能是:
    • 當(dāng)用戶作業(yè)提交時,ApplicationMaster與ResourceManager協(xié)商獲取資源, ResourceManager會以容器的形式為ApplicationMaster分配資源;
    • 把獲得的資源進(jìn)一步分配給內(nèi)部的各個任務(wù)(Map任務(wù)或Reduce任務(wù)), 實現(xiàn)資源的“二次分配”;
    • 與NodeManager保持交互通信進(jìn)行應(yīng)用程序的啟動、運行、監(jiān)控和停止,監(jiān)控申請到的資源的使用情況,對所有任務(wù)的執(zhí)行進(jìn)度和狀態(tài)進(jìn)行監(jiān)控, 并在任務(wù)發(fā)生失敗時執(zhí)行失敗恢復(fù)(即重新申請資源重啟任務(wù));
    • 定時向ResourceManager發(fā)送“心跳”消息,報告資源的使用情況和應(yīng)用的進(jìn)度信息;
    • 當(dāng)作業(yè)完成時,ApplicationMaster向ResourceManager注銷容器,執(zhí)行周期完成。

    Node Manager:

    • NodeManager是駐留在一個YARN集群中的每個節(jié)點上的代理,主要負(fù)責(zé):
    • 容器生命周期管理
    • 監(jiān)控每個容器的資源(CPU、內(nèi)存等)使用情況
    • 跟蹤節(jié)點健康狀況
    • 以“心跳”的方式與ResourceManager保持通信
    • 向ResourceManager匯報作業(yè)的資源使用情況和每個容器的運行狀態(tài)
    • 接收來自ApplicationMaster的啟動/停止容器的各種請求

    需要說明的是,NodeManager主要負(fù)責(zé)管理抽象的容器,只處理與容器相關(guān) 的事情,而不具體負(fù)責(zé)每個任務(wù)(Map任務(wù)或Reduce任務(wù))自身狀態(tài)的管理, 因為這些管理工作是由ApplicationMaster完成的,ApplicationMaster會通過不 斷與NodeManager通信來掌握各個任務(wù)的執(zhí)行狀態(tài)

    在集群部署方面,YARN的各個組件是和Hadoop集群中的其他組件進(jìn)行統(tǒng)一部署的

    YARN工作流程

    在 YARN 框架中執(zhí)行一個 MapReduce 程序時,從提交到完成需要經(jīng)歷 8 個步驟:

    • 步驟1:用戶編寫客戶端應(yīng)用程序,向YARN提交應(yīng)用程序
    • 步驟2:YARN中的ResourceManager負(fù)責(zé)接收和處理來自客戶端的請求,為應(yīng)用 程序分配一個容器,在該容器中啟動一個ApplicationMaster
    • 步驟3:ApplicationMaster被創(chuàng)建后會首 先向ResourceManager注冊
    • 步驟4:ApplicationMaster向 ResourceManager申請資源
    • 步驟5:ResourceManager以“容器”的 形式向提出申請的ApplicationMaster分 配資源
    • 步驟6:對資源二次分配,并在容器中 啟動任務(wù)
    • 步驟7:各個任務(wù)向ApplicationMaster匯 報自己的狀態(tài)和進(jìn)度
    • 步驟8:應(yīng)用程序運行完成后, ApplicationMaster向ResourceManager的 應(yīng)用程序管理器注銷并關(guān)閉自己

    YARN與MapReduce1.0的對比

    從MapReduce1.0框架發(fā)展到Y(jié)ARN框架,客戶端并沒有發(fā)生變 化,其大部分調(diào)用API及接口都保持兼容。

    YARN 大大減少了承擔(dān)中心服務(wù)功能的ResourceManager的資源消耗

    • ApplicationMaster來完成需要大量資源消耗的任務(wù)調(diào)度和監(jiān)控
    • 多個作業(yè)對應(yīng)多個ApplicationMaster,實現(xiàn)了監(jiān)控分布化

    MapReduce1.0既是一個計算框架,又是一個資源管理調(diào)度框 架,但是,只能支持MapReduce編程模型。而YARN則是一個 純粹的資源調(diào)度管理框架,在它上面可以運行包括 MapReduce在內(nèi)的不同類型的計算框架,只要編程實現(xiàn)相應(yīng) 的ApplicationMaster

    YARN中的資源管理比MapReduce1.0更加高效,它以容器為單位,而不是以 slot 為單位

    YARN的發(fā)展目標(biāo)

    YARN的目標(biāo)是實現(xiàn)“一個集群多個框架”

    一個企業(yè)當(dāng)中同時存在各種不同的業(yè)務(wù)應(yīng)用場景,需要采用不同的計算框架

    • MapReduce實現(xiàn)離線批處理
    • 使用Storm實現(xiàn)流式數(shù)據(jù)實時分析
    • 使用Spark實現(xiàn)迭代計算
    • ······

    這些產(chǎn)品通常來自不同的開發(fā)團隊,具有各自的資源調(diào)度管理機制,為了避免不同類型應(yīng)用之間互相干擾,企業(yè)就需要把內(nèi)部的服務(wù)器拆分成多個集群,分別安裝運行不同的計算框架,即“一個框架一個集群”

    • 集群資源利用率低
    • 數(shù)據(jù)無法共享
    • 維護(hù)代價高

    YARN的目標(biāo)就是實現(xiàn)“一個集群多個框架”,即在一個集群上部署一個統(tǒng)一的資源調(diào)度管理框架YARN,在YARN之上可以部署其他各種計算框架。

    由YARN為這些計算框架提供統(tǒng)一的資源調(diào)度管理服務(wù),并且能夠根據(jù)各種 計算框架的負(fù)載需求,調(diào)整各自占用的資源,實現(xiàn)集群資源共享和資源彈性收縮。可以實現(xiàn)一個集群上的不同應(yīng)用負(fù)載混搭,有效提高了集群的利用率。不同計算框架可以共享底層存儲,避免了數(shù)據(jù)集跨集群移動。

    總結(jié)

    以上是生活随笔為你收集整理的第六章-Hadoop优化与发展的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。