복붙노트

[HADOOP] JobConf를 사용하지 않고 Hadoop 작업 실행

HADOOP

JobConf를 사용하지 않고 Hadoop 작업 실행

Deprecated JobConf 클래스를 사용하지 않는 Hadoop 작업을 제출하는 한 가지 예는 찾을 수 없습니다. Deprecated되지 않은 JobClient는 여전히 JobConf 매개 변수를 사용하는 메소드 만 지원합니다.

누군가가 Hadoop 맵을 제출하는 Java 코드 / Job 클래스를 사용하여 작업을 줄이고 (예 : JobConf가 아닌) mapred.lib.input 대신 mapreduce.lib.input 패키지를 사용하여 Java 코드 예제를 가르쳐 주시겠습니까?

해결법

  1. ==============================

    1.희망이 도움이

    희망이 도움이

    import java.io.File;
    
    import org.apache.commons.io.FileUtils;
    import org.apache.hadoop.conf.Configured;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.io.LongWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Job;
    import org.apache.hadoop.mapreduce.Mapper;
    import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
    import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
    import org.apache.hadoop.util.Tool;
    import org.apache.hadoop.util.ToolRunner;
    
    public class MapReduceExample extends Configured implements Tool {
    
        static class MyMapper extends Mapper<LongWritable, Text, LongWritable, Text> {
            public MyMapper(){
    
            }
    
            protected void map(
                    LongWritable key,
                    Text value,
                    org.apache.hadoop.mapreduce.Mapper<LongWritable, Text, LongWritable, Text>.Context context)
                    throws java.io.IOException, InterruptedException {
                context.getCounter("mygroup", "jeff").increment(1);
                context.write(key, value);
            };
        }
    
        @Override
        public int run(String[] args) throws Exception {
            Job job = new Job();
            job.setMapperClass(MyMapper.class);
            FileInputFormat.setInputPaths(job, new Path(args[0]));
            FileOutputFormat.setOutputPath(job, new Path(args[1]));
    
            job.waitForCompletion(true);
            return 0;
        }
    
        public static void main(String[] args) throws Exception {
            FileUtils.deleteDirectory(new File("data/output"));
            args = new String[] { "data/input", "data/output" };
            ToolRunner.run(new MapReduceExample(), args);
        }
    }
    
  2. ==============================

    2.이 튜토리얼에서는 Hadoop 0.20.1을 사용하여 더 이상 사용되지 않는 JobConf 클래스를 제거하는 방법을 보여 준다.

    이 튜토리얼에서는 Hadoop 0.20.1을 사용하여 더 이상 사용되지 않는 JobConf 클래스를 제거하는 방법을 보여 준다.

  3. ==============================

    3.다음은 다운로드 할 수있는 코드 예제입니다. http://sonerbalkir.blogspot.com/2010/01/new-hadoop-api-020x.html 2 년이 넘었으며 새로운 API에 대해 공식적인 문서가 없습니다. 슬퍼.

    다음은 다운로드 할 수있는 코드 예제입니다. http://sonerbalkir.blogspot.com/2010/01/new-hadoop-api-020x.html 2 년이 넘었으며 새로운 API에 대해 공식적인 문서가 없습니다. 슬퍼.

  4. ==============================

    4.이전 API에서는 작업을 제출하는 세 가지 방법이 있었고 그 중 하나는 작업을 제출하고 RunningJob에 대한 참조를 얻고 RunningJob의 ID를 얻는 것입니다.

    이전 API에서는 작업을 제출하는 세 가지 방법이 있었고 그 중 하나는 작업을 제출하고 RunningJob에 대한 참조를 얻고 RunningJob의 ID를 얻는 것입니다.

    submitJob(JobConf) : only submits the job, then poll the returned handle to the RunningJob to query status and make scheduling decisions.
    

    어떻게 새로운 Api를 사용할 수 있고 RunningJob에 대한 참조를 얻고 실행 홉의 ID를 얻을 수 있습니까? API 중 어느 것도 RunningJob에 대한 참조를 반환하지 않습니다.

    http://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapreduce/Job.html
    

    감사

  5. ==============================

    5.구성 및 작업을 사용해보십시오. 다음은 그 예입니다.

    구성 및 작업을 사용해보십시오. 다음은 그 예입니다.

    (매퍼, 콤비네이터, 감속기 클래스 및 기타 구성을 교체하십시오)

    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.io.IntWritable;
    import org.apache.hadoop.io.Text;
    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.input.TextInputFormat;
    import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
    import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
    
    public class WordCount {
      public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
        Configuration conf = new Configuration();
        if(args.length != 2) {
          System.err.println("Usage: <in> <out>");
          System.exit(2);
        }
        Job job = Job.getInstance(conf, "Word Count");
    
        // set jar
        job.setJarByClass(WordCount.class);
    
        // set Mapper, Combiner, Reducer
        job.setMapperClass(TokenizerMapper.class);
        job.setCombinerClass(IntSumReducer.class);
        job.setReducerClass(IntSumReducer.class);
    
        /* Optional, set customer defined Partioner:
         * job.setPartitionerClass(MyPartioner.class);
         */
    
        // set output key
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
    
        // set input and output path
        FileInputFormat.addInputPath(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));
    
        // by default, Hadoop use TextInputFormat and TextOutputFormat
        // any customer defined input and output class must implement InputFormat/OutputFormat interface
        job.setInputFormatClass(TextInputFormat.class);
        job.setOutputFormatClass(TextOutputFormat.class);
    
        System.exit(job.waitForCompletion(true) ? 0 : 1);
      }
    }
    
  6. from https://stackoverflow.com/questions/2115292/run-hadoop-job-without-using-jobconf by cc-by-sa and MIT license