개요
HAR(Hadoop Archive)는 HDFS에서 비효율적인 작은 파일이 많은 경우 묶는 기능입니다.
아카이브 생성하기
HAR을 생성하기 위해서 다음과 같이 커맨드를 입력합니다.
# hadoop archive -archiveName NAME -p <parent path> <src>* <dest> # hadoop archive -archiveName test.har -p / test archive → /test의 모든 파일을 /archive/test.har로 아카이브를 생성
다음은 실제 적용사례입니다.
# hadoop archive -archiveName -Dmapred.job.queue.name=queue_name sample.har -p /user/data/ /user/ → HAR 생성 19/01/14 01:57:52 INFO mapreduce.Job: Job job_1520227878653_38308 running in uber mode : false 19/01/14 01:57:52 INFO mapreduce.Job: map 0% reduce 0% 19/01/14 01:57:56 INFO mapreduce.Job: map 100% reduce 0% 19/01/14 01:58:01 INFO mapreduce.Job: map 100% reduce 100% 19/01/14 01:58:01 INFO mapreduce.Job: Job job_1520227878653_38308 completed successfully 19/01/14 01:58:01 INFO mapreduce.Job: Counters: 49 File System Counters FILE: Number of bytes read=126 # hadoop fs -ls /user/sample.har/ → HAR의 구조를 확인 Found 4 items -rw-r--r-- 2 hadoop hadoop 0 2019-01-14 01:57 /user/sample.har/_SUCCESS -rw-r--r-- 5 hadoop hadoop 117 2019-01-14 01:57 /user/sample.har/_index -rw-r--r-- 5 hadoop hadoop 23 2019-01-14 01:57 /user/sample.har/_masterindex -rw-r--r-- 2 hadoop hadoop 746 2019-01-14 01:57 /user/sample.har/part-0 # hadoop fs -ls har:///user/sample.har/ → HAR의 내용을 확인 (har://) Found 1 items -rw-r--r-- 2 hadoop hadoop 746 2018-05-23 04:15 har:///user/sample.har/test.txt
아카이브 구조
- _index : 인덱스 파일
- _masterindex : 인덱스 파일
- part-* : 데이터
아카이브 풀기
HAR 아카이브를 다시 원상태로 처리하기 위해서는 다음과 같이 distcp를 이용해서 처리합니다.
# hadoop distcp -Dmapred.job.queue.name=queue_name har:///user/sample.har/ /user/decompress/ # hadoop fs -ls /user/decompress/ Found 1 items -rw-r--r-- 2 hadoop hadoop 746 2019-01-14 04:04 /user/decompress/test.txt
API를 이용하여 HAR 제어
TBD
제한
- 한번 생성하면 내용을 변경할 수 없음
- 원본 파일을 삭제하지 않기 때문에 용량이 더 필요함
- MapReduce에서 읽을 수 있으나 별도의 Input Format이 없으므로 작은 파일을 HAR로 묶는 경우 작은 파일을 처리할때와 동일하게 처리함