본문 바로가기
BigData/Hadoop

HDFS 내에 여러 파일을 하나의 파일로 합쳐보기

by Tomining 2015. 5. 21.
Hadoop ecosystem을 사용하다 보면 output 디렉토리에 여러 파일이 생기는 경우가 있다.
보통 output 파일은 하나로 나와야 하나, 병렬처리를 하다보면 병목현상을 줄이기 위해 output 파일을 여러개로 만들기도 하는데.
최종 처리를 하기 위해 하나의 파일로 합치는 게 필요할 수도 있다.

HDFS에서 파일을 합치는 것은 어떻게 할 수 있을까?

HDFS FileSystemShell 가이드에 보면 getmerge라는 command가 존재한다.

getmerge

Usage: hadoop fs -getmerge <src> <localdst> [addnl]

Takes a source directory and a destination file as input and concatenates files in src into the destination local file. Optionally addnl can be set to enable adding a newline character at the end of each file.


위처럼 소개하고 있다.
HDFS 내의 파일을 merge해서 local 에 파일을 생성하는 command 이다.

위처럼 파일이 4개가 존재할 경우 part-00000 과 part-00001 두 파일만 합쳐보자.

hadoop dfs -getmerge /README2/part* /home1/irteam/README2.txt


로컬에 약 3.6KB 파일이 생성되었음을 확인할 수 있다.
즉, part-00000과 part-00001 두 파일이 잘 merge 되었음을 확인할 수 있다.(파일내용도 확인해보면 잘 합쳐져있다.)

그런데 여기서 궁금증이 든다.
HDFS 내에 파일을 합치고자 할 때는 local 이 아닌 HDFS 에 파일을 생성하고 싶다.

하지만 hadoop dfs -help 를 실행해보면 hdsf -> merge -> hdfs 를 할 수 있는 command가 없다.
만약 이렇게 하고 싶다면, local 에 파일을 hdfs 다시 copy해야 한다.

예를 들면, hadoop dfs -copyFromLocal /home1/irteam/README2.txt /README2/README2.txt 이렇게 수행해 볼 수 있을 것이다.