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 파일 추가하기