포함 된 테스트 프로그램에서 로컬 디스크의 파일을 HDFS로 복사하려고합니다.hadoop에서 HDFS에 연결할 때의 EOFException
package foo.foo1.foo2.test;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class TestTestTest {
public static void main(String[] args) {
String srcLocation = "foo";
String destination = "hdfs:///tmp/";
FileSystem hdfs = null;
Configuration configuration = new Configuration();
configuration.set("fs.default.name", "hdfs://namenode:54310/");
try {
hdfs = FileSystem.get(configuration);
} catch (IOException e2) {
e2.printStackTrace();
return;
}
Path srcpath = new Path(srcLocation);
Path dstpath = new Path(destination);
try {
hdfs.copyFromLocalFile(srcpath, dstpath);
} catch (IOException e) {
e.printStackTrace();
}
}
}
이 다음과 같은 예외와 함께 실패합니다 :
java.io.IOException: Call to namenode/10.1.1.1:54310 failed on local exception: java.io.EOFException
at org.apache.hadoop.ipc.Client.wrapException(Client.java:775)
at org.apache.hadoop.ipc.Client.call(Client.java:743)
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:106)
at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:207)
at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:170)
at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:82)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:1378)
at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:66)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:1390)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:196)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:95)
at foo.foo1.foo2.test.TestTestTest.main(TestTestTest.java:22)
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)
내 질문은 믿을 수 없 간단하다 : 어떤이의 원인, 어떻게 내가이 프로그램 작업을 할 수 있습니다 다음과 같이 코드는? 내가 찾은 적은 정보에서 HDFS에 연결하는 데 문제가 있다는 것을 모았습니다.이 정보는 Configuration의 fs.default.name 속성과 관련이 있습니다. 아래는 내 핵심-site.xml 파일의 관련 섹션 : 아마도 특별한 관심의
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://namenode:54310</value>
</property>
</configuration>
는 사실은 그 나는 1 메가 항아리에 내 클래스 경로에있는 모든 항아리를 번들하고를 통해이 프로그램을 실행하면 hadoop 명령은 잘 작동합니다. 그래서 내가 뭘 잘못하고 있니?
명령 줄 유틸리티를 통해 HDFS에 접근 할 수 있습니까? 그렇다면 클러스터에서 실행중인 동일한 버전의 Hadoop에 대해 코드를 컴파일하고 있습니까? –
알다시피, 나는 그들이 같은 버전이라고 맹세 할 준비가되어 있었다. 내 개발 시스템으로 이름 노드를 사용하고 있습니다. 분명히 나는 같은 버전을 개발할 것입니다! 하지만 그 전에 내 이름을 넣어, 내가 확인하기로 결정하고, 당신은 그것을 모를거야! 클러스터가 cloudera jar를 실행 중이며, 개발을 위해 제공된 jar는 동일하지 않습니다. classpath에 cloudera jar를 넣는 대신에 문제가 해결되었습니다! 그것을 "대답"에 자유롭게 두십시오. – david