메뉴 건너뛰기

Cloudera, BigData, Semantic IoT, Hadoop, NoSQL

Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.


Hadoop 2.7.x에서 사용할 수 있는 파일/디렉토리 관련 utils

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class HDFSUtils {
	/**
	   * create a existing file from local filesystem to hdfs
	   * @param source
	   * @param dest
	   * @param conf
	   * @throws IOException
	   */
	  public void addFile(String source, String dest, Configuration conf) throws IOException {

	    FileSystem fileSystem = FileSystem.get(conf);

	    // Get the filename out of the file path
	    String filename = source.substring(source.lastIndexOf('/') + 1,source.length());

	    // Create the destination path including the filename.
	    if (dest.charAt(dest.length() - 1) != '/') {
	      dest = dest + "/" + filename;
	    } else {
	      dest = dest + filename;
	    }

	    // System.out.println("Adding file to " + destination);

	    // Check if the file already exists
	    Path path = new Path(dest);
	    if (fileSystem.exists(path)) {
	      System.out.println("File " + dest + " already exists");
	      return;
	    }

	    // Create a new file and write data to it.
	    FSDataOutputStream out = fileSystem.create(path);
	    InputStream in = new BufferedInputStream(new FileInputStream(new File(
	        source)));

	    byte[] b = new byte[1024];
	    int numBytes = 0;
	    while ((numBytes = in.read(b)) > 0) {
	      out.write(b, 0, numBytes);
	    }

	    // Close all the file descriptors
	    in.close();
	    out.close();
	    fileSystem.close();
	  }

	  /**
	   * read a file from hdfs
	   * @param file
	   * @param conf
	   * @throws IOException
	   */
	  public void readFile(String file, Configuration conf) throws IOException {
	    FileSystem fileSystem = FileSystem.get(conf);

	    Path path = new Path(file);
	    if (!fileSystem.exists(path)) {
	      System.out.println("File " + file + " does not exists");
	      return;
	    }

	    FSDataInputStream in = fileSystem.open(path);

	    String filename = file.substring(file.lastIndexOf('/') + 1,
	        file.length());

	    OutputStream out = new BufferedOutputStream(new FileOutputStream(
	        new File(filename)));

	    byte[] b = new byte[1024];
	    int numBytes = 0;
	    while ((numBytes = in.read(b)) > 0) {
	      out.write(b, 0, numBytes);
	    }

	    in.close();
	    out.close();
	    fileSystem.close();
	  }

	  /**
	   * delete a directory in hdfs
	   * @param file
	   * @throws IOException
	   */
	  public void deleteFile(String file, Configuration conf) throws IOException {
	    FileSystem fileSystem = FileSystem.get(conf);

	    Path path = new Path(file);
	    if (!fileSystem.exists(path)) {
	      System.out.println("File " + file + " does not exists");
	      return;
	    }

	    fileSystem.delete(new Path(file), true);

	    fileSystem.close();
	  }

	  /**
	   * create directory in hdfs
	   * @param dir
	   * @throws IOException
	   */
	  public void mkdir(String dir, Configuration conf) throws IOException {
	    FileSystem fileSystem = FileSystem.get(conf);

	    Path path = new Path(dir);
	    if (fileSystem.exists(path)) {
	      System.out.println("Dir " + dir + " already exists");
	      return;
	    } else {
		    fileSystem.mkdirs(path);
		    fileSystem.close();
	    }
	  }
	  
	  /**
	   * delete directory in hdfs
	   * @param dir
	   * @throws IOException
	   */
	  public void rmdir(String dir, Configuration conf) throws IOException {
	    FileSystem fileSystem = FileSystem.get(conf);

	    Path path = new Path(dir);
	    if (fileSystem.exists(path)) {
		    fileSystem.delete(path, true);
		    fileSystem.close();
	    } else {
		    System.out.println("Dir " + dir + " not exists");
	    }
	  }


	  /*
	  public static void main(String[] args) throws IOException {

	    if (args.length < 1) {
	      System.out.println("Usage: hdfsclient add/read/delete/mkdir"
	          + " [<local_path> <hdfs_path>]");
	      System.exit(1);
	    }

	    FileSystemOperations client = new FileSystemOperations();
	    String hdfsPath = "hdfs://" + args[0] + ":" + args[1];

	    Configuration conf = new Configuration();
	    // Providing conf files
	    // conf.addResource(new Path(HDFSAPIDemo.class.getResource("/conf/core-site.xml").getFile()));
	    // conf.addResource(new Path(HDFSAPIDemo.class.getResource("/conf/hdfs-site.xml").getFile()));
	    // (or) using relative paths
	    //    conf.addResource(new Path(
	    //        "/u/hadoop-1.0.2/conf/core-site.xml"));
	    //    conf.addResource(new Path(
	    //        "/u/hadoop-1.0.2/conf/hdfs-site.xml"));

	    //(or)
	    // alternatively provide namenode host and port info
	    conf.set("fs.default.name", hdfsPath);

	    if (args[0].equals("add")) {
	      if (args.length < 3) {
	        System.out.println("Usage: hdfsclient add <local_path> "
	            + "<hdfs_path>");
	        System.exit(1);
	      }

	      client.addFile(args[1], args[2], conf);

	    } else if (args[0].equals("read")) {
	      if (args.length < 2) {
	        System.out.println("Usage: hdfsclient read <hdfs_path>");
	        System.exit(1);
	      }

	      client.readFile(args[1], conf);

	    } else if (args[0].equals("delete")) {
	      if (args.length < 2) {
	        System.out.println("Usage: hdfsclient delete <hdfs_path>");
	        System.exit(1);
	      }

	      client.deleteFile(args[1], conf);

	    } else if (args[0].equals("mkdir")) {
	      if (args.length < 2) {
	        System.out.println("Usage: hdfsclient mkdir <hdfs_path>");
	        System.exit(1);
	      }

	      client.mkdir(args[1], conf);

	    } else {
	      System.out.println("Usage: hdfsclient add/read/delete/mkdir"
	          + " [<local_path> <hdfs_path>]");
	      System.exit(1);
	    }

	    System.out.println("Done!");
	  }
	  */
}


번호 제목 날짜 조회 수
470 fuseki에 update하는 방법(java api이용)및 주의 사항 2015.12.30 3717
469 kafka로 부터 메세지를 stream으로 받아 처리하는 spark샘플소스(spark의 producer와 consumer를 sbt로 컴파일 하고 서버에서 spark-submit하는 방법) 2016.07.13 3719
468 cloudera의 hue에서 사용자가 사용한 쿼리 목록 2020.02.07 3721
467 거침없이 배우는 Drools 책의 샘플소스 file 2016.07.22 3728
466 cassandra cluster 문제가 있는 node제거 하기(DN상태의 노드가 있으면 cassandra cluster 전체에 문제가 발생하므로 반드시 제거할것) 2017.06.21 3728
465 python3.5에서 numpy버젼에 따른 문제점을 조치하는 방법및 pymysql import할때 오류 발생시 조치사항 2017.09.28 3731
464 root계정으로 MariaDB설치후 mysql -u root -p로 db에 접근하여 바로 해줘야 하는일..(케릭터셑은 utf8) 2015.10.02 3732
463 특정 커밋 시점(commit id를 기준으로)으로 돌리기(reset) 2016.11.21 3732
462 Hadoop의 Datanode를 Decommission하고 나서 HBase의 regionservers파일에 해당 노드명을 지웠는데 여전히 "Dead regionser"로 표시되는 경우 처리 2018.01.25 3737
461 fuseki webUI를 통해서 전체 카운트를 하면 급격하게 메모리를 소모해 버리는 문제가 있음 file 2017.04.28 3745
460 mysql sqoop작업을 위해서 mysql-connector-java.jar을 추가하는 경우 확실하게 인식시키는 방법 2020.05.11 3748
459 문자열을 숫자(integer)로 casting하기 2016.01.13 3752
458 Caused by: java.lang.ClassNotFoundException: org.apache.spark.Logging 발생시 조치사항 2017.04.19 3754
457 tablet별 disk사용량 확인하는 방법 2021.08.27 3756
456 oracle 12에 sqoop해서 데이터 import하기 (console에서 sqoop import하는 방법) 2021.12.31 3759
455 Ubuntu에서 sbt및 scala설치하기 2017.06.20 3763
454 fuseki에서 제공하는 script중 s-post를 사용하는 예문 2017.09.15 3773
453 Query 1234:1234 expired due to client inactivity(timeout is 5m)및 invalid query handle 2022.06.10 3777
452 Hbase API를 이용하여 scan시 페이징을 고려하여 목록을 가져올때 사용할 수 있는 로직의 예시를 보여줌 2017.04.26 3784
451 new Gson().toJson(new ObjectId())을 사용하면 값이 다르게 나오는 경우가 있음 2016.12.23 3787
위로