개요

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로 묶는 경우 작은 파일을 처리할때와 동일하게 처리함

참고