Alan Tsai 的學習筆記


學而不思則罔,思而不學則殆,不思不學則“網貸” 為現任微軟最有價值專家 (MVP)、微軟認證講師 (MCT) 、Blogger、Youtuber:記錄軟體開發的點點滴滴 著重於微軟技術、C#、ASP .NET、Azure、DevOps、Docker、AI、Chatbot、Data Science

[Data Science 到底是什麼從一個完全外行角度來看][07]更深入看看Hadoop裡面的YARN和HDFS

image
圖片來源: https://pixabay.com/en/books-spine-colors-pastel-1099067/https://pixabay.com/en/math-blackboard-education-classroom-1547018/

在上一篇([06]建立Hadoop環境 -下篇)把hadoop pseudo-distributed mode整個建立了起來,在這個過程中有透過 jps看到啟動的時候有5個process:

  1. NameNode
  2. SecondaryNameNode
  3. ResourceManager
  4. NodeManager
  5. DataNode

這些process分別是yarn和HDFS執行起來的process,其中Master會有前 3個而slave有後 2個

這篇將會對於這幾個問題做一些介紹。

這篇提到的架構屬於Hadoop 2.x 版本的內容,Hadoop 3 之後有所變動。

Hadoop Cluster架構

在介紹幾個jps之前,需要了解Hadoop Clusted的架構。

Hadoop屬於Client/Server架構,基本上會有 一個Master多個slave

因為Master很重要,所以2.x版本可以為master做High Availability和Federation。

在上一篇建立的屬於 pseudo-distributed mode,換句話說Master和Slave都是同一台,所以才看到了5個process。

以下圖來說,是一個Master配上兩個Slave。master和slave裡面又可以分開兩層:MapReduce 和 HDFS 層

image
不同層的內容。來源:http://saphanatutorial.com/how-yarn-overcomes-mapreduce-limitations-in-hadoop-2-0/
注意,這邊的MapReduce層用的是Hadoop 1.x 的名稱。以2.0來說應該是YARN層。

JobTracker和TaskTracker

先來看看上面那層,可以看到:

  • JobTracker - 在Master
  • TaskTracker - 在Slave

當一個工作被記錄的時候(例如呼叫WordCount.jar),會先進入到 JobTracker,再由JobTracker去 切割分派給 slave的 TaskTracker去做執行。最後TaskTracker在回報結果到JobTracker裡面。

image
job分派情況,來源:http://saphanatutorial.com/mapreduce/

YARN - ResourceManager

看到這邊,或許會奇怪,為什麼jps裡面沒有JobTracker和TaskTracker?原因是,JobTracker和TaskTracker是 MapReduce Layer層的內容,而Hadoop 2.0加上了YARN,因此在jps看到的是 ResourceManagerNodeManager

簡單來說,可以理解成為:

  1. JobTracker - ResourceManager
  2. TaskTracker - NodeManager

localhost:8088

Port 8088是ResourceManager的UI界面

因此可以用瀏覽器看到目前:

  • 有幾個cluster - 幾個slave
  • 有哪些工作
  • 工作的執行情況

因此,run起來之後可以用這個來檢查目前情況。

image
8088的呈現畫面

NameNode、DataNode和Secondary NameNode

基本上HDFS層和MapReduce層有一樣概念,不過這一次變成是儲存資料層的分散式儲存。

  • NameNode - 在Master
  • DataNode - 在Slave

NameNode會記錄檔案分散在那幾個DataNode裡面。並且會透過replicate的方式把資料分成N份(一般是3份)儲存在不同DataNode達到檔案高可用性。

以下圖來說,檔案被拆成了兩份:AC,會自動被儲存在DataNode1~3,因此如果DataNode2掛掉了,NameNode會知道,並且 變成由DataNode1和DataNode3來處理。

image
NameNode和DataNode的關係。來源:https://www.quora.com/Explain-what-is-NameNode-in-Hadoop

Secondary NameNode呢?

上面介紹了NameNode和DataNode,那麼Secondary NameNode呢?

Secondary NameNode用來提供一個Checkpoint輔助NameNode處理資料。

因此Secondary NameNode不是備份用,因此為了避免誤會有時候會成為Checkpoint Node

localhost:50070

Port 50070是NameNode的一個web UI界面

在這個界面裡面可以看到DataNode有幾台,並且有幾台死掉了等資訊。

image
50070的畫面

結語

希望透過這篇對於底層的jps process有些了解,並且對於hadoop的cluster更有感覺。

在下一篇([08]Hadoop 改成完全分散模式),將會回到實際操作的部分,不過這次實際建立一個完整的cluster。Master那台本身是一台slave然後建立另外一台純粹是slave的機器。


如果文章對您有幫助,就請我喝杯飲料吧
街口支付QR Code
街口支付QR Code
台灣 Pay QR Code
台灣 Pay QR Code
Line Pay 一卡通 QR Code
Line Pay 一卡通 QR Code
街口支付QR Code
支付寶QR Code
街口支付QR Code
微信支付QR Code
comments powered by Disqus