天天看點

IDEA上傳 HDFS檔案出錯

錯誤如下:

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日志如下:

IDEA上傳 HDFS檔案出錯

背景

本人使用阿裡雲伺服器搭設了一個僞分布(Pseudo-Distributed Mode)叢集,使用hdfs dfs -put yarn-site.xml /feng3指令上傳檔案,以及hadoop fs -mkdir /hui指令建立檔案夾均正常,通過本地IDEA建立檔案夾也成功,但是上傳檔案提示失敗,出現上述問題。

分析

  1. 用jps指令檢視如下圖所示,所有的程序正常啟動。
    IDEA上傳 HDFS檔案出錯
  2. hdfs dfsadmin -report檢視各節點是否正常,如圖顯示正常。
IDEA上傳 HDFS檔案出錯

3. 檢視hdfs中繼資料目錄,確定NameNode和DataNode節點的VERSION檔案中CLUSTR_ID等資料一緻。

IDEA上傳 HDFS檔案出錯
  1. 此時發現,上述三種情況都正常。據自己分析,此種情況主要有是因為IDEA(client)無法通路DataNode節點所緻,因為可以建立檔案夾,表示節點client可以通路NameNode。此種情況有可能是阿裡雲内外網IP位址的原因,本叢集Hadoop的配置統一使用的是dfs.http.address、fs.defaultFS 的配置統一使用的是hostname (master),并在hosts檔案下配置了master的内網IP。
    IDEA上傳 HDFS檔案出錯
    由于預設情況下,NameNode傳回給client的是DataNode節點的IP,由于要在外網通路,是以修改hdfs-site.xml 檔案下dfs.client.use.datanode.hostname 屬性,設定為true ,表示NameNode傳回的是hostname (master),如下圖所示。
    IDEA上傳 HDFS檔案出錯

此時仍然無法上傳檔案,檢視NameNode日志可得需要通過9866 端口與DataNode通信,是以需要開啟阿裡雲伺服器的9866端口。 最終解決了問題。

IDEA上傳 HDFS檔案出錯