分享

hadoop 2.2.0 通过java api 操作hdfs 报错,求大神指导

zayliu1 发表于 2014-9-4 16:39:08 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 12 101765
hadoop 2.2.0 通过java api 操作hdfs 报错,求大神指导

安装好hadoop 2.2.0后,通过java api 操作hdfs 报错了,详细信息如下:

2014-09-04 16:04:28,967 WARN  [main] util.NativeCodeLoader (NativeCodeLoader.java:<clinit>(62)) - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
java.io.IOException: Failed on local exception: com.google.protobuf.InvalidProtocolBufferException: Protocol message end-group tag did not match expected tag.; Host Details : local host is: "USER-20140422SO/192.168.6.33"; destination host is: "h201":9001;
at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:764)
at org.apache.hadoop.ipc.Client.call(Client.java:1351)
at org.apache.hadoop.ipc.Client.call(Client.java:1300)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:206)
at $Proxy9.create(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:186)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:102)
at $Proxy9.create(Unknown Source)
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.create(ClientNamenodeProtocolTranslatorPB.java:227)
at org.apache.hadoop.hdfs.DFSOutputStream.newStreamForCreate(DFSOutputStream.java:1389)
at org.apache.hadoop.hdfs.DFSClient.create(DFSClient.java:1382)
at org.apache.hadoop.hdfs.DFSClient.create(DFSClient.java:1307)
at org.apache.hadoop.hdfs.DistributedFileSystem$6.doCall(DistributedFileSystem.java:384)
at org.apache.hadoop.hdfs.DistributedFileSystem$6.doCall(DistributedFileSystem.java:380)
at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)
at org.apache.hadoop.hdfs.DistributedFileSystem.create(DistributedFileSystem.java:380)
at org.apache.hadoop.hdfs.DistributedFileSystem.create(DistributedFileSystem.java:324)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:905)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:886)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:783)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:772)
at TestHadoop.getFileList(TestHadoop.java:94)
at TestHadoop.main(TestHadoop.java:132)
Caused by: com.google.protobuf.InvalidProtocolBufferException: Protocol message end-group tag did not match expected tag.
at com.google.protobuf.InvalidProtocolBufferException.invalidEndTag(InvalidProtocolBufferException.java:94)
at com.google.protobuf.CodedInputStream.checkLastTagWas(CodedInputStream.java:124)
at com.google.protobuf.AbstractParser.parsePartialFrom(AbstractParser.java:202)
at com.google.protobuf.AbstractParser.parsePartialDelimitedFrom(AbstractParser.java:241)
at com.google.protobuf.AbstractParser.parseDelimitedFrom(AbstractParser.java:253)
at com.google.protobuf.AbstractParser.parseDelimitedFrom(AbstractParser.java:259)
at com.google.protobuf.AbstractParser.parseDelimitedFrom(AbstractParser.java:49)
at org.apache.hadoop.ipc.protobuf.RpcHeaderProtos$RpcResponseHeaderProto.parseDelimitedFrom(RpcHeaderProtos.java:2364)
at org.apache.hadoop.ipc.Client$Connection.receiveRpcResponse(Client.java:996)
at org.apache.hadoop.ipc.Client$Connection.run(Client.java:891)




java类

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
public class TestHadoop {

  public static void main(String[] args) {
  {
  String uri = "hdfs://h201:9001"; //h201 为namenode 的host地址
  Configuration conf = new Configuration();
  File workaround = new File(".");
  System.getProperties().put("hadoop.home.dir",
    workaround.getAbsolutePath());
  new File("./bin").mkdirs();
  try {
   new File("./bin/winutils.exe").createNewFile();
  } catch (IOException e) {
   e.printStackTrace();
  }
  FileSystem fs = null;
  Path path = new Path("/user/root/");
  try {
   fs = FileSystem.get(URI.create(uri), conf);
   FileStatus[] FileStatus=fs.listStatus(path);// fs.listStatus 就报错了,fs的相关操作都一样
  } catch (Exception e) {
   e.printStackTrace();
  }
  
}

}


项目导入的jar包:
hadoop-2.2.0/share/hadoop/common/*.jar
hadoop-2.2.0/share/hadoop/common/lib/*.jar
hadoop-2.2.0/share/hadoop/hdfs/*.jar
hadoop-2.2.0/share/hadoop/mapreduce/*.jar
hadoop-2.2.0/share/hadoop/yarn/*.jar




已有(13)人评论

跳转到指定楼层
pig2 发表于 2014-9-4 17:08:34

回帖奖励 +1 云币

String uri = "hdfs://h201:9001"; //h201 为namenode 的host地址
换成这个:

String uri = "hdfs://h201:9000"; //h201 为namenode 的host地址


回复

使用道具 举报

zayliu1 发表于 2014-9-4 17:16:44
pig2 发表于 2014-9-4 17:08
String uri = "hdfs://h201:9001"; //h201 为namenode 的host地址
换成这个:

我配置的端口是 9001。9000连不,上会报 Connection refused
回复

使用道具 举报

pig2 发表于 2014-9-4 17:22:30
zayliu1 发表于 2014-9-4 17:16
我配置的端口是 9001。9000连不,上会报 Connection refused

这样会造成端口混乱,在没有熟悉前,先按常规思路来

你的是cdh,还是原生hadoop
回复

使用道具 举报

zayliu1 发表于 2014-9-4 17:25:59
pig2 发表于 2014-9-4 17:22
这样会造成端口混乱,在没有熟悉前,先按常规思路来

你的是cdh,还是原生hadoop

社区版,apache官网下的 。原来装了个hadoop 1.1.2 用了9000端口,这个2.2.0 用了9001端口
回复

使用道具 举报

hyj 发表于 2014-9-4 17:27:54
看下自己的host是不是有问题

按照下面来配置,把127.0.1.1给注释掉。
然后根据自己的实际情况来修改


回复

使用道具 举报

zayliu1 发表于 2014-9-4 17:28:56
回复

使用道具 举报

zayliu1 发表于 2014-9-4 17:29:59
回复

使用道具 举报

mtou 发表于 2014-9-11 16:31:13
我也遇到相同问题,你是怎么解决的,谢谢
回复

使用道具 举报

zayliu1 发表于 2014-9-12 09:45:30
mtou 发表于 2014-9-11 16:31
我也遇到相同问题,你是怎么解决的,谢谢

查看hdfs 的连接端口是否正确,我的是端口写错了
回复

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条