在 Ubuntu 上使用 Eclipse 運行 MapReduce 程式時,報錯:
Permission denied: user=hadoop, access=WRITE, inode="/user/root":root:supergroup:rwxr-xr-x
核心原因: 程式以 `hadoop` 用戶身份運行(非 root),嘗試將輸出寫入 HDFS 的 `/user/root/output` 目錄,但該目錄擁有者為 `root`,權限 `rwxr-xr-x` 僅允許擁有者寫入,`hadoop` 用戶無寫入權限。
在代碼中將輸出路徑指定為 `hadoop` 用戶擁有的目錄,如 `/user/hadoop/output` 或 `/tmp/output`:
FileOutputFormat.setOutputPath(job, new Path("/user/hadoop/output"));
或在提交任務前確保目錄存在且有權限:
hadoop fs -mkdir -p /user/hadoop/output hadoop fs -chown hadoop:hadoop /user/hadoop/output
授予 `/user/root` 目錄寫入權限:
hadoop fs -chmod 777 /user/root
注意: 生產環境嚴禁使用 777,僅限開發/測試環境快速驗證。正規做法是規劃用戶專屬目錄並設定合適 ACL。
權限問題是 Hadoop 開發中最常見的「坑」之一,建立清晰的用戶-目錄映射規範,並將其納入部署自動化流程,能從根源上杜絕此類問題。