Hadoop Archives 가이드
Hadoop Archives 가이드
Hadoop archive는 특별한 형식의 archive로, 파일시스템 디렉터리에 매핑돼요. Hadoop archive는 항상 *.har 확장자를 가져요. Hadoop archive 디렉터리는 메타데이터(_index와 _masterindex 형태)와 데이터(part-* 파일)를 포함해요. _index 파일은 archive의 일부인 파일들의 이름과 part 파일 내 위치를 담아요.
출처: 문서
본문
개요 (Overview)
Hadoop archive는 특별한 형식의 archive예요. Hadoop archive는 파일시스템 디렉터리에 매핑됩니다. Hadoop archive는 항상 *.har 확장자를 가져요. Hadoop archive 디렉터리는 메타데이터( _index 와 _masterindex)와 데이터(part-* 파일)를 포함해요. _index 파일에는 archive의 일부인 파일의 이름과 part 파일 내 위치가 담겨 있어요.
아카이브 만들기 (How to Create an Archive)
사용법:
hadoop archive -archiveName name -p <parent> [-r <replication factor>] <src>* <dest>
-archiveName은 만들고자 하는 archive의 이름이에요. 예를 들면foo.har과 같이요. 이름은*.har확장자를 가져야 해요.- parent 인수는 파일들이 archive될 상대 경로를 지정해요. 예:
-p /foo/bar a/b/c e/f/g. 여기서/foo/bar가 parent 경로이고a/b/c,e/f/g는 parent에 대한 상대 경로예요. - 이 작업은 archive를 생성하는 Map/Reduce 작업이라는 점을 유의하세요. 실행하려면 map reduce 클러스터가 필요해요. 자세한 예제는 이후 섹션을 참고하세요.
-r은 원하는 복제 계수(replication factor)를 나타내요. 이 선택 인수를 지정하지 않으면 복제 계수 3이 사용돼요.
단일 디렉터리 /foo/bar만 archive하려면 다음과 같이 사용할 수 있어요:
hadoop archive -archiveName zoo.har -p /foo/bar -r 3 /outputdir
암호화 존(encryption zone)에 있는 소스 파일을 지정하면 복호화되어 archive에 기록돼요. har 파일이 암호화 존에 있지 않으면 평문(복호화된) 형태로 저장되고, har 파일이 암호화 존에 있으면 암호화된 형태로 저장돼요.
Archive에서 파일 조회하기 (How to Look Up Files in Archives)
archive는 파일시스템 계층으로 노출돼요. 그래서 archive에 대한 모든 fs shell 명령이 동작하지만 URI가 달라요. 또한 archive는 불변(immutable)이라는 점을 주의하세요. 그래서 rename, delete, create는 오류를 반환해요.
Hadoop Archives의 URI는 다음과 같아요:
har://scheme-hostname:port/archivepath/fileinarchive
scheme이 제공되지 않으면 기본 파일시스템으로 간주돼요. 그 경우 URI는 다음과 같아요:
har:///archivepath/fileinarchive
Archive 풀기 (How to Unarchive an Archive)
archive의 모든 fs shell 명령이 투명하게 동작하므로, 풀기(unarchive)는 단순히 복사하는 문제예요.
순차적으로 풀려면:
hdfs dfs -cp har:///user/zoo/foo.har/dir1 hdfs:/user/zoo/newdir
병렬로 풀려면 DistCp를 사용해요:
hadoop distcp har:///user/zoo/foo.har/dir1 hdfs:/user/zoo/newdir
Archives 예제 (Archives Examples)
아카이브 만들기 (Creating an Archive)
hadoop archive -archiveName foo.har -p /user/hadoop -r 3 dir1 dir2 /user/zoo
위 예제는 /user/hadoop을 상대 archive 디렉터리로 사용해 archive를 만들고 있어요. /user/hadoop/dir1과 /user/hadoop/dir2 디렉터리는 다음 파일시스템 디렉터리인 /user/zoo/foo.har에 archive돼요. archive는 입력 파일을 삭제하지 않아요. archive를 만든 후 입력 파일을 삭제하고 싶다면(네임스페이스를 줄이기 위해) 직접 해야 해요. 이 예제에서는 -r 3이 지정됐으므로 복제 계수 3이 사용돼요.
파일 조회하기 (Looking Up Files)
hadoop archives에서 파일을 조회하는 것은 파일시스템에서 ls를 하는 것만큼 간단해요. 위 예제처럼 /user/hadoop/dir1과 /user/hadoop/dir2 디렉터리를 archive했다면, archive의 모든 파일을 보려면 다음을 실행하면 돼요:
hdfs dfs -ls -R har:///user/zoo/foo.har/
-p 인수의 의미를 이해하기 위해 위 예제를 다시 보자면, hadoop archive에 대해 ls(lsr 아님)만 실행하면:
hdfs dfs -ls har:///user/zoo/foo.har
출력은 다음과 같아요:
har:///user/zoo/foo.har/dir1
har:///user/zoo/foo.har/dir2
앞서 기억하듯이 archive는 다음 명령으로 만들어졌어요:
hadoop archive -archiveName foo.har -p /user/hadoop dir1 dir2 /user/zoo
이 명령을 다음과 같이 바꾸면:
hadoop archive -archiveName foo.har -p /user/ hadoop/dir1 hadoop/dir2 /user/zoo
hdfs dfs -ls har:///user/zoo/foo.har로 hadoop archive를 ls하면 다음을 얻게 돼요:
har:///user/zoo/foo.har/hadoop/dir1
har:///user/zoo/foo.har/hadoop/dir2
archive된 파일이 /user/hadoop이 아니라 /user/에 대해 상대적으로 archive됐다는 점에 주의하세요.
Hadoop Archives와 MapReduce
MapReduce에서 Hadoop Archives를 사용하는 것은 기본 파일시스템과 다른 입력 파일시스템을 지정하는 것만큼 쉬워요. HDFS의 /user/zoo/foo.har에 hadoop archive가 있다면, 이 archive를 MapReduce 입력으로 사용하려면 입력 디렉터리를 har:///user/zoo/foo.har로 지정하기만 하면 돼요. Hadoop Archives는 파일시스템으로 노출되므로 MapReduce는 Hadoop Archives의 모든 논리적 입력 파일을 입력으로 사용할 수 있어요.
더 알아보기 (Learn more)
- 원문: 문서