2012-10-10 34 views
4

我嘗試使用Java連接我的jobtracker。
下面顯示的是程序,我試圖執行Jobtracker API錯誤 - 調用本地主機/ 127.0.0.1:50030本地異常失敗:java.io.EOFException

    public static void main(String args[]) throws IOException { 

      Configuration conf = new Configuration(); 
      conf.addResource(new Path(
        "/home/user/hadoop-1.0.3/conf/core-site.xml")); 
      conf.addResource(new Path(
        "/home/user/hadoop-1.0.3/conf/hdfs-site.xml")); 
      conf.addResource(new Path(
        "/home/user/hadoop-1.0.3/conf/mapred-site.xml")); 


      InetSocketAddress jobtracker = new InetSocketAddress("localhost", 50030); 
      JobClient jobClient = new JobClient(jobtracker, conf); 
      jobClient.setConf(conf); 
      JobStatus[] jobs = jobClient.jobsToComplete(); 

      for (int i = 0; i < jobs.length; i++) { 
       JobStatus js = jobs[i]; 
       if (js.getRunState() == JobStatus.RUNNING) { 
        JobID jobId = js.getJobID(); 
        System.out.println(jobId); 
       } 
      } 

這是例外,我得到。 即使我雖然我嘗試用127.0.0.1替換本地主機它不工作 。同樣的錯誤。

Exception in thread "main" java.io.IOException: Call to localhost/127.0.0.1:50030 failed on local exception: java.io.EOFException 
     at org.apache.hadoop.ipc.Client.wrapException(Client.java:1107) 
     at org.apache.hadoop.ipc.Client.call(Client.java:1075) 
     at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:225) 
     at org.apache.hadoop.mapred.$Proxy1.getProtocolVersion(Unknown Source) 
     at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:396) 
     at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:379) 
     at org.apache.hadoop.mapred.JobClient.createRPCProxy(JobClient.java:480) 
     at org.apache.hadoop.mapred.JobClient.<init>(JobClient.java:534) 
     at com.tcs.nextgen.searchablemetadata.executor.factory.JobChecker.main(JobChecker.java:34) 
    Caused by: java.io.EOFException 
     at java.io.DataInputStream.readInt(DataInputStream.java:375) 
     at org.apache.hadoop.ipc.Client$Connection.receiveResponse(Client.java:811) 
     at org.apache.hadoop.ipc.Client$Connection.run(Client.java:749) 

我添加了所有相關的Hadoop的罐子。 我不明白爲什麼「/」在本地主機/ 127.0.0.1之間:50030

+0

'localhost/127.0.0.1:50030'只是一個字符串表示,並不意味着他試圖連接到該地址。你在本地主機上運行Hadoop 1.x嗎? –

+0

確保羣集和客戶端Hadoop版本 –

回答

5

您是否嘗試過實際的jobtracker端口號,而不是http端口(50030)。

嘗試在您的$ HADOOP_HOME/conf/mapred-site.xml中mapred.job.tracker屬性下列出的端口號。這是我的僞mapred-site.xml中的conf

<property> 
    <name>mapred.job.tracker</name> 
    <value>localhost:9001</value> 
</property> 

如果你看一下JobTracker.getAddress(Configuration)方法,你可以看到它使用這個屬性,如果你沒有明確指定的JobTracker的主機/端口:

public static InetSocketAddress getAddress(Configuration conf) { 
    String jobTrackerStr = 
    conf.get("mapred.job.tracker", "localhost:8012"); 
    return NetUtils.createSocketAddr(jobTrackerStr); 
} 
+0

之間不存在版本不匹配,用9001替代50030。它應該是實際的作業跟蹤器端口,而不是網址鏈接端口。 –

相關問題