結論
純 Windows 環境開發 Hadoop 應用 (MapReduce/Java) 不需要 Cygwin。 僅在「Windows 上運行 Hadoop 守護進程 (HDFS/YARN)」時才需 Cygwin 模擬 Linux Shell。
兩種開發模式比較
| 模式 | 是否需 Cygwin | 適用場景 |
| 本地開發/單元測試 (LocalJobRunner) |
不需要 |
寫 MapReduce 邏輯、單元測試、單機跑小資料 |
| Windows 運行完整 Hadoop 叢集 |
需要 |
需啟動 NameNode/DataNode/ResourceManager 等守護進程 |
| 虛擬機/WSL2 運行 Linux Hadoop |
不需要 (Linux 原生) |
生產環境一致性最佳、效能最好 |
純 Windows 開發步驟 (無 Cygwin)
- 安裝 JDK 8/11,設定 `JAVA_HOME`、`PATH`。
- 下載 Hadoop 二進制包 (如 `hadoop-3.3.6.tar.gz`),解壓至 `D:\hadoop`。
- 設定環境變數 `HADOOP_HOME=D:\hadoop`,`PATH+= %HADOOP_HOME%\bin`。
- 修改 `hadoop-env.cmd`:`set JAVA_HOME=你的JDK路徑`。
- 在 Eclipse 建立 Java Project,加入 Hadoop 所有 jar (`share/hadoop/**/*.jar`)。
- 程式碼中設定 `Configuration conf = new Configuration(); conf.set("fs.defaultFS", "file:///"); // 本地檔案系統`,即可用 `LocalJobRunner` 跑測試。
常見坑
- `winutils.exe` 缺失:Hadoop 在 Windows 需 `winutils.exe` 對應版本,放入 `%HADOOP_HOME%\bin`,否則 `NativeCodeLoader` 警告、權限錯誤。
- 路徑分隔符:Java 代碼中路徑用 `/` 或 `File.separator`,避免硬編碼 `\`。
- 權限問題:以管理員身分執行 Eclipse / cmd。
建議
若專案需求為「開發 MapReduce 邏輯」,直接用 LocalJobRunner + Windows IDE 即可,完全不用碰 Cygwin。若需驗證分散式行為,請改用 虛擬機 (Ubuntu/CentOS) + 共享資料夾,體驗更接近生產環境。