Как программно создать / коснуться файла в формате hdfs? - PullRequest
0 голосов
/ 12 июня 2018

Есть ли способ создать сенсорный файл в hdfs с помощью Java?

Подобно тому, что класс FileUtils предоставляет в Apache Commons.

Если мы touch файл, которыйуже существует, он будет обновлять время последнего изменения до текущего времени.А если файл не существует, он создаст пустой файл с текущим временем в качестве времени последнего изменения.

Ответы [ 2 ]

0 голосов
/ 12 июня 2018
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();
0 голосов
/ 12 июня 2018

java hadoop FileSystem api предоставляет эти типы помощников.

Вот способ скопировать классический touch для hdfs:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.FSDataOutputStream;
import java.io.IOException;

public static void touch(String filePath) throws IOException {

  FileSystem hdfs = FileSystem.get(new Configuration());

  Path fileToTouch = new Path(filePath);

  FSDataOutputStream fos = null;

  // If the file already exists, we append an empty String just to modify
  // the timestamp:
  if (hdfs.exists(fileToTouch)) {
    fos = hdfs.append(new Path(filePath));
    fos.writeBytes("");
  }
  // Otherwise, we create an empty file:
  else {
    fos = hdfs.create(new Path(filePath));
  }

  fos.close();
}

Thisсоздает пустой файл, если файл еще не существует:

hdfs.create(new Path(filePath)).close();

и добавляет пустую строку в файл, если он уже существует, для изменения отметки времени:

hdfs.append(new Path(filePath)).writeBytes("");
...