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초정도 걸렸다.
따라서 편한방법으로 사용하시길:)
'Bigdata > Hadoop' 카테고리의 다른 글
[ Hadoop ] 하둡 네임노드와 데이터노드 정리 (0) | 2018.12.13 |
---|---|
[ Hadoop ] 하둡 HDFS에서 블록이란? (0) | 2018.12.04 |
[ Hadoop ] 하둡 HDFS 설계 특성에 대해서 알아보자. (0) | 2018.12.04 |
[ Hadoop ] 하둡명령어(test) 특정 디렉토리, 파일 존재여부 확인 (0) | 2018.03.20 |
[ Hadoop ] 하둡1.0과 2.0 비교 및 차이 (0) | 2017.09.27 |