반응형


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초정도 걸렸다.

따라서 편한방법으로 사용하시길:)


반응형

+ Recent posts