其中是在MapReduce中执行的类似脚本的wordcount



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

当使用wordcount jar运行MapReduce时,代码何时执行?它使用主代码执行,即驱动程序代码,然后是映射代码,后面是减速器代码(如果有)

是在映射程序任务中还是在驱动程序方法中?是的,两者都有。

Driver-将驱动映射reduce,在这里您定义我应该为mapper、reducer、partioner和combiner使用哪个类。

Mapper-Mapper是单词计数创建键值对映射的地方,键为单词,值为发生次数。

Reducer-Reducer将从每个映射器中获取值,并将所有值与跨映射器的同一密钥相加,从而得到最终结果。

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

查看官方地图缩减教程以更好地理解。我用要点来解释这个例子。

让我们来看看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
    

    现在您已经传递了inputdirectory&分别用于读取和写入数据的输出目录。

假设:

/user/joe/wordcount/input - input directory in HDFS
/user/joe/wordcount/output - output directory in HDFS

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

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

如果你看到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。某些作业将具有"映射器"one_answers"还原器"。一些作业将具有Partitioner&除了Mapper&减速器等级。因此,基本上流程由您决定,Hadoop框架将根据您的输入形成工作流。

例如:

  1. 映射器将从FileInputFormat.addInputPath API的HDFS文件位置读取输入数据。映射器由线下设置

    job.setMapperClass(TokenizerMapper.class);
    
  2. Combiner是一个小型减速器,将在Mapper输出上运行。它将通过组合映射器的输出来减少网络IO。

    job.setCombinerClass(IntSumReducer.class);
    
  3. 减速器由以下API设定。

    job.setReducerClass(IntSumReducer.class);
    

映射器

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

减速器

Reducer将共享一个键的一组中间值缩减为一组较小的值。

组合器:

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

相关内容

  • 没有找到相关文章

最新更新