錯誤如下:
org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /hdfsapi/test/c.txt could only be replicated to 0 nodes instead of minReplication (=1).
There are 1 datanode(s) running and 1 node(s) are excluded in this operation.
at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget4NewBlock(BlockManager.java:1595)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:3287)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.addBlock(NameNodeRpcServer.java:677)
...
檢視NameNode日志如下:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL1Z0VhlGbXR2bk1mYsplMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZwpmL2MDO1MzNwADM2IzMwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
背景
本人使用阿裡雲伺服器搭設了一個僞分布(Pseudo-Distributed Mode)叢集,使用hdfs dfs -put yarn-site.xml /feng3指令上傳檔案,以及hadoop fs -mkdir /hui指令建立檔案夾均正常,通過本地IDEA建立檔案夾也成功,但是上傳檔案提示失敗,出現上述問題。
分析
- 用jps指令檢視如下圖所示,所有的程序正常啟動。
IDEA上傳 HDFS檔案出錯 - hdfs dfsadmin -report檢視各節點是否正常,如圖顯示正常。
3. 檢視hdfs中繼資料目錄,確定NameNode和DataNode節點的VERSION檔案中CLUSTR_ID等資料一緻。
- 此時發現,上述三種情況都正常。據自己分析,此種情況主要有是因為IDEA(client)無法通路DataNode節點所緻,因為可以建立檔案夾,表示節點client可以通路NameNode。此種情況有可能是阿裡雲内外網IP位址的原因,本叢集Hadoop的配置統一使用的是dfs.http.address、fs.defaultFS 的配置統一使用的是hostname (master),并在hosts檔案下配置了master的内網IP。 由于預設情況下,NameNode傳回給client的是DataNode節點的IP,由于要在外網通路,是以修改hdfs-site.xml 檔案下dfs.client.use.datanode.hostname 屬性,設定為true ,表示NameNode傳回的是hostname (master),如下圖所示。
IDEA上傳 HDFS檔案出錯 IDEA上傳 HDFS檔案出錯
此時仍然無法上傳檔案,檢視NameNode日志可得需要通過9866 端口與DataNode通信,是以需要開啟阿裡雲伺服器的9866端口。 最終解決了問題。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL1Z0VhlGbXR2bk1mYsplMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZwpmL2MDO1MzNwADM2IzMwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)