복붙노트

[HADOOP] Hadoop JobConf 클래스는 더 이상 사용되지 않으며 업데이트 된 예제가 필요합니다.

HADOOP

Hadoop JobConf 클래스는 더 이상 사용되지 않으며 업데이트 된 예제가 필요합니다.

나는 hadoop 프로그램을 작성 중이며, 더 이상 사용하지 않는 클래스를 가지고 놀고 싶지 않습니다. 어디서나 온라인 업데이트 된 프로그램을 찾을 수 없습니다.

수업 대신에

수업.

   public static void main(String[] args) throws Exception {
     JobConf conf = new JobConf(Test.class);
     conf.setJobName("TESST");

     conf.setOutputKeyClass(Text.class);
     conf.setOutputValueClass(IntWritable.class);

     conf.setMapperClass(Map.class);
     conf.setCombinerClass(Reduce.class);
     conf.setReducerClass(Reduce.class);

     conf.setInputFormat(TextInputFormat.class);
     conf.setOutputFormat(TextOutputFormat.class);

     FileInputFormat.setInputPaths(conf, new Path(args[0]));
     FileOutputFormat.setOutputPath(conf, new Path(args[1]));

     JobClient.runJob(conf);
   }

내 메인 () 모양입니다. 누구든지 업데이트 된 기능을 제게 제공 할 수 있습니까?

해결법

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

    1.여기는 고전적인 WordCount 예제입니다. 필요하지 않을 수도있는 다른 수입품이 있음을 알게 될 것입니다. 알아낼 코드를 읽어보십시오.

    여기는 고전적인 WordCount 예제입니다. 필요하지 않을 수도있는 다른 수입품이 있음을 알게 될 것입니다. 알아낼 코드를 읽어보십시오.

    뭐가 달라? 도구 인터페이스와 GenericOptionParser를 사용하여 작업 명령 a.k.a : hadoop jar ....을 구문 분석합니다.

    매퍼 (mapper)에서는 달리기를 보게 될 것입니다. 이 메소드는 Map 메소드의 코드를 제공 할 때 기본적으로 호출된다. 여기에 매핑 단계를 추가로 제어 할 수있는 정보를 제공합니다. 이것은 모두 새로운 API를 사용하고 있습니다. 유용하다고 생각하길 바랍니다. 다른 질문이라도 알려주세요.

    import java.io.IOException;
    import java.util.*;
    
    import org.apache.commons.io.FileUtils;
    import org.apache.hadoop.conf.*;
    
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.io.*;
    
    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;
    
    import org.apache.hadoop.util.Tool;
    import org.apache.hadoop.util.ToolRunner;
    import org.apache.hadoop.util.GenericOptionsParser;
    
    public class Inception extends Configured implements Tool{
    
     public static class Map extends Mapper<LongWritable, Text, Text, IntWritable> {
        private final static IntWritable one = new IntWritable(1);
        private Text word = new Text();
    
        public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
            String line = value.toString();
            StringTokenizer tokenizer = new StringTokenizer(line);
            while (tokenizer.hasMoreTokens()) {
                word.set(tokenizer.nextToken());
                context.write(word, one);
            }
        }
    
      public void run (Context context) throws IOException, InterruptedException {
            setup(context);
            while (context.nextKeyValue()) {
                  map(context.getCurrentKey(), context.getCurrentValue(), context);
                }
            cleanup(context);
      }
     }
    
     public static class Reduce extends Reducer<Text, IntWritable, Text, IntWritable> {
    
        public void reduce(Text key, Iterable<IntWritable> values, Context context) 
          throws IOException, InterruptedException {
            int sum = 0;
            for (IntWritable val : values) {
                sum += val.get();
            }
            context.write(key, new IntWritable(sum));
        }
     }
    
    public int run(String[] args) throws Exception {
    
        Job job = Job.getInstance(new Configuration());
    
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
    
        job.setMapperClass(Map.class);
        job.setReducerClass(Reduce.class);
    
        job.setInputFormatClass(TextInputFormat.class);
        job.setOutputFormatClass(TextOutputFormat.class);
    
        FileInputFormat.setInputPaths(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));
    
        job.setJarByClass(WordCount.class);
    
        job.submit();
        return 0;
        }
    
     public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
        ToolRunner.run(new WordCount(), otherArgs);
     }
    }
    
  2. ==============================

    2.또한 고전적인 WordCount를 예로 들어보십시오.

    또한 고전적인 WordCount를 예로 들어보십시오.

    org.apache.hadoop.mapred.JobConf가 오래되었습니다. 새 버전에서는 Configuration 및 Job을 사용합니다.

    org.apache.hadoop.mapreduce.lib. * (새로운 API)를 org.apache.hadoop.mapred.TextInputFormat (오래된 것) 대신 사용하십시오.

    매퍼 (Mapper)와 감속기 (Reducer)는 새로운 기능이 아니며 주요 기능을 참조하십시오. 상대적으로 전반적인 구성을 포함하고 있으며 특정 요구 사항에 따라 자유롭게 변경할 수 있습니다.

    import java.io.IOException;
    import java.util.StringTokenizer;
    
    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;
    
    class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {
      private Text outputKey;
      private IntWritable outputVal;
    
      @Override
      public void setup(Context context) {
        outputKey = new Text();
        outputVal = new IntWritable(1);
      }
    
      @Override
      public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
        StringTokenizer stk = new StringTokenizer(value.toString());
        while(stk.hasMoreTokens()) {
          outputKey.set(stk.nextToken());
          context.write(outputKey, outputVal);
        }
      }
    }
    
    class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
      private IntWritable result;
    
      @Override
      public void setup(Context context) {
        result = new IntWritable();
      }
    
      @Override
      public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        int sum = 0;
        for(IntWritable val: values) {
          sum += val.get();
        }
        result.set(sum);
        context.write(key, result);
      }
    }
    
    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);
      }
    }
    
  3. from https://stackoverflow.com/questions/8603788/hadoop-jobconf-class-is-deprecated-need-updated-example by cc-by-sa and MIT license