728x90

이번에 하둡예제중에서 가장 기초적인 예제인 SingleFileWriteRead를 해봄으로써

어떻게 하둡 프로그램을 만들고 배포할지, 어떻게 사용할지에 대해서 알아보자.


기본적으로 하둡프로그래밍은 메이븐 빌드를 쓴다는 전재를 깔고 들어가는경우가 많다.

사실 기본적인 메이븐 빌드를 사용하는게 좋을것 같긴한데 메이븐에 대해서 가르쳐주는건 이번 취지에 맞지 않다고 생각이 된다.

따라서 이번엔 메이븐 빌드를 사용하지 않고 순수 자바로 하는 법을 위주로 알려주려고 한다.


빌드에 가장 기본적인 jar파일은 hadoop-core jar파일이다. 이를 다운받기 위해서는 메이븐 레포지터리에 가야한다.

물론 메이븐프로젝트를 사용하면 이런 수고를 덜 수 있다. 쉽게 하고싶으면 메이븐을 배워라.



hadoop-core-0.20.2.jar를 다운받는다.



다운로드된것을 확인, 아무대나 보관해둔다.



그다음 프로젝트를 일반 java프로젝트로 만든다.



프로젝트 이름을 선택한다.



외부 jar파일을 사용할것이므로 추가해주자. 프로젝트를 우클릭한후 proeprties를 눌러준다.



Add External JARs를 눌러준다. 그 다음 hadoop-core를 추가해준다.

이제 예제를 실행해보자.



package test;

import java.io.IOException;

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) {
if (args.length != 2) {
System.out.println("Usage : SingleFileWriteRead <filename> <contents>");
System.out.println();
}
Configuration conf = new Configuration();
try {
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("## inputString : " + inputString);
} catch (IOException e) {
e.printStackTrace();
}
}
}


이 예제를 jar파일로 바꿔주자.



프로젝트를 우클릭한 후 Export를 눌러주자.



jar파일을 선택한다.



JAR file은 export될 위치이다. 지정한후 파일 이름을 적고 Finish를 눌러주자.



이제 커맨드창으로 가서 SingleFileWriteRead가 있음을 확인하자.



이제 yarn을 실행해야한다. yarn이라는 것은 작업을 실행해주는 모듈이다. 우리는 SingFileWirteRead라는 jar를 실행할 것이다.


yarn jar SingleFileWriteRead.jar test.SingleFileWriteRead test.txt HelloWorld!

yarn (실행시킬 타입) (실행시킬 파일 이름) (실행시킬 클래스경로) [-옵션]



실행의 결과로 test.txt가 생성되었고 내부에는 HelloWorld가 입력되었다.


코드에대해서 설명을 조금 해보자.

Configulation클래스는 하둡의 설정값을 가져온다. 여러분이 열심히 설정해놓은 xml값들을 확인하는 것이다.

FileSystem은 하둡의 FileSystem이며 하둡의 설정값을 보고 파일시스템을 가져오며

args[0]은 새로만든 파일의 이름, args[1]은 출락할 파일의 이름이다.


이프로그램의 로직은 파일 시스템을 가져온후 출력 스트림을 열어서 args[0]이름으로 파일을 생성, 그후 args[1]을 파일 내용으로 저장한다.

그 후 다시 입력 스트림을 열어서 하둡파일 시스템이서 해당 파일을 가져온 후 그 내용을 출력한다.


이 예제는 정말 기초적인 예제지만 엄청나게 많은 내용을 내포하고 있는데

hdfs에서 파일을 쓰는것, 그리고 그걸 읽는게 굉장히 쉽게 사용할 수 있다는 것을 알 수 있다.

이로써 우리는 hdfs의 파일의 접근을 자유롭게 할 수 있는 것이다.


'Programming > Java-Hadoop' 카테고리의 다른 글

[Hadoop-03]맵리듀스 예제(WordCount)  (1) 2017.08.27

+ Recent posts