2014-07-21 228 views
2
public static void main(String[] args) throws IOException{ 
    Configuration conf = new Configuration(); 
    conf.addResource(new Path("/home/myname/hadoop-1.2.1/conf/core-site.xml")); 
    conf.addResource(new Path("/home/myname/hadoop-1.2.1/conf/hdfs-site.xml")); 
    System.out.println("Attempting initialization of FileSystem"); 
    FileSystem fs = FileSystem.get(conf); 
    System.out.println("Initialization done"); 
    System.out.println(fs.getHomeDirectory()); 
    System.out.println(fs.getWorkingDirectory()); 
    fs.mkdirs(new Path("abcd")); 
    } 

主目錄和工作目錄上的syso工作正常,並指向正確的位置HDFS。但是任何形式的I/O像讀取文件,從本地複製mkdirs都不起作用。與HDFS通信:線程「main」中的異常java.io.IOException:本地異常失敗:java.io.EOFException

Exception in thread "main" java.io.IOException: Failed on local exception: java.io.EOFException; Host Details : local host is: "localhost/127.0.0.1"; destination host is: ""localhost":9000; 
    at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:738) 
    at org.apache.hadoop.ipc.Client.call(Client.java:1099) 
    at org.apache.hadoop.ipc.WritableRpcEngine$Invoker.invoke(WritableRpcEngine.java:195) 
    at com.sun.proxy.$Proxy6.mkdirs(Unknown Source) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:102) 
    at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:67) 
    at com.sun.proxy.$Proxy6.mkdirs(Unknown Source) 
    at org.apache.hadoop.hdfs.DFSClient.primitiveMkdir(DFSClient.java:1732) 
    at org.apache.hadoop.hdfs.DFSClient.mkdirs(DFSClient.java:1703) 
    at org.apache.hadoop.hdfs.DistributedFileSystem.mkdirs(DistributedFileSystem.java:479) 
    at org.apache.hadoop.fs.FileSystem.mkdirs(FileSystem.java:1807) 
    at com.company.trial.DummyClass.main(DummyClass.java:25) 
Caused by: java.io.EOFException 
    at java.io.DataInputStream.readInt(DataInputStream.java:392) 
    at org.apache.hadoop.ipc.Client$Connection.receiveResponse(Client.java:823) 
    at org.apache.hadoop.ipc.Client$Connection.run(Client.java:757) 

Namenode/Datanode/JobTracker/TaskTracker工作得很好。

我已經閱讀這裏和那裏,這可能是一個jar不匹配問題。使用 罐:
Hadoop的共同點:0.23.11 Haddop-HDFS:0.23.11 Hadoop的代碼:1.2.1

我的Hadoop版本爲1.2.1。

核心的site.xml

<property> 
     <name>fs.default.name</name> 
     <value>hdfs://localhost:9000</value> 
    </property> 

HDFS-site.xml中

<property> 
     <name>dfs.replication</name> 
     <value>1</value> 
    </property> 
    <property> 
     <name>dfs.name.dir</name> 
     <value>~/hadoop/hdfs</value> 
    </property> 

如果這是一個jar問題,請你告訴我哪個罐子(普通和HDFS)與hadoop-兼容1.2.1

回答

0

只是將下面的代碼添加到您的API時,conf套後,你已經有了:

conf.set("fs.default.name", "hdfs://localhost:9000"); 

檢查它,它應該工作。

確保以下jar文件添加到庫中:

hadoop-core-1.2.1.jar 
commons-cli-1.2.jar 
commons-logging-1.1.1.jar 
commons-lang-2.4.jar 
commons-configuration-1.6.jar 
+0

但物業「fs.default.name」已經從核心站點文件回升。我已經明確地設置了它,但它仍然沒有工作。同樣的例外。 – user3504411

+0

在哪個平臺上安裝Hadoop。 – Rengasamy

+0

將上述罐子添加到您的圖書館。現在它可以工作。 – Rengasamy

相關問題