我要求知识?当代码执行时,使用wordcount jar运行MapReduce时?是在mapper任务还是驱动程序方法中?
答案 0 :(得分:1)
当代码执行时,使用wordcount jar运行MapReduce时? 它使用main(即驱动程序代码)执行,然后映射代码,后跟reducer代码(如果有)
是在mapper任务还是驱动程序方法中? 是的,两者兼而有之。
驱动程序 - 会驱动地图缩小,您可以在其中定义我应该用于mapper,reducer,paritioner,combiner的类。
Mapper - mapper是您的字数会创建键值对的映射,其中键作为单词,值作为发生的次数。
Reducer - Reducer将从每个映射器获取值,并将所有值与相同的键交叉映射器相加,并为您提供最终结果。
答案 1 :(得分:1)
答案 2 :(得分:1)
了解官方map reduce tutorial以便更好地理解。我正在使用关键点来解释这个例子。
让我们来看看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类的主要方法(可以将其称为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框架将根据您的输入形成工作流程。
对于上面的例子:
Mapper将从FileInputFormat.addInputPath
API读取HDFS文件位置的输入数据。 Mapper由下面的行设置
job.setMapperClass(TokenizerMapper.class);
Combiner是迷你减速机,将在Mapper输出上运行。它将通过组合Mappers的输出来减少网络IO。
job.setCombinerClass(IntSumReducer.class);
Reducer由以下API设置。
job.setReducerClass(IntSumReducer.class);
<强> 映射 强>
映射器将输入键/值对映射到一组中间键/值对。 Hadoop MapReduce框架为作业的InputFormat生成的每个InputSplit生成一个map任务。
<强> 减速 强>
Reducer将一组中间值减少到一个较小的值集合。
<强> 合 强>
用户可以选择通过Job.setCombinerClass(Class),
指定一个组合器来执行中间输出的本地聚合,这有助于减少从Mapper传输到Reducer的数据量。