sq331335144 发表于 2013-10-25 10:42:57

JAVA调用API读取数据出错

我写了一段很简单的代码,如下:
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
public class FileSystemCat {
    public static void main(String[] args) throws IOException {
      String uri = "hdfs://10.45.11.247:9000/user/root/test3.xml";
      Configuration conf = new Configuration();
      FileSystem fs = FileSystem.get(URI.create(uri),conf);
      FSDataInputStream in = null;
      try {
            in = fs.open(new Path(uri));
            IOUtils.copyBytes(in, System.out, 4096,false);
            in.seek(10);
            IOUtils.copyBytes(in, System.out, 4096,false);
      } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
      } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
      }finally
      {
            IOUtils.closeStream(in);
      }
    }
}
HDFS中目录,文件都存在,运行程序以后出错
Exception in thread "main" java.io.IOException: Call to /10.45.11.247:9000 failed on local exception: java.io.EOFException
      at org.apache.hadoop.ipc.Client.wrapException(Client.java:774)
      at org.apache.hadoop.ipc.Client.call(Client.java:742)
      at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:220)
      at $Proxy0.getProtocolVersion(Unknown Source)
      at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:359)
      at org.apache.hadoop.hdfs.DFSClient.createRPCNamenode(DFSClient.java:105)
      at org.apache.hadoop.hdfs.DFSClient.(DFSClient.java:177)
      at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:82)
      at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:1373)
      at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:66)
      at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:1385)
      at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:191)
      at hadoopstudy.FileSystemCat.main(FileSystemCat.java:26)
Caused by: java.io.EOFException
      at java.io.DataInputStream.readInt(DataInputStream.java:375)
      at org.apache.hadoop.ipc.Client$Connection.receiveResponse(Client.java:501)
      at org.apache.hadoop.ipc.Client$Connection.run(Client.java:446)
Java Result: 1
不知道是为什么,有高手能解答吗吗?

xukunddp 发表于 2013-10-25 10:42:57

这里有两个线程:
1、HDFS的IPC.Connection线程。它在接收RPC调用的响应(即返回值)
2、测试代码的线程,它向HDFS发起了一个RPC调用call,在call之前需要和ipc建立socket连接
原因是在Client.Connection.setupIOstreams过程中遇到错误,具体的原因暂看不出来。setupIOstreams函数记录的日志不够详细,不知道具体是哪行出错了。

lijian123841314 发表于 2013-10-25 10:42:57

那就没法整了吗?。。。。。。。。。

lxs_huntingjob 发表于 2013-10-25 10:42:57

似乎是版本不对,我看呢hadoop-hadoop-namenode-hpc1.log
里面报错信息为:
WARN org.apache.hadoop.ipc.Server: Incorrect header or version mismatch from 10.45.12.172:1577 got version 3 expected version 2
这是需要我用最新的hadoop吗?

datong838 发表于 2013-10-25 10:42:57

那就没法整了吗?。。。。。。。。。
njchenyi 发表于 2010-1-21 15:14

http://www.hadoopor.com/images/common/back.gif

。。。

llike90 发表于 2013-10-25 10:42:57

你好,这个解决了吗吗?我也碰到了!

arsenduan 发表于 2013-10-25 10:42:57

客户端使用的Jar包保持和服务器使用的Hadoop版本一致。
页: [1]
查看完整版本: JAVA调用API读取数据出错