Search

MapReduce 지원 기능

Hadoop에서는 MapReduce 프로그램을 개발할 때 사용자에게 다양한 편의기능을 지원한다.

GenericOptionsParser

Hadoop CLI를 통해 사용자가 MapReduce 작업을 실행할 때 다양한 설정을 할 수 있도록 지원하는 헬퍼 클래스이다. GenericOptionsParser가 제공하는 옵션들은 다음과 같다.
option
desc
-conf <configuration file>
configuration 파일을 전달하여 설정하는 옵션. 다수의 속성을 설정할 때 사용할 수 있다.
-D<property=value>
property와 value값을 설정에 추가한다. D 옵션은 conf 옵션을 오버라이드 한다. 옵션과 key-value 사이 공백이 없는점에 주의하자. (ex. -Dmapreduce.map.memory.mb=4g)
-fs <local | namenode:port>
지정한 URI로 파일시스템을 설정한다. Hadoop의 defaultFS 설정을 오버라이드하는 옵션이다.
-jt <local | resourcemanager:port>
지정한 hostname:port로 YARN의 ResourceMananger를 설정한다.
-files <comma seperated list of lines>
지정한 파일을 로컬파일시스템 또는 지정한 파일시스템에서 MapReduce가 사용하는 파일시스템(주로 HDFS)으로 복사하여 작업에 사용할 수 있게 한다.
-libjars <comma separated list of jars>
지정한 jar파일을 로컬파일시스템 또는 지정한 파일시스템에서 MapReduce가 사용하는 파일시스템으로 복사하여 MapReduce 작업의 class path에 추가한다.
-archives <comma separated list of jars>
지정한 jar파일, zip파일, 혹은 tar파일을 로컬파일시스템 또는 지정한 파일시스템에서 MapReduce가 사용하는 파일시스템으로 복사하여 압축을 해제한다.
직접 GenericOptionsParser를 설정하고 사용할 수 있지만, ToolRunner를 통해 자동으로 설정되도록 할 수 있다.

Counter

맵리듀스 Job의 진행 상황을 모니터링할 수 있도록 Counter라는 API를 제공한다.
모든 job은 다수의 Built-in Counter(내장 Counter)를 가지고 있는데, 대표적인 Built-in Counter는 다음과 같다.
FileInputFormatCounter, FileOutputFormatCounter
Map, Reduce, Combiner의 입출력 레코드 건수 및 바이트에 대한 정보를 제공한다.
FileSystemCounter
파일 시스템에서 얼마나 많은 바이트를 읽고 썼는가에 대한 정보를 제공한다.
MapReduceTaskCounter
Map과 Reduce의 Task의 개수 및 실패 여부에 대한 정보를 제공한다.
JobCounter
Job의 개수 및 실패 여부에 대한 정보를 제공한다.
Counter는 사용자가 정의할 수 있으며, Counter의 숫자를 직접 증감시킬 수도 있다. 이를 잘 활용한다면 작업에 대한 섬세한 모니터링을 가능케 할 수 있다.

Sort

MapReduce는 정렬과정을 기본적으로 거친다.

Join

MapReduce는 대용량 데이터셋 간 join을 지원한다. MapReduce의 join 기능은 데이터셋의 크기와 분할되어있는 방식에 따라 join을 구현하는 법이 달라진다. join은 크게 두가지 종류가 있다.
Map-side join
Mapper에서 수행되는 join 연산이다. join하려는 데이터셋의 규모가 작을 때, 분산캐시를 사용하여 구현하는 방법이 있다.
Reduce-side join
Reducer에서 수행되는 join 연산이다. MapReduce의 Shuffle 기능을 이용하여 구현한다.

Distributed Cache

실행 시점에 파일과 아카이브의 사본을 작업 노드에 복사하여 이를 이용할 수 있게 해주는 기능이다.
GenericOptionsParser의 -file, -archives 옵션을 통해 Distributed Cache 기능을 사용할 수 있다. 옵션을 통해 HDFS로 복사된 파일은 NodeManager에 의해 HDFS에서 로컬 디스크(캐시)로 복사된다.
또 다른 방법은, `org.apache.hadoop.mapreduce.Job 클래스에서 제공하는 API를 사용하는 방법이 있다.
method
desc
addCacheFile(URI uri)
지정한 파일을 캐시에 복사한다.
addCacheArchive(URI uri)
지정한 압축파일을 캐시에 복사한다.
setCacheFiles(URI[] files)
지정한 파일들을 캐시에 복사한다.
setCacheArchives(URI[] archives)
지정한 압축파일들을 캐시에 복사한다.
addFileToClasPath(Path file)
지정한 파일을 class path에 추가한다.
addArchiveToClasPath(Path archive)
지정한 압축파일을 class path에 추가한다.