2011-10-31 16 views
7

這既是關於java EOF異常的一般問題,也是與jar互操作性相關的Hadoop的EOF異常。任何一個主題的評論和答案都可以接受。從hbase/filesystem的hadoop namenode連接中發生EOF異常的含義是什麼?

背景

我注意到一些線程,其討論的隱蔽異常,這最終是由一「的readInt」方法引起的。這個異常似乎有一些獨立於hadoop的通用含義,但最終是由Hadoop罐子的互操作性引起的。

在我的情況下,當我嘗試在java中的hadoop中創建新的FileSystem對象時,我得到了它。

問題

我的問題是:這是怎麼回事?爲什麼一個整數的閱讀拋出一個異常EOF?這個EOF異常指的是什麼「文件」,以及爲什麼如果兩個罐子不能互操作會拋出這樣的異常呢?

其次,我也想知道如何解決這個錯誤,所以我可以連接並使用HDFS協議與Java API中,遠程讀/寫文件系統hadoops ....

 
java.io.IOException: Call to /10.0.1.37:50070 failed on local exception: java.io.EOFException 
    at org.apache.hadoop.ipc.Client.wrapException(Client.java:1139) 
    at org.apache.hadoop.ipc.Client.call(Client.java:1107) 
    at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:226) 
    at $Proxy0.getProtocolVersion(Unknown Source) 
    at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:398) 
    at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:384) 
    at org.apache.hadoop.hdfs.DFSClient.createRPCNamenode(DFSClient.java:111) 
    at org.apache.hadoop.hdfs.DFSClient.(DFSClient.java:213) 
    at org.apache.hadoop.hdfs.DFSClient.(DFSClient.java:180) 
    at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:89) 
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:1514) 
    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:67) 
    at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:1548) 
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:1530) 
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:228) 
    at sb.HadoopRemote.main(HadoopRemote.java:35) 
Caused by: java.io.EOFException 
    at java.io.DataInputStream.readInt(DataInputStream.java:375) 
    at org.apache.hadoop.ipc.Client$Connection.receiveResponse(Client.java:819) 
    at org.apache.hadoop.ipc.Client$Connection.run(Client.java:720) 

回答

5

關於hadoop:我修正了錯誤!您需要確保core-site.xml服務於0.0.0.0而不是127.0.0.1(localhost)。

如果您收到EOF異常,這意味着該端口不能在該ip上進行外部訪問,因此在hadoop客戶端/服務器ipc之間不會讀取數據。

+1

它也可能意味着其他的東西...... EOF異常是非常通用的。 – jayunit100

+0

抱歉,你的意思是服務於0.0.0.0。你能否從你的配置文件中記下名稱/價值支柱對? – hba

+1

「服務到0.0.0.0」是什麼意思?文件core-site.sh具有屬性' fs.default.name hdfs:// localhost:9000/'。將此設置從'localhost'更改爲'0.0.0.0'不能解決問題。 – nikk

2

EOFException類在套接字上意味着沒有更多的數據,並且對等關閉了連接。

相關問題