1. 程式人生 > >Hadoop框架:NameNode工作機制詳解

Hadoop框架:NameNode工作機制詳解

本文原始碼:[GitHub·點這裡](https://github.com/cicadasmile/big-data-parent) || [GitEE·點這裡](https://gitee.com/cicadasmile/big-data-parent) # 一、儲存機制 ## 1、基礎描述 NameNode執行時元資料需要存放在記憶體中,同時在磁碟中備份元資料的fsImage,當元資料有更新或者新增元資料時,修改記憶體中的元資料會把操作記錄追加到edits日誌檔案中,這裡不包括查詢操作。如果NameNode節點發生故障,可以通過FsImage和Edits的合併,重新把元資料載入到記憶體中,此時SecondaryNameNode專門用於fsImage和edits的合併。 ## 2、工作流程 ![](https://img2020.cnblogs.com/blog/1691717/202010/1691717-20201012095902299-985789753.png) **NameNode機制** - NameNode格式化啟動之後,首次會建立Fsimage和Edits檔案; - 非首次啟動直接載入FsImage映象檔案和Edits日誌到記憶體中; - 客戶端對元資料執行增刪改操作會記錄到Edits檔案; - 然後請求的相關操作會修改記憶體中的元資料; **SecondaryNameNode機制** - 詢問NameNode是否需要CheckPoint,NameNode返回資訊; - 如果需要SecondaryNameNode請求執行CheckPoint; - NameNode切割現有日誌檔案,新記錄滾動寫入新Edits檔案; - 滾動前的編輯日誌和映象檔案拷貝到SecondaryNameNode; - SecondaryNameNode載入Edits日誌和FsImage映象檔案到記憶體合併; - 生成新的映象檔案fsimage.chkpoint後拷貝到NameNode; - NameNode將fsimage.chkpoint重新命名成fsimage; ## 3、CheckPoint設定 通過修改hdfs-default.xml檔案的相關配置,設定一些SecondaryNameNode的機制,例如每隔一小時執行一次。 ```xml ``` # 二、檔案資訊 ## 1、FsImage檔案 NameNode記憶體中元資料序列化備份資訊; **生成路徑**:基於NameNode節點 ``` cd /opt/hadoop2.7/data/tmp/dfs/name/current/ ``` ![](https://img2020.cnblogs.com/blog/1691717/202010/1691717-20201012095916945-986153213.png) **檢視檔案** ``` # 基本語法 hdfs oiv -p 轉換檔案型別 -i 映象檔案 -o 轉換後文件輸出路徑 ``` 基於語法格式,操作上圖中的檔案: ``` # 轉換檔案 hdfs oiv -p XML -i fsimage_0000000000000000019 -o /data/fsimage.xml # 檢視 cat /data/fsimage.xml ``` 這樣就可以看到一些元資料的資訊。 ## 2、Edits檔案 存放HDFS檔案的所有增刪改操作的路徑,會記錄在Edits檔案中。 **基本語法** ``` hdfs oev -p 轉換檔案型別 -i 日誌檔案 -o 轉換後文件輸出路徑 ``` **檢視檔案** ``` # 轉換檔案 hdfs oev -p XML -i edits_0000000000000000020-0000000000000000020 -o /data/edits.xml # 檢視 cat /data/edits.xml ``` # 三、故障恢復 ## 1、拷貝SecondaryNameNode資料 首先結束NameNode程序; 刪除NameNode儲存的資料; ``` [root@hop01 /] rm -rf /opt/hadoop2.7/data/tmp/dfs/name/* ``` 拷貝SecondaryNameNode中資料到NameNode資料儲存目錄下; ``` # 注意SecondaryNameNode服務配置在hop03上 [root@hop01 /] scp -r root@hop03:/opt/hadoop2.7/data/tmp/dfs/namesecondary/* /opt/hadoop2.7/data/tmp/dfs/name/ ``` 重新啟動NameNode程序; ## 2、基於Checkpoint機制 修改hdfs-site.xml配置,同步到叢集相關服務下,重啟HDFS程序; ```xml ``` 結束NameNode程序; 刪除NameNode儲存的資料; ``` [root@hop01 /] rm -rf /opt/hadoop2.7/data/tmp/dfs/name/* ``` 由於叢集中SecondaryNameNode(在hop03)不和NameNode(在hop01)在一個主機節點上,需要將SecondaryNameNode儲存資料的目錄拷貝到NameNode儲存資料的平級目錄,並刪除in_use.lock檔案; ``` [root@hop01 /]scp -r root@hop03:/opt/hadoop2.7/data/tmp/dfs/namesecondary /opt/hadoop2.7/data/tmp/dfs/ [root@hop01 namesecondary/] rm -rf in_use.lock [root@hop01 dfs]$ ls data name namesecondary ``` 匯入檢查點資料 ``` [root@hop01 hadoop2.7] bin/hdfs namenode -importCheckpoint ``` 重新啟動NameNode ``` [root@hop01 hadoop2.7] sbin/hadoop-daemon.sh start namenode ``` # 四、多個目錄配置 NameNode可以配置多本地目錄,每個目錄存放內容相同,增加執行的可靠性; ## 1、新增配置 ```xml # vim /opt/hadoop2.7/etc/hadoop/hdfs-site.xml # 新增內容如下 ``` 該配置需要同步叢集下所有服務; ## 2、刪除原有資料 叢集下所有服務都需要執行該操作; ``` [root@hop01 hadoop2.7]# rm -rf data/ logs/ ``` 格式化NameNode之後重啟叢集服務。 # 五、安全模式 ## 1、基本描述 NameNode剛啟動時,會基於映象檔案和編輯日誌在記憶體中載入檔案系統元資料的映像,然後開始監聽DataNode請求,該過程期間處於一個只讀的安全模式下,客戶端無法上傳檔案,在該安全模式下DataNode會發送最新的資料塊列表資訊到NameNode,如果滿足最小副本條件,NameNode在指定時間後就會退出安全模式。 ## 2、安全模式 - 安全模式狀態 ``` /opt/hadoop2.7/bin/hdfs dfsadmin -safemode get ``` - 進入安全模式 ``` /opt/hadoop2.7/bin/hdfs dfsadmin -safemode enter ``` - 退出安全模式 ``` /opt/hadoop2.7/bin/hdfs dfsadmin -safemode leave ``` - 等待安全模式 ``` /opt/hadoop2.7/bin/hdfs dfsadmin -safemode wait ``` # 六、原始碼地址 ``` GitHub·地址 https://github.com/cicadasmile/big-data-parent GitEE·地址 https://gitee.com/cicadasmile/big-data-parent ``` **推薦閱讀:程式設計體系整理** |序號|專案名稱|GitHub地址|GitEE地址|推薦指數| |:---|:---|:---|:---|:---| |01|Java描述設計模式,演算法,資料結構|[GitHub·點這裡](https://github.com/cicadasmile/model-arithmetic-parent)|[GitEE·點這裡](https://gitee.com/cicadasmile/model-arithmetic-parent)|☆☆☆☆☆| |02|Java基礎、併發、面向物件、Web開發|[GitHub·點這裡](https://github.com/cicadasmile/java-base-parent)|[GitEE·點這裡](https://gitee.com/cicadasmile/java-base-parent)|☆☆☆☆| |03|SpringCloud微服務基礎元件案例詳解|[GitHub·點這裡](https://github.com/cicadasmile/spring-cloud-base)|[GitEE·點這裡](https://gitee.com/cicadasmile/spring-cloud-base)|☆☆☆| |04|SpringCloud微服務架構實戰綜合案例|[GitHub·點這裡](https://github.com/cicadasmile/husky-spring-cloud)|[GitEE·點這裡](https://gitee.com/cicadasmile/husky-spring-cloud)|☆☆☆☆☆| |05|SpringBoot框架基礎應用入門到進階|[GitHub·點這裡](https://github.com/cicadasmile/spring-boot-base)|[GitEE·點這裡](https://gitee.com/cicadasmile/spring-boot-base)|☆☆☆☆| |06|SpringBoot框架整合開發常用中介軟體|[GitHub·點這裡](https://github.com/cicadasmile/middle-ware-parent)|[GitEE·點這裡](https://gitee.com/cicadasmile/middle-ware-parent)|☆☆☆☆☆| |07|資料管理、分散式、架構設計基礎案例|[GitHub·點這裡](https://github.com/cicadasmile/data-manage-parent)|[GitEE·點這裡](https://gitee.com/cicadasmile/data-manage-parent)|☆☆☆☆☆| |08|大資料系列、儲存、元件、計算等框架|[GitHub·點這裡](https://github.com/cicadasmile/big-data-parent)|[GitEE·點這裡](https://gitee.com/cicadasmile/big-data-parent)|☆☆