Ubuntu環境下Hadoop常見問題解決方法
Hadoop依賴core-site.xml
、hdfs-site.xml
、yarn-site.xml
等配置文件,格式錯誤(如多余空格、缺失閉合標簽)或路徑配置不當(如fs.defaultFS
指向無效地址)會導致集群啟動失敗。
解決方法:
xmllint
)檢查格式正確性;dfs.namenode.name.dir
指向的目錄需存在且有寫入權限);yarn.nodemanager.aux-services
需設置為mapreduce_shuffle
)。JAVA_HOME
(Java運行環境)或HADOOP_HOME
(Hadoop安裝目錄)未配置,或配置后未生效,會導致Hadoop命令無法識別或啟動失敗。
解決方法:
~/.bashrc
(當前用戶)或/etc/profile
(所有用戶),添加以下內容:export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 # 根據實際Java安裝路徑調整
export HADOOP_HOME=/usr/local/hadoop # 根據實際Hadoop安裝路徑調整
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source ~/.bashrc
(或source /etc/profile
)使配置生效;echo $JAVA_HOME
(應輸出Java路徑)、hadoop version
(應顯示Hadoop版本信息)。Hadoop集群節點間需要通過SSH無密碼登錄實現通信,若未正確配置,會導致start-dfs.sh
或start-yarn.sh
命令卡住或報錯。
解決方法:
hadoop01
)生成SSH密鑰對:ssh-keygen -t rsa -P ''
(直接回車,默認保存到~/.ssh/id_rsa
);cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
;authorized_keys
文件權限:chmod 600 ~/.ssh/authorized_keys
;ssh hadoop02
(從節點主機名),應無需輸入密碼即可登錄。NameNode是HDFS的核心組件,啟動失敗常見原因包括元數據損壞(如未正常關閉集群)、dfs.namenode.name.dir
目錄權限不足或格式化問題。
解決方法:
$HADOOP_HOME/logs
目錄下的NameNode.log
日志,定位具體錯誤(如java.io.IOException: NameNode is not formatted
);fsimage
和edits
文件(位于dfs.namenode.name.dir
目錄);hdfs namenode -format
格式化NameNode(注意:格式化會清除HDFS中的所有數據,需提前備份);dfs.namenode.name.dir
目錄存在且有寫入權限(如chown -R hadoop:hadoop /usr/local/hadoop/data/namenode
)。DataNode磁盤故障會導致數據丟失,dfs.replication
(副本數)設置過高(如集群節點數少但副本數為3)會導致啟動失敗或空間不足。
解決方法:
df -h
(查看磁盤使用率)、lsblk
(查看磁盤分區);dfs.datanode.data.dir
配置(如添加新分區路徑),并重啟DataNode;dfs.replication
設置為1(hdfs-site.xml
中修改),避免因副本不足導致啟動失??;hdfs dfs -setrep 3 /path/to/file
(將指定文件的副本數設置為3)。上傳到HDFS的中文文件顯示亂碼,通常是由于文件編碼與HDFS默認編碼(UTF-8)不一致導致。
解決方法:
vim
編輯文件時,輸入:set fileencoding=utf-8
);hdfs dfs -put -D dfs.client.socket-timeout=30000 -D dfs.client.use.datanode.hostname=true -D dfs.datanode.socket.write.timeout=30000 -D dfs.write.packet.size=65536 -D dfs.replication=1 -D dfs.blocksize=134217728 -D dfs.client.encoding=UTF-8 local_file /hdfs/path
;hdfs dfs -cat /hdfs/path | iconv -f UTF-8 -t GBK
(若需轉換為GBK顯示)。HDFS性能問題常見原因包括DataNode數量不足、塊大小設置過小、網絡帶寬瓶頸或磁盤I/O過高。
解決方法:
hadoop
用戶環境變量、配置SSH免密登錄、啟動DataNode服務);dfs.blocksize
(如設置為256M或512M,適用于大文件處理);dfs.client.read.shortcircuit true
,減少數據通過網絡傳輸;top
(CPU)、free -h
(內存)、iostat -x 1
(磁盤I/O)命令查看資源使用情況,優化瓶頸環節(如增加內存、更換高速磁盤)。Hadoop對文件和目錄的權限控制嚴格,常見錯誤包括Permission denied
(無法訪問目錄)、Cannot create directory
(無法創建目錄)。
解決方法:
hadoop
用戶操作:所有Hadoop命令需以hadoop
用戶身份執行(如sudo -u hadoop hdfs dfs -ls /
);hdfs dfs
命令設置權限(如hadoop fs -chmod 777 /user/hadoop/input
,允許所有用戶讀寫執行;hadoop fs -chown hadoop:hadoop /user/hadoop/input
,將目錄所有者設置為hadoop
用戶);hdfs-site.xml
中的dfs.permissions.enabled
(設為false
可關閉權限檢查,但會降低安全性,僅用于測試環境)。