查看 HDFS 運作狀態
在維護系統前, 我們可以使用 HDFS 系統的 "dfsadmin" 管理命令來查看 HDFS 的運作狀態:
Note. 使用上述命令需要具備 HDFS 系統管理權限才能執行
查看 HDFS 檔案儲存資訊
對於系統管理人員只了解 HDFS 系統運作狀態往往還不夠, 還需要進一步知道各個檔案的儲存資訊, 例如: 檔案區塊儲存位置, 這時候可以使用 HDFS 系統的 "fsck" 管理指令:
Secondary NameNode 主要資料庫備分及彙整
在 HDFS 分散式系統中, 除了 NameNode 和 DataNode 運算主機, 其實還有一個相當重要角色, 那就是 "Secondary NameNode"! 在探討其功能之前, 首先來介紹 "fsimage" 檔和 "edits" 檔. "fsimage" 和 "edits" 這兩個檔案都儲存在 HDFS 系統的 Metadata 目錄中, "fsimage" 是用來存放 HDFS 系統中, 所有檔案及目錄的屬性資料; "edits" 則是在 HDFS 系統啟動後, 用來記錄所有的異動資料, 例如新增, 刪除, 修改檔案等的操作紀錄.
當 NameNode 啟動後, "fsimage" 和 "edits" 會被讀入記憶體中, 之後任何異動的資料會被記錄在 "edits" 檔, 且會同步修改記憶體中的 HDFS Metadata, 一旦 NameNode 開始運作, 存放 Metadata 目錄中的 "fsimage" 不會再有任何的改變; 不過在實際應用面上, 機房作業中的主機往往會長時間不會關機, 負責記錄異動資料的 "edits" 檔案將會變得非常龐大! 這時就需要仰賴 "Secondary NameNode" 的運作.
每隔一段時間, "Secondary NameNode" 會定期連結到 NameNode 主機 (預設一小時), 取回 "fsimage" 和 "edits" 檔案, 並將 "edits" 的資料彙整更新到 "fsimage". 更新後的 "fsimage" 檔會再回傳到 NameNode 主機的 Metadata 目錄, 以此更新 NameNode 的 "fsimage" 檔, 經過彙整過後的 "edits" 檔就會縮小. Secondary NameNode 這種彙整更新的運作模式, 其實透過些許設定, 就可以讓 "Secondary NameNode" 作為 NameNode 主機的毀壞備援機 (後面章節說明).
我們可以先使用下面命令, 查看 "Secondary NameNode" 的預設儲存目錄:
每次啟動主機系統都會自動重製 "/tmp" 目錄, 因此 Secondary NameNode 儲存的重要檔案將會被清空! 因此我們要再 "hdfs-site.xml" 檔案中加入 Secondary NameNode 的儲存目錄設定. 使用下面命令編輯設定該檔案:
這邊 NameNode 與 Secondary NameNode 在同一部運算主機上, 但在實際應用上請務必將 NameNode 與 Secondary NameNode 單獨分開建置. 如果要讓 Secondary NameNode 可以順利在另一部主機執行, 還必須在 "hdfs-site.xml" 加入以下設定:在維護系統前, 我們可以使用 HDFS 系統的 "dfsadmin" 管理命令來查看 HDFS 的運作狀態:
Note. 使用上述命令需要具備 HDFS 系統管理權限才能執行
查看 HDFS 檔案儲存資訊
對於系統管理人員只了解 HDFS 系統運作狀態往往還不夠, 還需要進一步知道各個檔案的儲存資訊, 例如: 檔案區塊儲存位置, 這時候可以使用 HDFS 系統的 "fsck" 管理指令:
Secondary NameNode 主要資料庫備分及彙整
在 HDFS 分散式系統中, 除了 NameNode 和 DataNode 運算主機, 其實還有一個相當重要角色, 那就是 "Secondary NameNode"! 在探討其功能之前, 首先來介紹 "fsimage" 檔和 "edits" 檔. "fsimage" 和 "edits" 這兩個檔案都儲存在 HDFS 系統的 Metadata 目錄中, "fsimage" 是用來存放 HDFS 系統中, 所有檔案及目錄的屬性資料; "edits" 則是在 HDFS 系統啟動後, 用來記錄所有的異動資料, 例如新增, 刪除, 修改檔案等的操作紀錄.
當 NameNode 啟動後, "fsimage" 和 "edits" 會被讀入記憶體中, 之後任何異動的資料會被記錄在 "edits" 檔, 且會同步修改記憶體中的 HDFS Metadata, 一旦 NameNode 開始運作, 存放 Metadata 目錄中的 "fsimage" 不會再有任何的改變; 不過在實際應用面上, 機房作業中的主機往往會長時間不會關機, 負責記錄異動資料的 "edits" 檔案將會變得非常龐大! 這時就需要仰賴 "Secondary NameNode" 的運作.
每隔一段時間, "Secondary NameNode" 會定期連結到 NameNode 主機 (預設一小時), 取回 "fsimage" 和 "edits" 檔案, 並將 "edits" 的資料彙整更新到 "fsimage". 更新後的 "fsimage" 檔會再回傳到 NameNode 主機的 Metadata 目錄, 以此更新 NameNode 的 "fsimage" 檔, 經過彙整過後的 "edits" 檔就會縮小. Secondary NameNode 這種彙整更新的運作模式, 其實透過些許設定, 就可以讓 "Secondary NameNode" 作為 NameNode 主機的毀壞備援機 (後面章節說明).
我們可以先使用下面命令, 查看 "Secondary NameNode" 的預設儲存目錄:
每次啟動主機系統都會自動重製 "/tmp" 目錄, 因此 Secondary NameNode 儲存的重要檔案將會被清空! 因此我們要再 "hdfs-site.xml" 檔案中加入 Secondary NameNode 的儲存目錄設定. 使用下面命令編輯設定該檔案:
Secondary NameNode 預設的間隔彙整時間為 3600 秒, 也就是每一小時會備份與彙整一次. 這個時間間隔可以在 "hdfs-site.xml" 設定進行變更:
上面變更時間為 10 分鐘, 完成之後為了確認設定值已經生效, 我們可以檢查 Secondary NameNode 的 Log 檔:
透過觀察時間差可以得知 Secondary NameNode 進行彙整更新的頻率.
設定 Rack Awareness
藉由 "core-site.xml" 檔案的設定, 讓 Client 端在眾多運算主機中, 能夠順利與 NameNode 主機連結, 但是在這麼多的機櫃 (Rack) 中, NameNode 是如何知道 DataNode 運算主機存放在哪個機櫃上呢? 在啟動 DataNode 之後, DataNode 會定期傳送訊息給 NameNode (例如: 硬碟剩餘空間) 已確定 DataNode 運運算主機是否有在運作. 而我們可以藉由 DataNode 主動傳送訊息的機制來撰寫程式, 讓 NameNode 收到 DataNode 運算主機的 IP 位址, 並藉由此 IP 位址就可以得知 DataNode 所在的機櫃位置.
使用下面指令建立名為 "rack-awareness.sh" 程式:
接著編輯 "core-site.xml" 進行設定:
接著重啟 HDFS 檔案系統, 並透過 Report 檢視設定是否生效:
管理 DataNode 運算主機
當 HDFS 系統的儲存空間不夠使用的時候, 有兩種解決方法, 我們可以擴充 DataNode 運算主機的硬體儲存設備, 或者直接添加新的 DataNode 運算主機. 不過這邊不建議使用第一種方法, 即使擴充了儲存空間, 資料區塊卻也不斷的存入, 很有可能會讓 DataNode 運算主機負載過重; 若可以直接添加 DataNode 運算主機, 不僅能擴充儲存空間, 更可以分散資料區塊存入 DataNode 的儲存配置, 進而提升 HDFS 系統的執行效率.
我們現在就來新增一台新的 DataNode 運算主機, 並作一些適當設定, 讓新的 DataNode 運算主機可以幫忙分散資料區塊的存入配置. 在實體主機終端使用下面指令複製一台新的 "dn03" 運算主機:
按下 "Ctrl+a , q" 回到實體主機. 接著為了讓執行 NameNode 的 nn 運算主機可以透過 SSH 端遠端管理連線 dn03 運算主機, 我們必須設定 nn 運算主機:
移除 DataNode 運算主機
若要在 HDFS 系統中移除 DataNode 運算主機, 請先停止運算主機的 DataNode 服務, 再做移除的動作. 請在 dn03 運算主機終端機上按下面指令停止 DataNode 服務:
接著回到 nn 運算主機檢視, 雖然 dn03 停止了 DataNode 服務, 但是還是要等一段時間 NameNode 才會發現這個狀況:
若要徹底移除 dn03 運算主機的 DataNode 服務, 還需要修改 "slaves" 檔案, 將 "dn03" 註解掉, 這樣重啟 HDFS 系統才不會連帶啟動 dn03 運算主機的 DataNode 服務.
DataNode 運算主機的管理策略
經由上述操作說明, 我們得知如何新增刪除 Hadoop 分散式運算系統的 DataNode 運算主機, 但這樣做會有兩個問題:
在實務管理上會使用 HDFS 系統的 "白名單" 來管控 DataNode 的異動. 首先來新增 HDFS 系統的白名單:
完成設定後, 就算你將 "dn03" 在 "slaves" 檔案的註解拿掉, 重啟 HDFS 系統也不會將 "dn03" 運算主機視為 DataNode 之一 (還是會啟動 dn03 這個 DataNode, 但是不會在 Report 看到此 DataNode).
Supplement
* Secondary Namenode - What it really do?
透過觀察時間差可以得知 Secondary NameNode 進行彙整更新的頻率.
設定 Rack Awareness
藉由 "core-site.xml" 檔案的設定, 讓 Client 端在眾多運算主機中, 能夠順利與 NameNode 主機連結, 但是在這麼多的機櫃 (Rack) 中, NameNode 是如何知道 DataNode 運算主機存放在哪個機櫃上呢? 在啟動 DataNode 之後, DataNode 會定期傳送訊息給 NameNode (例如: 硬碟剩餘空間) 已確定 DataNode 運運算主機是否有在運作. 而我們可以藉由 DataNode 主動傳送訊息的機制來撰寫程式, 讓 NameNode 收到 DataNode 運算主機的 IP 位址, 並藉由此 IP 位址就可以得知 DataNode 所在的機櫃位置.
使用下面指令建立名為 "rack-awareness.sh" 程式:
接著編輯 "core-site.xml" 進行設定:
接著重啟 HDFS 檔案系統, 並透過 Report 檢視設定是否生效:
管理 DataNode 運算主機
當 HDFS 系統的儲存空間不夠使用的時候, 有兩種解決方法, 我們可以擴充 DataNode 運算主機的硬體儲存設備, 或者直接添加新的 DataNode 運算主機. 不過這邊不建議使用第一種方法, 即使擴充了儲存空間, 資料區塊卻也不斷的存入, 很有可能會讓 DataNode 運算主機負載過重; 若可以直接添加 DataNode 運算主機, 不僅能擴充儲存空間, 更可以分散資料區塊存入 DataNode 的儲存配置, 進而提升 HDFS 系統的執行效率.
我們現在就來新增一台新的 DataNode 運算主機, 並作一些適當設定, 讓新的 DataNode 運算主機可以幫忙分散資料區塊的存入配置. 在實體主機終端使用下面指令複製一台新的 "dn03" 運算主機:
按下 "Ctrl+a , q" 回到實體主機. 接著為了讓執行 NameNode 的 nn 運算主機可以透過 SSH 端遠端管理連線 dn03 運算主機, 我們必須設定 nn 運算主機:
移除 DataNode 運算主機
若要在 HDFS 系統中移除 DataNode 運算主機, 請先停止運算主機的 DataNode 服務, 再做移除的動作. 請在 dn03 運算主機終端機上按下面指令停止 DataNode 服務:
接著回到 nn 運算主機檢視, 雖然 dn03 停止了 DataNode 服務, 但是還是要等一段時間 NameNode 才會發現這個狀況:
若要徹底移除 dn03 運算主機的 DataNode 服務, 還需要修改 "slaves" 檔案, 將 "dn03" 註解掉, 這樣重啟 HDFS 系統才不會連帶啟動 dn03 運算主機的 DataNode 服務.
DataNode 運算主機的管理策略
經由上述操作說明, 我們得知如何新增刪除 Hadoop 分散式運算系統的 DataNode 運算主機, 但這樣做會有兩個問題:
在實務管理上會使用 HDFS 系統的 "白名單" 來管控 DataNode 的異動. 首先來新增 HDFS 系統的白名單:
完成設定後, 就算你將 "dn03" 在 "slaves" 檔案的註解拿掉, 重啟 HDFS 系統也不會將 "dn03" 運算主機視為 DataNode 之一 (還是會啟動 dn03 這個 DataNode, 但是不會在 Report 看到此 DataNode).
Supplement
* Secondary Namenode - What it really do?
沒有留言:
張貼留言