# 체인매퍼(ChainMapper), 체인리듀서(ChainReducer)


체인매퍼, 체인리듀서 클래스는 체인 방식으로 매퍼와 리듀서를 호출
체인매퍼의 경우 첫 번째 매퍼를 실행한 후 그 출력을 두 번째 매퍼의 입력 파라미터로 전달하고,
두 번째 매퍼의 출력은 그다음 순서의 매퍼의 입력으로 전달 됩니다.
이렇게 순차적으로 매퍼가 실행되다가 마지막에 있는 매퍼의 출력이 매퍼의 최종 출력 데이터가 됩니다.
체인리듀서도 위와 같은 방식으로 출력 데이터가 만들어집니다.


* 다양한 매퍼와 리듀서 조합
 > 매퍼1 -> 매퍼2 -> 리듀서
 > 매퍼1 -> 리듀서 -> 매퍼2
 > 매퍼1 -> 매퍼2 -> 리듀서 -> 매퍼3 -> 매퍼4


# 체인 매퍼와 체인 리듀서의 static 메서드
클래스 메서드 기능
 ChainMapper  addMapper  체인 작업의 JobConf에 매퍼 클래스를 추가.
 ChainReducer  setReducer  체인 작업의 JobConf에 리듀서 클래스를 설정.
 addMapper  체인 작업의 JobConf에 매퍼 클래스를 추가.
  리듀서 클래스 설정 이후에 매퍼를 추가할 때 사용.

# 잡 실행
   매퍼1 -> 매퍼2 -> 리듀서 -> 매퍼3 -> 매퍼4
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.FileInputFormat;
import org.apache.hadoop.mapred.FileOutputFormat;
import org.apache.hadoop.mapred.JobClient;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.RunningJob;
import org.apache.hadoop.mapred.TextInputFormat;
import org.apache.hadoop.mapred.TextOutputFormat;
import org.apache.hadoop.mapred.lib.ChainMapper;
import org.apache.hadoop.mapred.lib.ChainReducer;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

/**
 * # 매퍼, 리듀서
 *   org.apache.hadoop.mapred.Mapper
 *   org.apache.hadoop.mapred.Reducer
 */
public class ChainMapperReducerDriver{
    public int run(String[] args) throws Exception {
        JobConf conf = new JobConf(ChainMapperReducerDriver.class);

        conf.setJobName("ChainMapperReducer Driver");

        // 입출력 데이터 포맷 설정
        conf.setInputFormat(TextInputFormat.class);
        conf.setOutputFormat(TextOutputFormat.class);

        // 첫 번째 Mapper 설정
        JobConf mapAConf = new JobConf(false);
        /**
         * void org.apache.hadoop.mapred.lib.ChainMapper.addMapper(
         *         JobConf job, Class<? extends Mapper<K1, V1, K2, V2>> klass, 
         *         Class<? extends K1> inputKeyClass, Class<? extends V1> inputValueClass, 
         *         Class<? extends K2> outputKeyClass, Class<? extends V2> outputValueClass, 
         *         boolean byValue, JobConf mapperConf)
         */
        ChainMapper.addMapper(conf, AMap.class, LongWritable.class, 
                Text.class, Text.class, Text.class, true, mapAConf);

        // 두 번째 Mapper 설정
        JobConf mapBConf = new JobConf(false);
        ChainMapper.addMapper(conf, BMap.class, Text.class, 
                Text.class, LongWritable.class, Text.class, true, mapBConf);

        // Reducer 설정
        JobConf reduceConf = new JobConf(false);
        ChainReducer.setReducer(conf, XReduce.class, LongWritable.class, 
                Text.class, Text.class, Text.class, true, reduceConf);

        // 세 번째 Mapper 설정(리듀서 실행 후 실행됨)
        ChainReducer.addMapper(conf, CMap.class, Text.class, 
                Text.class, LongWritable.class, Text.class, false, null);

        // 네 번째 Mapper 설정
        ChainReducer.addMapper(conf, DMap.class, LongWritable.class, 
                Text.class, LongWritable.class, LongWritable.class, true, null);

        FileInputFormat.setInputPaths(conf, inputDir);
        FileOutputFormat.setOutputPath(conf, outputDir);

        JobClient jc = new JobClient(conf);
        RunningJob job = jc.submitJob(conf);

        return 0;
    }

    public static void main(String[] args) throws Exception {
        int res = new ChainMapperReducerDriver().run(args);
        System.out.println("## RESULT:" + res);
    }
}



참고 : 시작하세요! 하둡 프로그래밍


※ 위 내용은, 여러 자료를 참고하거나 제가 주관적으로 정리한 것입니다.
   잘못된 정보나 보완이 필요한 부분을, 댓글 또는 메일로 보내주시면 많은 도움이 되겠습니다.
01 19, 2014 15:28 01 19, 2014 15:28


Trackback URL : http://develop.sunshiny.co.kr/trackback/994

Leave a comment

« Previous : 1 : ... 48 : 49 : 50 : 51 : 52 : 53 : 54 : 55 : 56 : ... 648 : Next »

Recent Posts

  1. HDFS - Python Encoding 오류 처리
  2. HP - Vertica ROS Container 관련 오류...
  3. HDFS - Hive 실행시 System Time 오류
  4. HP - Vertica 사용자 쿼리 이력 테이블...
  5. Client에서 HDFS 환경의 데이터 처리시...

Recent Comments

  1. 안녕하세요^^ 배그핵
  2. 안녕하세요^^ 도움이 되셨다니, 저... sunshiny
  3. 정말 큰 도움이 되었습니다.. 감사합... 사랑은
  4. 네, 안녕하세요. 댓글 남겨 주셔서... sunshiny
  5. 감사합니다 많은 도움 되었습니다!ㅎㅎ 프리시퀸스

Recent Trackbacks

  1. prefab steel buildings prefab steel buildings %M
  2. Mysql - mysql 설치후 Character set... 멀고 가까움이 다르기 때문 %M

Calendar

«   09 2019   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          

Bookmarks

  1. 위키피디아
  2. MysqlKorea
  3. 오라클 클럽
  4. API - Java
  5. Apache Hadoop API
  6. Apache Software Foundation
  7. HDFS 생태계 솔루션
  8. DNSBL - Spam Database Lookup
  9. Ready System
  10. Solaris Freeware
  11. Linux-Site
  12. 윈디하나의 솔라나라

Site Stats

TOTAL 2683568 HIT
TODAY 402 HIT
YESTERDAY 438 HIT