복붙노트

[HADOOP] Java에서 hdfs 프로토콜을 통해 hadoop에 액세스하려면 어떻게해야합니까?

HADOOP

Java에서 hdfs 프로토콜을 통해 hadoop에 액세스하려면 어떻게해야합니까?

hftp를 통해 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 프로토콜과 hadoop에 대한 나의 가난한 지식을 용서하십시오.이 질문은 다소 이상한 질문이라고 생각하지만 어떤 도움이라도 정말로 감사하겠습니다!)

해결법

  1. ==============================

    1.conf로 치려고하는 hadoop의 core-site.xml 및 hdfs-site.xml을 다음과 같이 추가하십시오.

    conf로 치려고하는 hadoop의 core-site.xml 및 hdfs-site.xml을 다음과 같이 추가하십시오.

    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();
        }
    }
    
  2. ==============================

    2.hadoop 관련 : hadoop 구성에서 core-site.xml 이름 노드 항목이 127.0.0.1 (localhost) 대신 0.0.0.0으로 제공되는지 확인해야합니다. 중요하게도 어떤 이유로 clouderas vm distro의 기본값은 localhost입니다.

    hadoop 관련 : hadoop 구성에서 core-site.xml 이름 노드 항목이 127.0.0.1 (localhost) 대신 0.0.0.0으로 제공되는지 확인해야합니다. 중요하게도 어떤 이유로 clouderas vm distro의 기본값은 localhost입니다.

  3. from https://stackoverflow.com/questions/7844458/how-can-i-access-hadoop-via-the-hdfs-protocol-from-java by cc-by-sa and MIT license