Jobtracker API 错误 - 本地异常调用 localhost/127.0.0.1:50030 失败:java.io.EOFException
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/12813365/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Jobtracker API error - Call to localhost/127.0.0.1:50030 failed on local exception: java.io.EOFException
提问by K S Nidhin
I m trying to connect my jobtracker using Java.
The below shown is the program I am trying to execute
我正在尝试使用 Java 连接我的 jobtracker。
下面显示的是我试图执行的程序
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);
}
}
This is the exception i get. Even i though i try replacing localhost with 127.0.0.1 it doesnt work . The same error.
这是我得到的例外。即使我尝试用 127.0.0.1 替换 localhost 它也不起作用。同样的错误。
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)
I added all the jars related to hadoop . I cant understand why "/" is comming in between localhost/127.0.0.1:50030
我添加了所有与 hadoop 相关的 jars。我不明白为什么 "/" 出现在 localhost/127.0.0.1:50030 之间
回答by Chris White
Have you tried the actual jobtracker port number, rather than the http port (50030).
您是否尝试过实际的 jobtracker 端口号,而不是 http 端口 (50030)。
Try the port number listed in your $HADOOP_HOME/conf/mapred-site.xml under the mapred.job.tracker
property. Here's my pseudo mapred-site.xml conf
尝试在 $HADOOP_HOME/conf/mapred-site.xmlmapred.job.tracker
属性下列出的端口号。这是我的伪 mapred-site.xml conf
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
If you look at the JobTracker.getAddress(Configuration)
method, you can see it uses this property if you don't explicitly specify the jobtracker host / port:
如果您查看该JobTracker.getAddress(Configuration)
方法,您会发现它在未明确指定 jobtracker 主机/端口的情况下使用此属性:
public static InetSocketAddress getAddress(Configuration conf) {
String jobTrackerStr =
conf.get("mapred.job.tracker", "localhost:8012");
return NetUtils.createSocketAddr(jobTrackerStr);
}