Grep.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:3k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.examples;
  19. import java.util.Random;
  20. import org.apache.hadoop.conf.Configuration;
  21. import org.apache.hadoop.conf.Configured;
  22. import org.apache.hadoop.fs.FileSystem;
  23. import org.apache.hadoop.fs.Path;
  24. import org.apache.hadoop.io.LongWritable;
  25. import org.apache.hadoop.io.Text;
  26. import org.apache.hadoop.mapred.*;
  27. import org.apache.hadoop.mapred.lib.*;
  28. import org.apache.hadoop.util.Tool;
  29. import org.apache.hadoop.util.ToolRunner;
  30. /* Extracts matching regexs from input files and counts them. */
  31. public class Grep extends Configured implements Tool {
  32.   private Grep() {}                               // singleton
  33.   public int run(String[] args) throws Exception {
  34.     if (args.length < 3) {
  35.       System.out.println("Grep <inDir> <outDir> <regex> [<group>]");
  36.       ToolRunner.printGenericCommandUsage(System.out);
  37.       return -1;
  38.     }
  39.     Path tempDir =
  40.       new Path("grep-temp-"+
  41.           Integer.toString(new Random().nextInt(Integer.MAX_VALUE)));
  42.     JobConf grepJob = new JobConf(getConf(), Grep.class);
  43.     
  44.     try {
  45.       
  46.       grepJob.setJobName("grep-search");
  47.       FileInputFormat.setInputPaths(grepJob, args[0]);
  48.       grepJob.setMapperClass(RegexMapper.class);
  49.       grepJob.set("mapred.mapper.regex", args[2]);
  50.       if (args.length == 4)
  51.         grepJob.set("mapred.mapper.regex.group", args[3]);
  52.       grepJob.setCombinerClass(LongSumReducer.class);
  53.       grepJob.setReducerClass(LongSumReducer.class);
  54.       FileOutputFormat.setOutputPath(grepJob, tempDir);
  55.       grepJob.setOutputFormat(SequenceFileOutputFormat.class);
  56.       grepJob.setOutputKeyClass(Text.class);
  57.       grepJob.setOutputValueClass(LongWritable.class);
  58.       JobClient.runJob(grepJob);
  59.       JobConf sortJob = new JobConf(Grep.class);
  60.       sortJob.setJobName("grep-sort");
  61.       FileInputFormat.setInputPaths(sortJob, tempDir);
  62.       sortJob.setInputFormat(SequenceFileInputFormat.class);
  63.       sortJob.setMapperClass(InverseMapper.class);
  64.       sortJob.setNumReduceTasks(1);                 // write a single file
  65.       FileOutputFormat.setOutputPath(sortJob, new Path(args[1]));
  66.       sortJob.setOutputKeyComparatorClass           // sort by decreasing freq
  67.       (LongWritable.DecreasingComparator.class);
  68.       JobClient.runJob(sortJob);
  69.     }
  70.     finally {
  71.       FileSystem.get(grepJob).delete(tempDir, true);
  72.     }
  73.     return 0;
  74.   }
  75.   public static void main(String[] args) throws Exception {
  76.     int res = ToolRunner.run(new Configuration(), new Grep(), args);
  77.     System.exit(res);
  78.   }
  79. }