복붙노트

[HADOOP] 자바로 hdfs에 파일 쓰기

HADOOP

자바로 hdfs에 파일 쓰기

HDFS에 파일을 만들고 그 안에 데이터를 쓰려고합니다. 나는이 코드를 사용했다 :

Configuration config = new Configuration();     
FileSystem fs = FileSystem.get(config); 
Path filenamePath = new Path("input.txt");  
try {
    if (fs.exists(filenamePath)) {
        fs.delete(filenamePath, true);
    }

    FSDataOutputStream fin = fs.create(filenamePath);
    fin.writeUTF("hello");
    fin.close();
}

파일을 생성하지만 파일에 아무 것도 쓰지 않습니다. 나는 많이 찾았지만 아무것도 찾지 못했습니다. 내 문제는 무엇인가? HDFS로 쓸 수있는 허가가 필요합니까?

감사.

해결법

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

    1.@ Tariq의 asnwer 대신에 파일 시스템을 가져올 때 URI를 전달할 수있다.

    @ Tariq의 asnwer 대신에 파일 시스템을 가져올 때 URI를 전달할 수있다.

    Configuration configuration = new Configuration();
    FileSystem hdfs = FileSystem.get( new URI( "hdfs://localhost:54310" ), configuration );
    Path file = new Path("hdfs://localhost:54310/s2013/batch/table.html");
    if ( hdfs.exists( file )) { hdfs.delete( file, true ); } 
    OutputStream os = hdfs.create( file,
        new Progressable() {
            public void progress() {
                out.println("...bytes written: [ "+bytesWritten+" ]");
            } });
    BufferedWriter br = new BufferedWriter( new OutputStreamWriter( os, "UTF-8" ) );
    br.write("Hello World");
    br.close();
    hdfs.close();
    
  2. ==============================

    2.Hadoop 구성 폴더에 HADOOP_CONF_DIR 환경 변수를 정의하거나 코드에 다음 두 줄을 추가하십시오.

    Hadoop 구성 폴더에 HADOOP_CONF_DIR 환경 변수를 정의하거나 코드에 다음 두 줄을 추가하십시오.

    config.addResource(new Path("/HADOOP_HOME/conf/core-site.xml"));
    config.addResource(new Path("/HADOOP_HOME/conf/hdfs-site.xml"));
    

    이 항목을 추가하지 않으면 클라이언트가 로컬 FS에 쓰기를 시도하므로 권한 거부 예외가 발생합니다.

  3. ==============================

    3.아래의 방법을 사용해보십시오.

    아래의 방법을 사용해보십시오.

    FileSystem fs = path.getFileSystem(conf);
    SequenceFile.Writer inputWriter = new SequenceFile.Writer(fs, conf, path, LongWritable.class, MyWritable.class);
    inputWriter.append(new LongWritable(uniqueId++), new MyWritable(data));
    inputWriter.close();
    
  4. from https://stackoverflow.com/questions/16000840/write-a-file-in-hdfs-with-java by cc-by-sa and MIT license