사용자 정의 옵션(Tool, ToolRunner)

2014. 12. 8. 14:44BigDATA/Hadoop

반응형


하둡은

맵리듀스 프로그램 개발을 편리하게 할수 있도록 다양한 helper class를 제공.

ex) org.apache.hadoop.util package에 구현돼 있음.

  import org.apache.hadoop.util.Tool;
 import org.apache.hadoop.util.ToolRunner;


맵-리듀스 잡을 실행하면

   잡 객체는 사용자가 설정한 Configuration객체를 이용해 org.apache.hadoop.mapred.JobConf 객체를 생성.

      JobConf는 하둡의 환경설정 파일과 하둡 명령어에서 입력한 파라미터를 참조모든 태스크에 이 정보를 제공.


분석 데이터의 종류에 따라 하둡 환경설정 정보와 다른 값을 사용해야 하는 경우가 있을 것입니다.

  이런 불편함을 줄이기 위해 GenericOptionsParser, Tool, ToolRunner 등을 제공.

     이 클래스를 이용해 job을 실행할 때 환경설정 정보를 확인하고, 잡 드라이버 클래스에서 환경설정 정보를 수정.

<< Tool >>
GenericOptionsParser의 콘솔 설정 옵션을 지원하기 위한 인터페이스.
Configuration 클래스를 상속 받으며, 내부적으로 run 메서드가 정의돼 있음.

  org.apache.hadoop.util 
  Interface Tool

  All Superinterfaces:
Configurable
  All Known Implementing Classes:
CLI, InputSampler, InputSampler, JobClient, LogsCLI, MigrationTool, Submitter

ex) 

public class MyApp extends Configured implements Tool { public int run(String[] args) throws Exception { // Configuration processed by ToolRunner

Configuration conf = getConf(); // Create a JobConf using the processed conf JobConf job = new JobConf(conf, MyApp.class); // Process custom command-line options Path in = new Path(args[1]); Path out = new Path(args[2]); // Specify various job-specific parameters job.setJobName("my-app"); job.setInputPath(in); job.setOutputPath(out); job.setMapperClass(MyMapper.class); job.setReducerClass(MyReducer.class); // Submit the job, then poll for progress until the job is complete JobClient.runJob(job); return 0; } public static void main(String[] args) throws Exception { // Let ToolRunner handle generic command-line options int res = ToolRunner.run(new Configuration(), new MyApp(), args); System.exit(res); } }

참고 : http://hadoop.apache.org/docs/r2.3.0/api/org/apache/hadoop/util/Tool.html


<< ToolRunner >>

  A utility to help run Tools.

org.apache.hadoop.util 
Class ToolRunner

java.lang.Object
  extended by org.apache.hadoop.util.ToolRunner

run 호출 시! ret = ToolRunner.run(runner,args);

1) ToolRunner.class 발동!

public static int run(Tool tool, String[] args) throws Exception {
return run(tool.getConf(), tool, args);
}


2) Configuration, Tool, args를 파라미터로 넘겨주며, 안에서는 GenericOptionsParser를 사용!

또한 tool에 있는 run을 실행시켜 준다.

public static int run(Configuration conf, Tool tool, String[] args) throws Exception {
if(conf == null) {
conf = new Configuration();
}

GenericOptionsParser parser = new GenericOptionsParser(conf, args);
tool.setConf(conf);
String[] toolArgs = parser.getRemainingArgs();
return tool.run(toolArgs);
}


만약 Tool, ToolRunner를 사용하지 않고 GenericOptionsParser를 사용할 수도 있음.

1) argument 내용



2) 소스

/**
* Created by terry.park on 2014. 12. 8..
*/
public class AceTest {

public static void main(String[] args) {
Configuration conf = new Configuration();
try {
GenericOptionsParser parser = new GenericOptionsParser(conf, args);
String[] remainingArgs = parser.getRemainingArgs();
for(int i = 0; i < remainingArgs.length; i++) {
System.out.println("["+i+"]=>"+remainingArgs[i]);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

3) Result

[0]=>hadoop

[1]=>ConfigurationPrinter

[2]=>-D

[3]=>name=acet

[4]=>|

[5]=>grep

[6]=>company=daumkakao


하지만 더욱 더 편리하게 helper 클래스를 사용하면 된다는 것이다.

단, 사용하려면 extends Configured implements Tool 를 해줘야 한다.

이제 신나는 mr로 고고씽~


- 끝 -




반응형