MapReduce是一种分布式计算框架,由Google开发,专为处理和分析大规模数据集设计。它将大型任务分解为小型子任务,能在多台机器上并行处理并合并结果,提升计算效率。在本次MapReduce数据分析实战中,我们将深入学习如何使用MapReduce处理数据,特别是日志数据的分析。
Map阶段
Map阶段是数据处理的第一步。在示例代码中,map.py
读取输入数据(即日志文件)并进行预处理。日志格式包含UUID(全局唯一标识符),用分隔符分隔。map.py
通过遍历标准输入获取数据,去除首尾特定字符(如),并添加额外字段(如
't1'
)作为值。这一过程生成“键值对”,是MapReduce的核心概念,将原始数据转化为可处理的格式。
Reduce阶段
Reduce阶段在red.py中完成。
- 去重计数示例(distinct--red):此脚本用于计算唯一UUID,维护一个字典(res),键为UUID,值为出现次数。遇到新UUID则添加并设置计数为1,重复UUID则忽略,实现UUID的去重计数。
- 分组统计示例:另一个red.py(group by)示例展示了基于字段(如日期stat_date、版本version、IPip)分组日志条目。脚本按行提取字段并更新计数,跟踪上一次的组别。若当前组别不同,则增加计数,从而实现按日期、版本、IP分组统计。
运行MapReduce任务
在实际运行中,将本地Python脚本上传到Hadoop集群,通过hadoop fs -copyFromLocal
复制测试日志文件到HDFS。接着,通过hadoop jar
命令启动streaming作业,指定mapper和reducer的Python脚本路径、输入输出文件夹及格式等。在集群上运行时,Hadoop自动管理数据分区、容错与负载均衡,实现任务高效可靠地完成。这种分布式处理能力使MapReduce成为处理海量数据的利器。