如何在我的 Amazon EMR 叢集上為 NameNode 服務關閉安全模式?
當我嘗試在 Amazon EMR 叢集上執行 Apache Hadoop 或 Apache Spark 作業時,NameNode 服務會進入安全模式。我已關閉安全模式,但它會立即重新開啟。
簡短說明
在 Amazon EMR 叢集上執行 Apache Hadoop 或 Apache Spark 作業時,您可能會收到以下其中一則錯誤訊息:
- 「Cannot create file/user/test.txt._COPYING_.Name node is in safe mode.」
- 「org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot delete /user/hadoop/.sparkStaging/application_15########_0001.Name node is in safe mode.It was turned on manually.Use "hdfs dfsadmin -safemode leave" to turn safe mode off.NamenodeHostName:ip-###-##-##-##.ec2.internal」
在 DataNode 回報大多數檔案系統區塊可用後,NameNode 會自動離開安全模式。不過,NameNode 可能因以下原因再次進入安全模式:
- 可用空間小於 NameNode 儲存目錄所需的空間量。
- NameNode 無法將 FsImage 與 EditLog 載入記憶體。
- NameNode 未收到來自 DataNode 的區塊報告。
- 叢集中的部分節點可能已停止運作,導致這些節點上的區塊變為不可用。
- 部分區塊可能已損毀。
解決方法
**重要:**在某些情況下,當您手動關閉安全模式時,可能會發生資料遺失。
若要手動關閉安全模式,請執行以下命令:
sudo -u hdfs hadoop dfsadmin -safemode leave
如果安全模式自動重新開啟,請在 /var/log/hadoop-hdfs/ 檢查 NameNode 日誌以確定根本原因。在您判斷原因後,請使用以下疑難排解步驟來解決問題。
切換到具有多個主要節點的叢集
在只有一個主要節點的叢集中,檢查點程序不會自動執行。因此,Hadoop 分散式檔案系統 (HDFS) 無法將編輯日誌備份到新的快照 (FsImage),也無法自動移除這些日誌。如果您的叢集只有一個主要節點,編輯日誌可能會用盡 /mnt 中的所有磁碟空間。若要解決此問題,請啟動具有多個主要節點的叢集。具有多個主要節點的叢集支援 HDFS NameNode 的高可用性。
從 /mnt 移除不必要的檔案
dfs.namenode.resource.du.reserved 參數會指定 /mnt 的最低可用磁碟空間。當 /mnt 的可用磁碟空間降至低於您在 dfs.namenode.resource.du.reserved 中設定的值時,NameNode 就會進入安全模式。dfs.namenode.resource.du.reserved 的預設值為 100 MB。當安全模式開啟時,NameNode 會封鎖所有檔案系統和修改。若要解決此問題,您必須從 /mnt 移除不必要的檔案。
如果有足夠的磁碟空間,日誌看起來會類似以下範例:
2020-08-28 19:14:43,540 WARN org.apache.hadoop.hdfs.server.namenode.NameNodeResourceChecker (org.apache.hadoop.hdfs.server.namenode.FSNamesystem$NameNodeResourceMonitor@5baaae4c): Space available on volume '/dev/xvdb2' is 76546048, which is below the configured reserved amount 104857600
如果磁碟空間不足,日誌看起來會類似以下範例:
2020-09-28 19:14:43,540 WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem (org.apache.hadoop.hdfs.server.namenode.FSNamesystem$NameNodeResourceMonitor@5baaae4c): NameNode low on available disk space. Already in safe mode.
若要移除不必要的檔案,請完成以下步驟:
-
若要確認 NameNode 仍處於安全模式,請執行以下命令:
[root@ip-###-##-##-### mnt]# hdfs dfsadmin -safemode getSafe mode is ON -
從 /mnt 刪除不必要的檔案。
**注意:**如果在只有一個主要節點的叢集中,目錄 in/mnt/namenode/current 目錄使用了大量空間,請建立新的快照 (FsImage)。然後移除舊的編輯日誌。 -
檢查 /mnt 中的可用磁碟空間量。如果可用空間大於 100 MB,請執行以下命令再次檢查安全模式的狀態:
[hadoop@ip-###-##-##-### ~]$ hdfs dfsadmin -safemode get範例輸出:
Safe mode is ON -
執行以下命令以關閉安全模式:
[hadoop@ip-###-##-##-### ~]$ hdfs dfsadmin -safemode leave範例輸出:
Safe mode is OFF
如果 /mnt 的可用空間仍少於 100 MB,請執行以下其中一個或多個動作:
- 移除更多檔案。
- 增加 /mnt 磁碟區的大小。
移除更多檔案
請完成以下步驟:
-
執行以下命令以導覽到 /mnt 目錄:
cd /mnt -
執行以下命令以判斷哪些資料夾使用最多磁碟空間:
sudo du -hsx * | sort -rh | head -10 -
執行以下命令以檢查使用最多磁碟空間之資料夾內最大的子資料夾:
cd /var sudo du -hsx * | sort -rh | head -10**注意:**前述命令會檢查 var 資料夾中最大的子資料夾。若要檢查其他資料夾,請將 var 替換為您要檢查的資料夾。
-
先刪除最大的檔案。請確認您只刪除不再需要的檔案。Amazon Simple Storage Service (Amazon S3) 日誌儲存貯體已儲存來自 /mnt/var/log/hadoop-hdfs/ 和 /mnt/var/log/hadoop-yarn/ 的壓縮日誌檔備份副本。您可以安全地刪除這些日誌檔。
-
在您刪除不必要的檔案之後,請執行以下命令再次檢查安全模式的狀態:
[hadoop@ip-###-##-##-### ~]$ hdfs dfsadmin -safemode get範例輸出:
Safe mode is ON -
執行以下命令以關閉安全模式:
[hadoop@ip-###-##-##-### ~]$ hdfs dfsadmin -safemode leave範例輸出:
Safe mode is OFF
檢查損毀或遺失的區塊與檔案
請完成以下步驟:
- 若要檢查叢集的運作狀態,請執行以下命令:
**注意:**輸出報告也會提供複寫不足區塊的百分比,以及遺失複本的數量。hdfs fsck / - 若要找出檔案每個區塊所在的 DataNode,請針對清單中的每個檔案執行以下命令:
**注意:**請將 example_file_name 替換為您的檔案名稱。hdfs fsck example_file_name -locations -blocks -files
範例輸出:
前述範例輸出顯示 192.168.0.2 DataNode 儲存該區塊。您可以檢查 DataNode 的日誌,查看與特定區塊 ID (blk_##) 相關的錯誤。0. BP-762523015-192.168.0.2-1480061879099:blk_1073741830_1006 len=134217728 MISSING! 1. BP-762523015-192.168.0.2-1480061879099:blk_1073741831_1007 len=134217728 MISSING! 2. BP-762523015-192.168.0.2-1480061879099:blk_1073741832_1008 len=70846464 MISSING!
**注意:**遺失的區塊通常是因為節點意外終止造成的。 - 若要刪除已損毀的檔案,請退出安全模式,然後執行以下命令:
**注意:**請將 example_file_name 替換為您的檔案名稱。hdfs dfs -rm example_file_name
使用 CloudWatch 指標監控 HDFS 的運作狀態
請使用以下 Amazon CloudWatch 指標來判斷 NameNode 為何會進入安全模式:
- 若要確認 HDFS 儲存體的使用百分比,請檢閱 HDFSUtilization。
- 若要確認 HDFS 中沒有任何複本的區塊數量,請檢閱 MissingBlocks。這些可能是損毀的區塊。
- 若要確認需要進行複寫的區塊數量,請檢閱 UnderReplicatedBlocks。
相關資訊
Apache Hadoop 網站上的 HDFS 使用者指南
- 語言
- 中文 (繁體)

相關內容
已提問 1 年前
AWS 官方已更新 10 個月前