[ hadoop ] 하둡 hdfs 파일 하나로 합치기(getmerge, text)
hadoop(하둡)을 운영하다 보면 특정한 경우 hdfs에 나누어 저장되어 있는 파일들을 합쳐서 로컬로 받고 싶은 경우가 있다.
이 때 -getmerge명령어를 쓰면되는데 -text명령어로도 동일한 기능을 수행할 수 있다.
다만 주의해야할 차이점은 -text명령의 경우는 hdfs에 파일이 gz으로 묶여 쌓여있는 경우 압축을 풀어 라인을 읽어 로컬에 쓸 수 있는 반면에
-getmerge의 경우는 그렇지 않다. 따라서 합치고자 하는 파일이 .gz형태라면 -text를 사용해서 합쳐 로컬로 받는 방법이 훨씬 더 간편하다.
[ hdfs 예시 파일 ]
!주의 .gz의 경우에는 -getmerge가 정상적으로 먹히지 않는다. (.gz일 때는 -text사용)
-rw-r--r-- 3 irteam irteam 36997 2017-09-22 16:50 /log/temp/manual/part-00000
-rw-r--r-- 3 irteam irteam 8828447 2017-09-22 16:59 /log/temp/manual/part-00001
-rw-r--r-- 3 irteam irteam 38420 2017-09-22 16:49 /log/temp/manual/part-00002
[ -getmerge 사용법 ]
hadoop fs -getmerge [hdfs경로] [로컬디렉토리]
hadoop fs -getmerge /log/temp/manual /local/directory
[ -text 사용법 ]
hadoop fs -text [hdfs경로] > [로컬디렉토리]
hadoop fs -text /log/temp/manual/part-* > /local/direcotory
명령어 실행 후 로컬디렉토리에 저장된 파일의 개수를 세어보면 두 명령어로 실행한 데이터 개수가 동일한 것을 확인할 수 있다.
텍스트파일로 hdfs에 저장된 총 1241517라인(50M)로 테스트 해봤을 떄 로컬로 쓰는데 까지 두 명령어 모두 약 5초정도 걸렸다.
따라서 편한방법으로 사용하시길:)