MapReduce 의 Job 구동 류

이번 내용 은 MR 이후 Job 작업 시 중복 코드 를 피하 고 빠 르 고 간편 하 게 호출 할 수 있 습 니 다.
메모: 이 함 수 는 확장 되 지 않 았 습 니 다. 간단 한 패키지 Job 방법 입 니 다. 예 를 들 어 파 티 션 정렬 을 하고 이 함 수 를 재 구성 하 는 것 을 권장 합 니 다.
package com;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;
import java.net.URISyntaxException;

/**
 * $    : Drive
 *
 * @author :smart-dxw
 * @version : 2019/6/21 20:22 v1.0
 */
public class Drive {

    /**
     * @param object        run   
     * @param mymap         map 
     * @param mymapkey      mapkey
     * @param mymapvalue    mapvalue
     * @param myreduce      reduce 
     * @param myreducekey   reducekey
     * @param myreducevalue reducevalue
     * @param args1           1
     * @param args2           2
     * @throws IOException
     * @throws ClassNotFoundException
     * @throws InterruptedException
     * @throws URISyntaxException
     */
    public static void run(Class> object, Class extends Mapper> mymap, Class> mymapkey, Class> mymapvalue, Class extends Reducer> myreduce, Class> myreducekey, Class> myreducevalue, String args1, String args2) throws IOException, ClassNotFoundException, InterruptedException, URISyntaxException {

        // 1   job  
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf);

        // 2   jar 
        job.setJarByClass(object);

        // 3   map reduce
        job.setMapperClass(mymap);
        // 4         
        job.setMapOutputKeyClass(mymapkey);
        job.setMapOutputValueClass(mymapvalue);

        //   reduce
        job.setReducerClass(myreduce);
        job.setOutputKeyClass(myreducekey);
        job.setOutputValueClass(myreducevalue);

        //          
        Path path = new Path(args2);
        FileSystem fs = FileSystem.get(conf);
        if (fs.exists(path)) {
            fs.delete(path, true);
        }

        // 5          
        FileInputFormat.setInputPaths(job, new Path(args1));
        FileOutputFormat.setOutputPath(job, new Path(args2));

        // 6   
        job.waitForCompletion(true);
    }
}

호출 방식 은 반복 적 으로 작성 할 수 있 습 니 다. 아 리 플러그 인 알림 을 설치 한 친 구 는 경 고 를 피 할 수 있 습 니 다!
package com.studentExam.avgscore;

import com.Drive;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;

import java.io.IOException;
import java.net.URISyntaxException;

/**
 * $    : run
 *
 * @author :smart-dxw
 * @version : 2019/6/19 22:02 v1.0
 */
public class AvgRun {
    public static void main(String[] args) throws ClassNotFoundException, URISyntaxException, InterruptedException, IOException {
        args = new String[]{
                "C:\\studentExam\\01\\in",
                "C:\\studentExam\\01\\AvgRun"
        };
        Drive.run(AvgRun.class,
                AvgMapper.class,
                Text.class,
                IntWritable.class,
                AvgReducer.class,
                Text.class,
                Text.class,
                args[0],
                args[1]);
    }
}

철 아 힘 내!공사 장 에서 기다 릴 게!
 

좋은 웹페이지 즐겨찾기