개요
MapReduce Job을 실행하는 Driver가 많은 경우 실행시 Package 명 + Class 명을 모두 넣어야 하는 불편함을 해결하기 위해서 간단하게 Alias 만으로 Driver를 지정할 수 있도록 하는 Hadoop 에서 제공하는 Driver입니다.
import com.yourcompany.hadoop.mapreduce.aggregate.UnionDriver; import io.datadynamics.bigdata.mapreduce.core.Constants; import org.apache.hadoop.util.ProgramDriver; /** * 모든 MapReduce를 실행하기 위한 Alias를 제공하는 Program Driver. * * @author Data Dynamics * @since 0.1 */ public class MapReduceDriver { public static void main(String argv[]) { ProgramDriver programDriver = new ProgramDriver(); try { programDriver.addClass("union", UnionDriver.class, "작은 파일들을 HDFS Block 단위로 묶는 MapReduce Job"); programDriver.driver(argv); System.exit(0); } catch (Throwable e) { e.printStackTrace(); System.exit(-1); } } }
이 Program Driver를 제대로 사용하려면 JAR 파일 패키징시 Manifest 파일의 Main Class로 지정해야 하며 Maven에서 다음과 같이 JAR 플러그인을 설정하여 기본 실행 클래스로 지정할 수 있습니다.
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>com.yourcompany.hadoop.mapreduce.MapReduceDriver</mainClass> </manifest> </archive> </configuration> </plugin>
이제 Maven으로 빌드후 다음과 같이 실행합니다.
# mvn package ... # cd target # hadoop jar mapreduce.jar ... 설명이 나옴 # hadoop jar mapreduce.jar union -input hdfs://192.1.1.1:8020/input -output hdfs://192.1.1.1./output
예제
본 예제의 코드는 https://github.com/DataDynamics/template-mapreduce/blob/master/src/main/java/com/yourcompany/hadoop/mapreduce/MapReduceDriver.java 에서 확인할 수 있습니다.
평가
- Program Driver의 개념이 이해되었는지 확인하기
- 기존에 작성했던 MapReduce Driver를 Program Driver에 등록하기
- Maven Build시 JAR 플러그인에 Program Driver 지정하기
- Program Driver를 이용하여 MapReduce Job 실행하기