对大数据分析感兴趣的朋友需要掌握许多大数据开发的知识与技能。本文将介绍大数据中的MapReduce技术。
为什么要使用MapReduce?因为它能够“化繁为简”,把处理大数据的复杂任务拆分成多个简单的子任务。“简单”意味着计算规模缩小,数据在就近节点进行处理,并且可以并行执行。
简要版流程如下:
输入文件 ->【Map任务】分割 --> 映射 --> 分区 --> 排序 --> 合并(暂存于内存缓冲区)~~~ 溢写(由独立线程写入磁盘)--> 合并 --> 输出Map阶段的结果 ~~~ 【Reduce任务】复制 --> 合并 --> Reduce处理 --> 输出最终文件
多个Map任务同时启动,分别处理各自的数据片段。
分区:
作用是将Map阶段的输出分配给对应的Reducer,分区的数量等于Reducer的数量。默认采用哈希分区算法。随后,数据会被写入内存缓冲区。
溢写:
当内存缓冲区中的数据达到一定比例(默认为80%),会触发溢写操作。此时,系统会锁定这部分数据,并将其写入本地磁盘,形成临时文件。这个过程由单独的线程控制,与写入内存缓冲区的操作同步进行。
排序与合并:
在数据溢写到磁盘前,会对这80%的数据按分区和键进行排序。如果设置了Combine操作,则在此基础上进一步合并相同键的数据,最终形成一个溢写文件。
合并:
将多个溢写文件通过多路归并排序合并成一个文件,这是Map阶段的最终输出。同时还会生成一个索引文件(file.out.index),记录每个分区的起始位置和长度。
Reduce阶段:
复制:多线程并发地从各个Mapper处获取属于当前Reducer的数据块,并存储在内存缓冲区中。当内存使用率超过阈值时,数据会被写入磁盘。
合并:持续进行,因为不同Mapper的输入文件可能未排序,所以在写入磁盘前需要进行合并操作,直到没有新的Map端数据被写入为止。最后启动合并操作,对所有磁盘上的数据进行排序,形成最终文件作为Reducer的输入文件,至此Shuffle阶段结束。
Reduce:类似于Combine,都是为了合并相同的键并计算结果,最终将结果写入HDFS。
总之,对于MapReduce的理解大致如上所述。学习大数据并非一日之功,对于有兴趣进行大数据分析的朋友,建议选择专业的培训机构进行系统学习,这样才能确保掌握实用的技术。这里推荐一家专业的培训机构——扣丁学堂,它不仅拥有资深的讲师和丰富的课程资源,还提供大量可供学员自学的大数据视频教程。