
本文共 1397 字,大约阅读时间需要 4 分钟。
MapReduce的运行流程
MapReduce是一种并行计算模型,广泛应用于大数据处理领域。其运行流程可分为三个主要阶段:Map(映射)、Shuffle(洗牌)、Reduce(归并)。
Map阶段
-
启动:MapReduce程序启动后,首先启动MRAppMaster(掌管器)。
-
切片分配:MRAppMaster根据Job的描述信息计算所需的maptask实例数量(切片),并向集群申请相应数量的maptask进程。
Maptask执行
-
数据读取:-maptask进程获取inputformat指定的RecordReader,读取数据并形成键值对(KV对)。
-
逻辑处理:传递给map()方法处理,生成新的KV对存储到缓存中。
-
输出结果:缓存中的KV对按键分区排序后,溢写到磁盘文件。
Shuffle阶段
-
数据的洗牌是MapReduce的核心机制。
-
分区排序:Maptask输出的数据按键分区并排序。
-
数据分发:Reducetask根据分区号获取相应数据并进行归并排序。
Reduce阶段
-
界面管理:MRAppMaster启动reducetask进程,并告知处理数据范围。
-
数据处理:读取多个maptask输出结果文件,进行归并排序后调用reduce()方法计算结果。
-
输出结果:将处理后的结果通过outputformat输出到外部存储。
MapReduce的Shuffle机制
Shuffle机制确保数据从map阶段流入reduce阶段的效率。
- 数据收集与流出:maptask持续收集并溢写到本地磁盘。
- 合并与分区:多个溢出文件合并成大文件,同时进行分区和排序。
- 分区分发:Reducetask根据分区号收集数据并进行归并排序。
Shuffle的缓冲区大小影响性能,io.sort.mb默认为100M,可调整以优化性能。
MapReduce与YARN
YARN是Hadoop的资源调度平台:
- 资源调度:YARN不管理用户程序运行机制,而是为程序分配资源。
- 角色分工:
- ResourceManager:负责全集群资源管理。
- NodeManager:管理集群节点资源。
YARN支持多种分布式计算框架,包括MapReduce、Spark等,实现资源共享提升利用率。
实践案例1:流量统计
目标:统计每个手机号的上行、下行及总流量。
-
数据格式:一列用户数据,每列包含手机号、上行流量、下行流量。
-
流程:
- map():解析数据,提取手机号及其流量,写入FlowBean。
- reduce():按手机号汇总流量。
-
序列化接口:FlowBean实现Writable接口,定义序列化方法。
-
Partitioner定制:按号码归属地分区,调整reduce任务数和分区器实现。
Partitioner扩展
实现根据号码归属地分区:
- 自定义Partitioner类,构建映射关系。
- getPartition方法根据号码前三位获取分区。 -.AutoScaleDimensions确保数据分布均匀。
实践案例2:流量排序
修改:
- FlowBean:实现WritableComparable,定义compareTo方法按总流量排序。
- Partitioner:根据流量大小分区。
总结
MapReduce通过三个阶段完成并行计算,Shuffle机制确保数据高效排序,YARN实现资源调度。通过实践案例认知其灵活性和扩展性。
发表评论
最新留言
关于作者
