2011-10-21 6 views
3

내가 HFTP를 통해 하둡에 연결하는 방법을 발견하고는, (읽기 전용) 잘 작동 :Java에서 hdfs 프로토콜을 통해 hadoop에 액세스하려면 어떻게해야합니까?

uri = "hftp://172.16.xxx.xxx:50070/"; 

    System.out.println("uri: " + uri);   
    Configuration conf = new Configuration(); 

    FileSystem fs = FileSystem.get(URI.create(uri), conf); 
    fs.printStatistics(); 

그러나, 나는 읽기/복사 파일뿐만 아니라 쓰고 싶은, 즉, 내가 원하는 hdfs를 통해 연결하십시오. 어떻게 실제의 원격 파일 시스템을 편집 할 수 있도록 hdfs 연결을 가능하게 할 수 있습니까?

내가 "HFTP"에서 위의 프로토콜을 변경하려고 -> "HDFS를",하지만 다음과 같은 예외가 ...

(URL 프로토콜과 하둡의 불쌍한 내 지식을 용서있어, 나는 이것이 가정 다소 이상한 질문 메신저 묻는하지만, 어떤 도움이 정말 감사하겠습니다) 스레드에서

예외는 "주요"때 java.io.IOException가 :! /172.16.112.131:50070 지역 예외에 실패에 전화 : java.io .EOFException org.apache.hadoop.ipc.Client.wrapException (Client.java:1139) org.apache.hadoop.ipc.Client.ca ll (Client.java:1107) at org.apache.hadoop.ipc.RPC $ Invoker.invoke (RPC.java:226) at $ Proxy0.getProtocolVersion (알 수없는 소스) at org.apache.hadoop.ipc. RPC.getProxy (RPC.java:398) at org.apache.hadoop.ipc.RPC.getProxy (RPC.java:384) at org.apache.hadoop.hdfs.DFSClient.createRPCNamenode (DFSClient.java:111) org.apache.hadoop.hdfs.DFSClient. (DFSClient.java:213)의 에서 org.apache.hadoop.hdfs.DistributedFileSystem. 초기화 org.apache.hadoop.fs.FileSystem.access $ 200 org.apache.hadoop.fs.FileSystem.createFileSystem (FileSystem.java:1514)에서 (DistributedFileSystem.java:89) (FileSystem.java:67) at org.apache.hadoop.fs.FileSystem $ Cache.getInternal (FileSystem.java:1548) at org.apache.hadoop.fs.FileSystem $ Cache.get (FileSystem.java:1530) at org.apache .hadoop.fs.FileSystem.get sb.HadoopRemote.main (HadoopRemote.java:24)에서 (FileSystem.java:228)

답변

1

에 관한 하둡 : 당신은 확실히 코어의 site.xml 네임 노드를 만들 필요가 항목이 hadoop 구성에서 127.0.0.1 (로컬 호스트) 대신 0.0.0.0까지 제공됩니다. 중요하게도 clouderas VM 배포판은 어떤 이유에서든 localhost를 기본값으로 사용합니다.

1

그냥 코어를 site.xml하고 conf의에 명중 할 하둡의 HDFS-site.xml의이 같은 추가

//code begins 
import java.net.URI; 
import org.apache.hadoop.conf.Configuration; 
import org.apache.hadoop.fs.FileSystem; 
import org.apache.hadoop.fs.Path; 
import org.testng.annotations.Test; 

/** 
* @author karan 
* 
*/ 
public class HadoopPushTester { 

@Test 
public void run() throws Exception { 

    Configuration conf = new Configuration(); 

    conf.addResource(new Path("src/test/resources/HadoopConfs/core-site.xml")); 
    conf.addResource(new Path("src/test/resources/HadoopConfs/hdfs-site.xml")); 



    String dirName = "hdfs://hosthdfs:port/user/testJava"; 

    //values of hosthdfs:port can be found in the core-site.xml in the fs.default.name 

    FileSystem fileSystem = FileSystem.get(conf); 


    Path path = new Path(dirName); 
    if (fileSystem.exists(path)) { 
     System.out.println("Dir " + dirName + " already exists"); 
     return; 
    } 

    // Create directories 
    fileSystem.mkdirs(path); 

    fileSystem.close(); 
} 
} 

// 코드가

종료를