把http://blog.51yip.com/hadoop/2189.html 这个网页的正文转成markdown输出
时间: 2023-12-09 19:05:06 浏览: 76
# Hadoop MapReduce 编程模型
## MapReduce 程序设计模型
MapReduce 是 Hadoop 的编程模型,其基本思想是将一组计算任务分解成多个并行的小任务,分别处理数据的不同部分,在最后将结果汇总起来。
MapReduce 编程模型包括两个重要的阶段:Map 和 Reduce。Map 阶段负责将输入数据分解成多个小段,交由多个节点并行处理,然后将处理结果输出到 Reduce 阶段进行合并。Reduce 阶段负责将 Map 阶段产生的结果进行汇总,并输出最终的计算结果。
## MapReduce 程序实现
MapReduce 的程序实现通常包括以下几个步骤:
1. 定义 Map 函数:输入数据格式,输出键值对格式。
2. 定义 Reduce 函数:输入键值对格式,输出最终结果。
3. 定义输入文件格式。
4. 定义输出文件格式。
5. 提交作业并等待执行结果。
## MapReduce 程序示例
下面是一个简单的 MapReduce 程序示例,其功能是对输入文件中的每一行进行单词计数:
```java
public class WordCount {
public static class Map extends Mapper<LongWritable, Text, Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String line = value.toString();
StringTokenizer tokenizer = new StringTokenizer(line);
while (tokenizer.hasMoreTokens()) {
word.set(tokenizer.nextToken());
context.write(word, one);
}
}
}
public static class Reduce extends Reducer<Text, IntWritable, Text, IntWritable> {
public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
context.write(key, new IntWritable(sum));
}
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
Job job = new Job(conf, "wordcount");
job.setJarByClass(WordCount.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
job.setMapperClass(Map.class);
job.setReducerClass(Reduce.class);
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
job.waitForCompletion(true);
}
}
```
以上程序定义了一个 Map 函数和一个 Reduce 函数,其中 Map 函数将输入的每一行切割成单词,然后输出键值对 <单词,1>。Reduce 函数则将相同单词的键值对合并,并输出键值对 <单词,单词出现次数>。
最后,程序将输入文件格式设置为 TextInputFormat,将输出文件格式设置为 TextOutputFormat,然后将输入文件路径和输出文件路径作为参数传递给程序,并提交作业开始执行。
阅读全文