지구정복
[HDFS] HDFS파일 업로드 및 다운로드 기능하는 jar파일 만들고 실행하기 본문
먼저 리눅스에서 이클립스를 다운받는다.
https://www.eclipse.org/downloads/
압축을 풀고 이클립스를 실행한다.
새로운 프로젝트열고 메이븐 프로젝트를 누른다.
아래처럼 검색하고 quikstart가 써져있는 것을 누른다.
위에는 그룹명, 아래는 프로젝트명이다.
아래처럼 만들어지는데 시간이 좀 걸린다.
다 되면 프로젝트 이름 우클릭 - properties - java bulid path - libraries - add external jars 를 누른다.
그리고 설치되어있는 하둡디렉토리로부터 필요한 jar파일을 가져온다.
$HADOOP_HOME/share/hadoop/common
$HADOOP_HOME/share/hadoop/mapreduce
apply and close 클릭
다 빌드가 되면 src/main/java의 com.exam.chap03에서 APP.java를 지워주고 SingleFileWriteRead라는 클래스명으로 클래스를 만든다. 그리고 아래와 같이 코드를 작성한다.
package com.exam.chap03;
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 SingleFileWriteRead {
public static void main(String[] args) {
// TODO Auto-generated method stub
//입력 파라미터 확인
if( args.length != 2 ) {
System.out.println("Usage: SingleFileWriteRead <filename> <contents> ");
System.exit(2);
}
try {
//파일 시스템 제어 객체 생성
Configuration conf = new Configuration();
FileSystem hdfs = FileSystem.get(conf);
//경로 체크
Path path = new Path( args[0] );
if( hdfs.exists(path) ) {
hdfs.delete(path, true);
}
//파일 저장
FSDataOutputStream outStream = hdfs.create(path);
outStream.writeUTF( args[1] );
outStream.close();
//파일 출력
FSDataInputStream inputStream = hdfs.open(path);
String inputString = inputStream.readUTF();
inputStream.close();
System.out.println( "## inputStream: " + inputString );
} catch( Exception e ) {
e.printStackTrace();
}
}
}
org.apache.hadoop.fs 패키지로 로컬이나 HDFS 파일을 제어할 수 있다.
우선 hdfs를 제어하기 위해서는 Configuration 객체를 생성하고 Filesystem의 get메서드로 configuration 객체를 전달해 FileSystem을 획득해야 한다.
이때 Configuration은 하둡 환경설정 파일에 접근하기 위한 클래스이다.
Filesystem은 하둡에서 제공하는 파일 시스템을 추상화한 클래스이고 이를 이용해 로컬 파일시스템이나 HDFS를 제어할 수 있다.
그리고 파일의 입출력은 FSDataOutputStream과 FSDataInputStream을 이용한다.
이제 위에서 작성한 코드가 담겨있는 프로젝트를 jar파일로 export시켜준다.
프로젝트 우클릭 - export
그러면 아래처럼 해당 디렉토리에 jar파일이 생긴다.
이를 하둡으로 실행시켜보자.
먼저 하둡이 모두 켜져있어야 한다.
그리고 아래 명령어로 실행시킨다.
[hadoop01@hadoop01 ~]$ hadoop jar /home/hadoop01/eclipse/hadoopEx01.jar com.exam.chap03.SingleFileWriteRead input.txt "Hello, Hadoop. Hello, World"
## inputStream: Hello, Hadoop. Hello, World
그리고 아래 명령어로 내용을 확인해보자.
[hadoop01@hadoop01 ~]$ hadoop fs -ls input*
-rw-r--r-- 3 hadoop01 supergroup 29 2021-05-24 14:47 input.txt
[hadoop01@hadoop01 ~]$ hadoop fs -cat input.txt
Hello, Hadoop. Hello, World
성공~~
'데이터 엔지니어링 정복 > HDFS' 카테고리의 다른 글
[HDFS] Erasure Coding (0) | 2023.05.12 |
---|---|
[HDFS&MR] (역대급삽질) Execute Hadoop Streaming using Python | 파이썬으로 하둡 스트리밍 실행하기 (1) | 2021.06.02 |
[HDFS] Hadoop 개념 및 구성요소 (0) | 2021.05.07 |