하둡 HDFS 입출력 따라해보기

Maven project에 입/출력 예제 코드 생성

우선 maven project 디렉토리로 이동해줍니다.

maven project를 만드는 방법을 모르는 분은 Maven으로 Java 프로젝트 시작하기라는 본문의 포스트를 참고해주세요.

./maven project path/src/main/java/package name/ 경로까지 들어오게되면 App.java라는 java 파일이 있는 위치까지 오게됩니다. (경로는 사람마다 다릅니다.)

필자는 프로젝트 명을 study-hadoop라고 지었고 package는 cpprhtn, 현재 경로는 /Users/bigdata/study-hadoop/src/main/java/cpprhtn 입니다.

이후에 아래와 같은 코드를 짜줍니다.

HDFS_IO.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package cpprhtn; # 각자의 패키지명에 맞추어 수정

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 HDFS_IO { # 생성한 파일명과 클래스명이 완벽하게 일치해야 함
public static void main(String[] args) {
// 입력 파라미터 확인
if (args.length != 2) {
System.err.println("Usage: HDFS_IO <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("Input Data:" + inputString);

} catch (Exception e) {
e.printStackTrace();
}
}
}

Java API를 이용하여 HDFS에 파일을 생성하는 예제입니다.

파일이 저장될 경로와 파일에 생성할 문자열을 입력받아 지정된 경로에 .txt파일을 생성하는 코드입니다.

코드를 입력하여 저장하였다면 maven project path 시작지점으로 돌아가 mvn package를 해주면 됩니다. (필자는 study-hadoop 디렉토리가 되겠습니다.)

하지만 아직 Hadoop API를 이용할 수 없는 상황이라 에러 문구가 뜰 것입니다.

이는 pom.xml에 다음과 같은 Maven 종속성이 포함되어야 합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 위치를 잘 찾아서 추가할 것
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.7.1</version>
</dependency>

<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.1</version>
</dependency>

<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
<version>1.2.1</version>
</dependency>
</dependencies>

추가한 후에 다시 mvn package를 사용하여 빌드하면 BUILD SUCCESS라는 문구가 뜰 것입니다.

이제 하둡에서 돌릴 jar 파일은 maven project path/target에 생성될 것입니다.

Hadoop에서 입/출력 클래스 실행

이제 하둡에서 실행시키기 위해 하둡 서비스를 실행시켜줍니다.

1
start-all.sh

이후 하둡 HDFS에 입/출력이 잘 동작하는지 확인해봅시다.

1
hadoop jar study-hadoop-1.0-SNAPSHOT.jar cpprhtn.HDFS_IO input.txt Hello,Hadoop_and_HDFS

위 코드를 실행시키면 study-hadoop-1.0-SNAPSHOT.jar 파일의 cpprhtn package의 HDFS_IO 클래스를 사용한다는 것이며, 입력받은 파일명과 문자열을 HDFS내에 만들어줍니다.

1
hadoop fs -ls /user/bigdata/

bigdata 대신에 여러분의 User명을 넣게되면 아래와같은 내용이 출력됩니다.

1
2
3
bigdata@cpprhtn-MacBookPro target % hadoop fs -ls /user/bigdata
Found 1 items
-rw-r--r-- 1 bigdata supergroup 14 2022-01-22 20:18 /user/bigdata/input.txt

하둡 HDFS에 제대로 생성된 것을 볼 수 있으며, 만들어진 input.txt는 다음과 같이 확인할 수 있습니다.

1
2
bigdata@cpprhtn-MacBookPro target % hadoop fs -cat /user/bigdata/input.txt
Hello,Hadoop_and_HDFS
Author

cpprhtn

Posted on

2022-01-19

Updated on

2022-01-22

Licensed under