简介
了解 Spark 这一广泛使用且统一的大数据处理平台的发展历程与历史背景。
Spark 入门
Spark 已成为数据处理的通用平台,并取代了传统的 MapReduce 框架。事实上,一些技术专家甚至宣称 MapReduce 已经“死亡”。在众多基准测试和性能研究中,Spark 的表现比 MapReduce 高出数个数量级。以下是 Spark 在大数据领域占据主导地位的历史背景。
历史
大数据运动真正兴起始于谷歌希望索引整个万维网,并实现用户以闪电般的速度进行搜索的雄心。其成果包括:
- Google 文件系统(GFS):一种运行在廉价通用硬件集群上的容错分布式文件系统。
- Bigtable:基于 GFS 构建的可扩展结构化数据存储系统。
- MapReduce:一种新的并行编程范式,用于处理分布在 GFS 和 Bigtable 上的海量数据。
尽管谷歌的这些工作是专有的,但相关论文启发了 Yahoo 工程师开发出 Hadoop——一个开源的、实现谷歌理念的项目。Hadoop 项目后来捐赠给了 Apache 基金会。虽然 MapReduce 在批处理场景下表现良好,但它使用起来复杂、学习曲线陡峭,且执行时间过长。MapReduce 的主要缺陷在于它将中间结果写入磁盘,这显著拖慢了整体计算效率。例如,当第一个 MapReduce 作业的输出被用作第二个作业的输入时,第一个作业完成时会将结果写入磁盘,第二个作业又必须从磁盘重新读取数据。这种磁盘 I/O 显著降低了整体工作流的效率。
MapReduce 的这些不足之处很快引起了关注。Spark 项目于 2009 年由加州大学伯克利分校启动,次年发表了相关研究成果论文。随后,同一团队创立了公司 Databricks,专注于基于 Spark 的机器学习与数据分析解决方案。如今,Spark 已成为处理各类数据任务的事实标准平台,涵盖批处理、交互式即席查询分析等多种场景。Scala 是 Spark 的默认语言,但 Spark 同样支持 Python、Java 和 R。
与 MapReduce 的区别
那么,Spark 到底在哪些方面优于 MapReduce,使得大数据社区最终放弃了 MapReduce?我们通过以下几个典型场景来说明:
迭代型任务:某些机器学习算法需要对数据集进行多次遍历才能得出结果。每次遍历都可以表示为一个独立的 MapReduce 作业。然而,每个作业都需要从磁盘读取输入数据,并将输出写入磁盘供下一个作业使用。当涉及磁盘 I/O 时,作业执行时间大幅增加;如果数据能直接从主内存访问,则效率将高得多。
交互式分析:用户可以使用 Hive 或 Pig 等工具对大规模数据集运行即席 SQL 查询。如果用户针对同一数据集连续发出多个查询,每个查询在底层可能都对应一个 MapReduce 作业,重复从磁盘读取相同数据并进行处理。多个 MapReduce 作业反复读取同一数据集,不仅低效,还显著增加了查询延迟。
丰富的 API:Spark 提供了多种功能强大的 API,能够以极简的方式表达原本需要数十行 MapReduce 代码才能实现的操作。相比 MapReduce,使用 Spark 的开发体验更加简洁高效。
上述前两个场景正是原始 Spark 论文中明确指出的推动设计新型数据并行处理框架的核心动因。Spark 保留了 MapReduce 的诸多优点,如容错能力、位置感知调度和负载均衡,同时通过将数据缓存在集群内存中实现高效复用,避免了昂贵的磁盘往返操作。由于内存访问速度远高于磁盘访问,这也是 Spark 相较于 MapReduce 具有显著优势的根本原因。
Spark 的典型应用场景
Spark 的主要应用包括:
- 在集群上对大规模数据集进行并行处理。
- 分析大规模数据集及社交网络。
- 构建、训练和评估机器学习模型。
- 从多种数据源构建数据流水线。