MapReduce 框架概念
MapReduce 是一个分布式计算框架,由 Google 提出并开源,主要用于处理大规模数据集(Big Data)的并行运算,它通过将一个复杂的大任务分解成多个小任务,然后并行执行这些小任务,最后将结果汇总以完成整个大任务。
MapReduce 工作原理
1、Map 阶段:
输入数据被映射到多个“Map”任务。
每个“Map”任务处理一部分输入数据,并生成键值对(KeyValue)的中间结果。
2、Shuffle & Sort 阶段:
将所有“Map”任务生成的中间结果进行排序和合并,以便后续的“Reduce”任务可以正确处理。
3、Reduce 阶段:
对“Shuffle & Sort”阶段生成的中间结果进行汇总处理。
每个“Reduce”任务处理一部分中间结果,并输出最终的输出结果。
MapReduce 特点
1、分布式计算:
可以在大量廉价的商用服务器上运行,实现大数据的高效处理。
2、可扩展性:
系统可以根据需要动态地添加或移除服务器,以适应数据量的变化。
3、容错性:
系统可以自动检测和处理节点故障,确保任务的完成。
4、简单性:
MapReduce 框架的编程模型简单,易于理解和实现。
5、高效性:
通过并行处理和优化的内存管理,MapReduce 可以高效地处理大规模数据集。
MapReduce 应用开发简介
开发环境搭建
1、Java 环境搭建:
MapReduce 是用 Java 编写的,因此需要配置 Java 开发环境。
2、Hadoop 集成:
Hadoop 是一个流行的开源框架,包含了 MapReduce,需要下载并配置 Hadoop 环境。
1、Mapper 类:
实现map
方法,用于处理输入数据,并生成键值对。
2、Reducer 类:
实现reduce
方法,用于处理来自“Map”任务的中间结果,并生成最终输出。
3、Driver 类:
配置作业的输入输出路径,并启动作业。
作业提交与监控
1、作业提交:
使用 Hadoop 提供的命令行工具提交作业到 Hadoop 集群。
2、作业监控:
使用 Hadoop 的 Web 界面或其他监控工具监控作业的执行状态。
示例
以下是一个简单的 MapReduce 作业示例:
public class WordCount { public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(Object key, Text value, Context context ) throws IOException, InterruptedException { StringTokenizer itr = new StringTokenizer(value.toString()); while (itr.hasMoreTokens()) { word.set(itr.nextToken()); context.write(word, one); } } } public static class IntSumReducer extends Reducer<Text,IntWritable,Text,IntWritable> { private IntWritable result = new IntWritable(); public void reduce(Text key, Iterable<IntWritable> values, Context context ) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } result.set(sum); context.write(key, result); } } 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); } }
在这个示例中,TokenizerMapper
将文本分解成单词,IntSumReducer
将单词出现的次数进行汇总,这个简单的程序可以用来统计一个文本文件中每个单词出现的次数。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1121887.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复