hadoop hdfs NameNode 與 Secondary NameNode元數據操作

元數據生成與備份

在這裏插入圖片描述

  1. 集羣啓動 nameNode 節點下會生成 edit 操作日誌和 fsImage 元數據文件鏡像 兩類數據磁盤備份, 並加載到內存中
  2. 客戶端向 nameNode 請求對數據操作(增刪改)
  3. nameNode 想 edit 操作日誌文件追加操作記錄(增刪改)
  4. 文件數據追加結束後, 將 nameNode 元數據進行修改
  5. secondary NameNode 會定期檢查 nameNode 中的 fsImage 和 edit 操作日誌是否由於長時間追加操作導致數據量過大, 效率降低, (默認 edit 操作日誌到達 100 萬條, 請求 checkPoint 操作)
  6. 開始請求 checkPoint, 對元數據備份進行整理
  7. nameNode 將 增加edit 操作日誌, 後續操作追加到新的 edit 操作中, 防止數據整理, 不能對數據寫的問題
  8. nameNode 將 edit 操作日誌和 fsImage 文件發送到 secondary NameNode
  9. secondary NameNode 將 edit 操作日誌和 fsImage 加載到內存合併
  10. secondary NameNode 將內存中的數據寫入到 fsImage.checkPoint文件中
  11. secondary NameNode 將 fsImage.checkPoint 發送到 NameNode 中
  12. NameNode 將 fsImage.checkPoint 重命名 fsImage 替換原來的 fsImage 文件

磁盤備份文件

在這裏插入圖片描述

  1. nameNode 節點元數據磁盤備份位置

  2. edits_000000000000001-00000000000000009 操作記錄, 每次的操作

  3. edits_inprogress_00000000000000000095 累計的操作記錄

    轉成 xml 查看操作 edits_0000000000000000010-000000000000000055 記錄了 55-10 次操作

    hdfs oev -p XML -i edits_0000000000000000010-000000000000000055 -o 55.xml
    

在這裏插入圖片描述

第 11 次操作 創建一個新的文件夾 路徑/user 空間 15853658… 用戶 hadoop 用戶組 supergroup

  1. fsImage_00000000000000094 元數據鏡像

    hdfs oiv -p XML -i fsImage_00000000000000092 -o fs.xml
    
  2. seen_txid 記錄 操作次數 位置

checkPoint 檢查配置

<!-- hdfs-default.xml -->
<property>
  <name>dfs.namenode.checkpoint.period</name>
  <value>3600</value>
  <description>設置 secondary NameNode 間隔時長 1h 執行 checkPoint 操作</description>
</property>

<property>
  <name>dfs.namenode.checkpoint.txns</name>
  <value>1000000</value>
<description>操作動作次數</description>
</property>

<property>
  <name>dfs.namenode.checkpoint.check.period</name>
  <value>60</value>
<description> 1分鐘檢查一次操作次數</description>
</property >

nameNode 故障處理

當 nameNode 中的數據丟失或其它原因數據不全時, 可以通過 secondary NameNode 對 NameNode 數據恢復

直接拷貝

  1. 停止 nameNode 節點

    kill -9 nameNodeId
    
  2. 刪除 nameNode 中name 數據

    rm -rf /opt/modules/hadoop/data/tmp/dfs/name/*
    
  3. 拷貝 secondary NameNode 數據到 nameNode 下

    scp -r hadoop@hadoop164:/opt/modules/hadoop/data/tmp/dfs/namesecondary/* /opt/modules/hadoop/data/tmp/dfs/name/
    
  4. 啓動 nameNode 節點

    hadoop-daemon.sh start namenode
    
  5. 啓動時,刷新網頁頁面提示安全模式

importCheckPoint 恢復

  1. 修改hdfs-site.xml中的配置

    <!--減小檢查時間-->
    <property>
      <name>dfs.namenode.checkpoint.period</name>
      <value>120</value>
    </property>
    <!--指定 nameNode 的 name 數據目錄-->
    <property>
      <name>dfs.namenode.name.dir</name>
      <value>/opt/module/hadoop/data/tmp/dfs/name</value>
    </property>
    
    
  2. 停止 nameNode 節點

    kill -9 nameNodeId
    
  3. 刪除 nameNode 中name 數據

    rm -rf /opt/modules/hadoop/data/tmp/dfs/name/*
    
  4. secondNameNode 與 nameNode 不在同一節點時, 將 secondaryNameNode中的數據拷貝到 nameNode 下

    scp -r hadoop@hadoop164:/opt/module/hadoop/data/tmp/dfs/namesecondary /opt/module/hadoop/data/tmp/dfs/namesecondary
    
  5. 刪除 in_use.lock

    cd namesecondary/
    rm -f in_use.lock
    
  6. 導入檢查點數據(過一會 ctrl+c)

    hdfs namenode -importCheckpoint
    
  7. 啓動 nameNode 節點

    hadoop-daemon.sh start namenode
    
  8. 啓動時,刷新網頁頁面提示安全模式

安全模式

  1. NameNode 啓動

    NameNode 啓動時, 首先將鏡像文件(FsImage) 載入內存, 並執行編輯日誌(Edits) 中的各項操作, 一旦在內存中成功建立文件系統元數據的映像, 則創建一個新的 FsImage 文件和一個空的編輯日誌. 此時, NameNode 開始監聽 DataNode 請求. 這個過程期間, NameNode 一直運行在安全模式,即 NameNode 的文件系統對客戶端來說是隻讀的.

  2. DataNode 啓動

    系統中的數據塊的位置並不是由 NameNode 維護的, 而是以塊列表的形式存儲在 DataNode 中, 在系統的正常操作期間, NameNode 會在內存中保留所有塊位置的映射信息. 在安全模式下, 各個 DataNode 會向 NameNode 發送最新的塊列表信息, NameNode 瞭解到足夠多的塊位置信息後, 即可高效運行文件系統.

  3. 安全模式退出判斷

    如果滿足"最小副本條件", NameNode 會在 30 秒後退出安全模式. 最小副本條件指的是在整個文件系統中 99.9%的塊滿足最小副本級別(默認值:dfs.replication.min=1). 在啓動一個剛剛格式化的 HDFS 集羣時, 因爲系統中沒有任何塊, 所有不會進入安全模式

  4. 命令操作

    hdfs dfsadmin -safemode get		(功能描述:查看安全模式狀態)
    hdfs dfsadmin -safemode enter  	(功能描述:進入安全模式狀態, 此時不允許操作數據)
    hdfs dfsadmin -safemode leave	(功能描述:離開安全模式狀態)
    hdfs dfsadmin -safemode wait	(功能描述:等待安全模式狀態, 等待安全模式退出後執行後續操作)
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章