GenericOptionsParser 활용(ToolRunner)

Command Line에서 Hadoop job을 실행할 때, 아래와 같은 경고 메세지를 자주 본다면 GenericOptionsParser를 활용해 보는 것을 고려해보는 것이 좋다.


WARN mapreduce.JobSubmitter: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.


GenericOptionsParser는 아래와 같은 Hadoop framework에서 사용되는 option을 분석해서 처리해준다. (Configuration에 세팅)


 Option

 Description

 -conf <configuration file>

 specify a configuration file

 -D <property=value>

 use value for given property

 -fs <local|namenode:port>

 specify a namenode

 -jt <local|jobtracker:port> 

specify a job tracker 

 -files <comma separated list of files>

 specify comma separated files to be copied to the map reduce cluster

 -libjars <comma separated list of jars>

specify comma separated jar files to include in the classpath. 

 -archives <comma separated list of archives>

specify comma separated archives to be unarchived on the compute machines. 



아래 GenericOptionsParser 사용 예를 보자.


public static void main(String[] args) {
    Configuration conf = new Configuration();
    GenericOptionsParser optionParser = new GenericOptionsParser(conf, args);

    String[] remainingArgs = parser.getRemainingArgs();
}


생성자에 Configuration과 args를 파라메터로 넘겨주면 위에서 설명한 옵션을 세팅해 주고, 나머지 argument를 getRemainingArgs 메소드로 받을 수 있다. 


하지만 GenericOptionsParser를 직접 사용하는 것보다는 ToolRunner를 사용해서 자동으로 설정하게 끔 하는 것이 더 좋다.


public class ConfigurationPrinter extends Configured implements Tool {
  
    @Override
    public int run(String[] args) throws Exception {
        Configuration conf = getConf();
        for (Entry entry: conf) {
            System.out.printf("%s=%s\n", entry.getKey(), entry.getValue());
        }
        return 0;
    }

    public static void main(String[] args) throws Exception {
        int exitCode = ToolRunner.run(new ConfigurationPrinter(), args);
        System.exit(exitCode);
    }
}


ToolRunner.run 메소드로 ConfigurationPrinter 클래스를 실행하는 예제이다. ToolRunner.run 메소드를 사용하려면 Configured 를 상속받고 Tool 을 implements 해야 한다.


특히 -conf 옵션이나 -D 옵션은 파라메터를 설정할 때 편리하게 사용할 수 있다.


% hadoop ConfigurationPrinter -D color=yellow | grep color

color=yellow


위와 같이 실행 했을 때, 별도의 parsing 하는 작업 없이 color=yellow라는 값을 Configuration에 설정할 수 있다.



관련글

2009/09/04 - [Programming/hadoop] - Hadoop 실행시 jar 파일 추가하기