首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

Hadoop 常見錯誤與解決方案:NamespaceID 不符、防火牆阻擋、安全模式、上傳失敗

     編輯:PHP 綜合知識

Hadoop 叢集運維中最常遇到的 4 類錯誤及其根因、解決步驟。

1. DataNode 啟動失敗:Incompatible namespaceIDs

ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: 
java.io.IOException: Incompatible namespaceIDs in...

原因:NameNode 格式化 (hadoop namenode -format) 會產生新的 namespaceID,但 DataNode 資料目錄 (dfs.data.dir) 仍保留舊 ID,兩者不一致導致 DataNode 拒絕啟動。

解決:

  1. 停止叢集。
  2. 刪除所有 DataNode 的 dfs.data.dir 目錄內容 (或整個目錄)。
  3. 重新格式化 NameNode:hadoop namenode -format。
  4. 啟動叢集。

預防:每次格式化 NameNode 前,務必同步清空所有 DataNode 資料目錄。

2. DataNode 無法連線 NameNode:NoRouteToHostException

ERROR ... DataNode: java.io.IOException: Call to ... failed on local exception: 
java.net.NoRouteToHostException: No route to host

原因:防火牆阻擋 DataNode ↔ NameNode 通訊埠 (預設 9000, 50010, 50020, 50075, 50070 等)。

解決:

# 暫時關閉 (測試環境)
service iptables stop
# 或永久關閉
chkconfig iptables off

# 生產環境建議:精確開放埠
iptables -A INPUT -p tcp --dport 9000 -j ACCEPT
iptables -A INPUT -p tcp --dport 50010 -j ACCEPT
... (其他埠)
service iptables save

注意:機器重啟後防火牆可能自動開啟,需設定開機自動關閉或開放埠規則持久化。

3. 上傳檔案失敗:Bad connect ack / Unable to create new block

INFO hdfs.DFSClient: Exception in createBlockOutputStream 
java.io.IOException: Bad connect ack with firstBadLink
WARN hdfs.DFSClient: DataStreamer Exception: 
java.io.IOException: Unable to create new block.

原因:同上,防火牆/SELinux 阻擋 DataNode 間或 Client→DataNode 的資料傳輸埠。

解決:

  1. 關閉防火牆 (同上)。
  2. 停用 SELinux:編輯 /etc/selinux/config,設定 SELINUX=disabled,重啟機器。

4. 安全模式導致無法刪除/修改

org.apache.hadoop.dfs.SafeModeException: Cannot delete ..., Name node is in safe mode

原因:NameNode 啟動進入安全模式,檢查區塊複製數、修復損壞區塊,期間檔案系統唯讀。

解決:

  • 等待:通常幾秒至幾分鐘自動退出 (視叢集大小)。
  • 手動退出 (確認叢集健康後):
    hadoop dfsadmin -safemode leave
  • 進入安全模式 (維護時):
    hadoop dfsadmin -safemode enter

排查建議

  • 優先檢查 $HADOOP_HOME/logs/hadoop-*-namenode-*.log 與 *-datanode-*.log。
  • 使用 hadoop fsck / 檢查檔案系統健康度。
  • 叢集規劃時預留足夠磁碟空間,避免 DataNode 磁碟滿導致區塊遺失。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved