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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 10:20:06  来源:igfitidea点击:

Jobtracker API error - Call to localhost/127.0.0.1:50030 failed on local exception: java.io.EOFException

javahadoopmapreducehdfs

提问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.trackerproperty. 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);
}