MapReduce概述_MapReduce应用开发概述
定义与核心功能
MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架,它的核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。
优点
1、易于编程:通过实现一些简单的接口,就能完成一个分布式程序,这个程序可以分布到大量廉价的PC机器上运行,类似于编写一个简单的串行程序。
2、良好的扩展性:当计算资源不足时,可以通过增加机器来扩展计算能力。
3、高容错性:设计初衷是使程序能够部署在廉价的PC机器上,具备高容错性,如果一台机器故障,任务会自动转移到其他节点继续运行,无需人工干预。
4、适合海量数据离线处理:可以实现上千台服务器集群并发工作,提供强大的数据处理能力,特别适用于PB级以上的海量数据。
5、抽象层级高:提供了高级抽象,允许开发人员专注于业务逻辑,而不必处理底层的分布式系统细节。
6、并发能力强:能够实现大规模并行处理,提高数据处理效率。
缺点
1、不擅长实时计算:由于其批处理特性,不适合需要低延迟响应的应用程序。
2、不擅长流式计算:输入数据集必须是静态的,不能动态变化。
3、不擅长DAG(有向无环图)计算:多个应用程序存在依赖关系时,每个MapReduce作业的输出结果都会写入磁盘,导致大量的磁盘IO,性能低下。
4、数据倾斜问题:数据可能不均匀地分布在不同的映射任务中,导致性能不均衡。
核心思想
MapReduce将计算程序分为两个阶段:Map(映射)阶段和Reduce(归约)阶段。
1、Map阶段:以数据块作为输入,分配到若干个MapTask并发处理,根据业务逻辑对数据进行过滤和提取操作,最终将输入的数据映射为一组中间键值对(keyvalue pairs),其中key一般表示数据的某种属性,value包含相关的数据或计算结果,生成的中间键值对根据其中的key被划分为不同的分区,相同键(key)的数据将发往同一个Reduce任务进行处理。
2、Reduce阶段:以Map阶段计算的结果作为输入,每个ReduceTask将处理一个或多个分区的数据,将相同键的数据聚合在一起,并通过用户提供的归约函数(Reduce函数)进行处理、分析和合并,生成最终的输出结果。
MapReduce进程
一个完整的MapReduce程序在分布式运行时有三类实例进程:
1、MrAppMaster:负责整个程序的过程调度及状态协调。
2、MapTask:负责Map阶段的整个数据处理流程。
3、ReduceTask:负责Reduce阶段的整个数据处理流程。
编程规范
用户编写的程序分为三个部分:Mapper、Reducer和Driver。
1、Mapper阶段:用户自定义的Mapper要继承自己的父类,输入数据是KV对的形式,业务逻辑写在map()方法中,输出数据也是KV对的形式。
2、Reducer阶段:用户自定义的Reducer要继承自己的父类,输入数据类型对应Mapper的输出数据类型,也是KV对,业务逻辑写在reduce()方法中。
3、Driver阶段:相当于YARN集群的客户端,用于提交整个程序到YARN集群,提交的是封装了MapReduce程序相关运行参数的job对象。
WordCount案例实操
在给定的文本文件中统计输出每一个单词出现的总次数。
1、需求分析:按照MapReduce编程规范,分别编写Mapper,Reducer,Driver。
2、环境准备:创建maven工程,添加依赖,准备log4j.properties文件。
3、Driver:获取配置信息,获取job对象实例,关联Mapper/Reducer业务类,指定Mapper输出数据的kv类型,指定最终输出的数据的kv类型,指定job的输入原始文件所在目录,指定job的输出结果所在目录,指定本程序的jar包所在的本地路径,提交作业。
4、Mapper阶段:用户自定义的Mapper要继承自己的父类,输入数据是KV对的形式,业务逻辑写在map()方法中,输出数据也是KV对的形式。
5、Reducer阶段:用户自定义的Reducer要继承自己的父类,输入数据类型对应Mapper的输出数据类型,也是KV对,业务逻辑写在reduce()方法中。
常用数据序列化类型
Java类型 | Hadoop Writable类型 |
Boolean | BooleanWritable |
Byte | ByteWritable |
Int | IntWritable |
Float | FloatWritable |
Long | LongWritable |
Double | DoubleWritable |
String | Text |
Map | MapWritable |
Array | ArrayWritable |
Null | NullWritable |
FAQs
1、什么是MapReduce的核心思想?
MapReduce的核心思想是将计算程序分为两个阶段:Map(映射)阶段和Reduce(归约)阶段,Map阶段负责将输入数据映射为一组中间键值对,Reduce阶段负责将这些键值对聚合并生成最终的输出结果。
2、MapReduce有哪些优缺点?
优点:易于编程、良好的扩展性、高容错性、适合海量数据离线处理、抽象层级高、并发能力强。
缺点:不擅长实时计算、不擅长流式计算、不擅长DAG计算、数据倾斜问题。
项目 | 描述 |
MapReduce概述 | MapReduce是一种编程模型,用于大规模数据集(大数据)的并行运算,它将计算任务分解为两个主要阶段:Map和Reduce。 |
Map阶段 | 将输入数据集分割成多个小块,并对每个小块应用一个Map函数,将输入数据转换成键值对(keyvalue pairs)。 |
Shuffle and Sort阶段 | 将Map阶段产生的键值对根据键进行排序,并分组,为Reduce阶段做准备。 |
Reduce阶段 | 对每个键及其对应的值进行汇总操作,输出最终结果。 |
MapReduce优势 | 高效处理大规模数据集 可伸缩性好 简单易用 自动并行化 |
MapReduce应用场景 | 大数据搜索 数据挖掘 数据仓库 图处理 |
MapReduce应用开发概述 | |
开发环境 | Hadoop生态系统(Hadoop、HDFS、YARN等) Java、Scala、Python、C++等编程语言 |
开发步骤 | 1. 设计Map和Reduce函数 2. 编写MapReduce程序 3. 配置Hadoop集群 4. 编译和打包程序 5. 运行程序并监控 |
调试与优化 | 使用日志和调试工具 分析MapReduce作业的执行时间和资源使用情况 调整程序参数和集群配置以优化性能 |
数据格式 | 文本文件(如文本、日志等) 序列化文件(如Avro、Parquet等) 自定义数据格式 |
数据存储 | Hadoop分布式文件系统(HDFS) 其他数据存储系统(如HBase、Cassandra等) |
MapReduce应用实例 | 文本分析(如词频统计) 日志分析(如用户行为分析) 机器学习(如聚类、分类) 图处理(如社交网络分析) |
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1190412.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复