MapReduce与Spark | 青训营

56 阅读2分钟

引言

随着互联网的爆炸性增长,传统的关系数据库系统在处理大规模数据时遇到了瓶颈。本文将重点介绍两种解决这一问题的并行数据库技术:MapReduce和Spark。

MapReduce:Google的数据处理模型

分布式文件系统(DFS)

Google工程师设计了一种分布式文件系统(DFS),用于存储和管理大量的数据。在这个系统中,大文件被分割成小块(通常为64MB)并在多台机器上复制和存储。

Map和Reduce

MapReduce是一种高级编程模型,用于大规模并行数据处理。它由两个主要阶段组成:Map和Reduce。用户只需定义Map和Reduce任务,MapReduce会自动处理并行任务的分配和管理。

数据模型和编程

MapReduce的数据模型基于“袋子”(bags),包含键值对。用户需要提供两个无状态函数来定义如何将输入对转换为输出对。

例子:单词计数

Map函数为每个文档中出现的每个单词发出一个中间对(word, 1)。Reduce函数则对每个单词的出现次数进行求和。

Spark:更高效的数据处理

动机和历史

Spark是为了解决MapReduce的一些局限性而开发的,例如严格的结构、复杂查询的困难和中间结果写入磁盘的低效。

弹性分布式数据集(RDD)

Spark的数据模型是基于RDD(Resilient Distributed Datasets),这些数据集存储在主内存中,以提高执行速度。

编程模型

Spark程序由两种操作符组成:转换(transformations)和动作(actions)。转换是延迟评估的,而动作是立即执行的。

例子:日志过滤

Spark代码示例,用于过滤出以“NullPointerException”开头并包含“SQLite”的日志行。

持久性

Spark允许在代码中的特定点进行持久化(或物化),以便在服务器失败时可以从这些点重新开始。

总结

MapReduce和Spark都是为了解决大规模并行数据处理而设计的。MapReduce是第一个这样的模型,但由于其一些局限性,Spark应运而生,提供了更多的灵活性和效率。Spark更接近于关系代数,允许持久化,并引入了新的数据模型,如DataFrames和Datasets,更好地模拟了关系数据模型。