mapreduce中类似脚本的wordcount在哪里执行?

6ioyuze2  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(345)

我在求知?当运行带有wordcount jar的mapreduce时,代码何时执行?是在mapper任务期间还是在driver方法期间?

tvz2xvvm

tvz2xvvm1#

有一个在官方Map减少教程看更好的理解。我用关键点来解释这个例子。
让我们看一看java单词计数示例。
假设您已经创建了wc.jar,如下所示。

$ jar cf wc.jar WordCount*.class

现在运行wordcount示例

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

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

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

mapper使用hdfs中的输入目录读取数据,reducer使用hdfs中的输出目录存储数据。
应用程序通常实现 Mapper 以及 Reducer 接口提供map和reduce方法。这些构成了工作的核心。
如果您看到wordcount类的main方法(您可以将其称为 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&value类和输入/输出文件位置。
有些作业可能只有mapper。有些工作将有Map和缩小。除了mapper和reducer类之外,有些作业还具有partitioner和combiner。所以基本上流程是由您决定的,hadoop框架将根据您的输入形成一个工作流。
对于以上示例:
Map器将从hdfs文件位置读取输入数据 FileInputFormat.addInputPath 应用程序编程接口。Map器由下线设置

job.setMapperClass(TokenizerMapper.class);

合路器,这是一个小型减速机将运行Map输出。它将通过合并Map器的输出来减少网络io。

job.setCombinerClass(IntSumReducer.class);

减速器按以下api设置。

job.setReducerClass(IntSumReducer.class);

制图器
Map器将输入键/值对Map到一组中间键/值对。hadoopmapreduce框架为作业的inputformat生成的每个inputspilt生成一个map任务。
减速机
reducer将共享一个键的一组中间值缩减为一组较小的值。
合路器:
用户可以选择通过 Job.setCombinerClass(Class), 执行中间输出的本地聚合,这有助于减少从Map器传输到缩减器的数据量。

fdbelqdn

fdbelqdn2#

正如sma正确回答的那样,代码执行从driver类的main方法开始,该方法使用job对象的setmapperclass、setreducerclass方法将控制传递给mapper和reducer类。

agxfikkp

agxfikkp3#

当运行带有wordcount jar的mapreduce时,代码何时执行?它以主代码执行,即驱动程序代码,然后是map代码,然后是reducer代码(如果有的话)
是在mapper任务期间还是在driver方法期间?是的,两者都有。
驱动程序-将驱动map reduce,在这里定义我应该使用哪个类作为mapper、reducer、paritioner和combiner。
mapper-mapper是您的字数计数将创建一个键-值对的Map,其中键作为单词,值作为出现的次数。
reducer-reducer将从每个Map器中获取值,并将所有值与同一个键accrossMap器相加,从而得到最终结果。

相关问题