在MapReduce中执行wordcount这样的脚本在哪里?

时间:2016-01-03 07:05:07

标签: hadoop mapreduce hadoop2

我要求知识?当代码执行时,使用wordcount jar运行MapReduce时?是在mapper任务还是驱动程序方法中?

3 个答案:

答案 0 :(得分:1)

  
    

当代码执行时,使用wordcount jar运行MapReduce时?     它使用main(即驱动程序代码)执行,然后映射代码,后跟reducer代码(如果有)

         

是在mapper任务还是驱动程序方法中?     是的,两者兼而有之。

  

驱动程序 - 会驱动地图缩小,您可以在其中定义我应该用于mapper,reducer,paritioner,combiner的类。

Mapper - mapper是您的字数会创建键值对的映射,其中键作为单词,值作为发生的次数。

Reducer - Reducer将从每个映射器获取值,并将所有值与相同的键交叉映射器相加,并为您提供最终结果。

答案 1 :(得分:1)

正如SMA正确回答的那样,代码执行从驱动程序类的main方法开始,它使用方法setMapperClass,setReducerClass作业对象将控制传递给mapper和reducer类。

答案 2 :(得分:1)

了解官方map reduce tutorial以便更好地理解。我正在使用关键点来解释这个例子。

让我们来看看java字数例子。

  1. 假设您已按如下方式创建了wc.jar。

    $ jar cf wc.jar WordCount*.class 
    
  2. 现在运行WordCount示例

    $ bin/hadoop jar wc.jar WordCount /user/joe/wordcount/input /user/joe/wordcount/output
    

    现在你已经传递了输入目录&输出目录分别用于读写数据。

  3. 假设:

    /user/joe/wordcount/input - input directory in HDFS
    /user/joe/wordcount/output - output directory in HDFS
    
    Mapper使用HDFS中的

    输入目录来读取数据& reducer使用HDFS中的输出目录来存储数据。

    应用程序通常实现MapperReducer接口以提供map和reduce方法。这些构成了工作的核心。

    如果您看到WordCount类的主要方法(可以将其称为Driver程序),

    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf, "word count");
        job.setJarByClass(WordCount.class);
        job.setMapperClass(TokenizerMapper.class);
        job.setCombinerClass(IntSumReducer.class);
        job.setReducerClass(IntSumReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        FileInputFormat.addInputPath(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));
        System.exit(job.waitForCompletion(true) ? 0 : 1);
      }
    

    我们正在设置Mapper类,Reducer类,Combiner类,Output Key&值类和输入/输出文件位置。

    有些工作可能只有Mapper。有些工作会有Mapper和Reducer。有些工作会有Partitioner&合并器除了Mapper&减速机类。所以基本上流程由您决定,Hadoop框架将根据您的输入形成工作流程。

    对于上面的例子:

    1. Mapper将从FileInputFormat.addInputPath API读取HDFS文件位置的输入数据。 Mapper由下面的行设置

      job.setMapperClass(TokenizerMapper.class);
      
    2. Combiner是迷你减速机,将在Mapper输出上运行。它将通过组合Mappers的输出来减少网络IO。

      job.setCombinerClass(IntSumReducer.class);
      
    3. Reducer由以下API设置。

      job.setReducerClass(IntSumReducer.class);
      
    4. <强> 映射

      映射器将输入键/值对映射到一组中间键/值对。 Hadoop MapReduce框架为作业的InputFormat生成的每个InputSplit生成一个map任务。

      <强> 减速

      Reducer将一组中间值减少到一个较小的值集合。

      <强>

      用户可以选择通过Job.setCombinerClass(Class),指定一个组合器来执行中间输出的本地聚合,这有助于减少从Mapper传输到Reducer的数据量。