Spark快速大数据分析(第2版)
上QQ阅读APP看书,第一时间看更新

1.4.1 哪些人用Spark,用它做什么

毫不意外,绝大多数和大数据打交道的开发人员要么是数据工程师,要么是数据科学家,要么是机器学习工程师。对这些人来说,Spark 的吸引力在于允许使用者通过自己熟悉的编程语言以一套引擎构建各种应用。

当然,开发人员可以有多种身份,尤其是在创业公司或较小的工程组中,有时候一个人就要搞定数据科学和数据工程的活儿。不过,这些任务的核心都在于数据,而且是海量的数据。

  1. 数据科学任务

    作为大数据时代火起来的一门学科,数据科学要用数据来讲故事。但在数据能讲故事之前,数据科学家必须先清洗数据、探索数据,以发现潜在的模式,然后构建出模型,从而对结果进行预测或建议。其中一些任务需要具有统计学、数学、计算机科学和编程方面的知识背景。

    大多数数据科学家能熟练运用 SQL 这样的分析工具,擅长使用 NumPy 和 Pandas 这样的库,熟悉 R 和 Python 这些编程语言。但他们还需要了解如何处理转化数据,以及如何使用现成的分类算法、回归算法、聚类算法来构建模型。这些任务经常是迭代的、交互式的、临时性的,又或是实验性的(用于证明假想)。

    好在 Spark 能支持这些不同类型的工具。Spark 的 MLlib 提供了一些常见的机器学习算法,以使用高层的评估器、转化器、数据特征提取器来构建模型流水线。Spark SQL 和 Spark shell 则有助于对数据进行临时的交互式探索。

    另外,Spark 让数据科学家能够处理大规模数据集,并让其模型训练和评估能够扩展到更大的数据规模上。Spark 2.4 引入了全新的帮派调度器(gang scheduler,作为 Hydrogen 项目的一部分引入),以适应分布式场景中的深度学习模型训练和调度的容错需求。Spark 3.0 引入了在独立集群、YARN、Kubernetes 集群环境下管理 GPU 资源的能力。这意味着开发人员可以将 Spark 用于需要深度学习技术的任务。

  2. 数据工程任务

    构建出模型之后,数据科学家常常需要与负责部署模型的其他团队成员合作来完成模型上线。另一种情况是,数据科学家需要和其他人紧密合作,从而将原始的“脏”数据转化为其他数据科学家比较容易处理或使用的“干净”数据,并搭建出相应的流程。比如,分类模型或者聚类模型无法独立存在,需要和 Web 应用或 Apache Kafka 这样的流式数据引擎协作,或者作为复杂的数据流水线的一个环节。这样的数据流水线通常由数据工程师搭建。

    数据工程师对软件工程原理和方法学有着深刻的理解,具有为具体业务用例构建可伸缩数据流水线的能力。数据流水线允许对来自各种数据源的原始数据进行转化和清洗,将其存储到云、NoSQL 数据库,或者关系数据库中,供下游开发人员拿来生成报表,或者允许数据分析师在商业智能工具中进行访问,从而打通了端到端的转化过程。

    Spark 2.x 引入了革命性的流处理模型——连续流应用(第 8 章会详细介绍)。有了结构化流处理 API,数据工程师可以构建同时从实时数据和静态数据进行提取 - 转化 - 加载(ETL)操作的复杂数据流水线。

    数据工程师使用 Spark 的原因是,Spark 允许他们用很简单的方式将计算并行化,而无须操心分布式计算和容错这些复杂的问题。这让数据工程师可以放心地将精力集中于使用高层的 DataFrame API 和领域专用语言(DSL)的查询,从而进行 ETL,以便从多种数据源读取和整合数据。

    Spark 2.x 和 Spark 3.0 因 SQL 的 Catalyst 优化器和用于生成紧凑代码的 Tungsten 引擎带来了性能提升,这大大简化了数据工程师的工作。他们可以选择 Spark 的 3 种 API(RDD、DataFrame、Dataset)中满足手头任务需求的任意一种,从而充分利用 Spark。

  3. Spark 的常见使用场景

    不论是数据工程师、数据科学家,还是机器学习工程师,都可以在下列使用场景中用上 Spark。

    • 并行处理分布在集群中的大规模数据集。
    • 执行交互式查询语句来探索数据集并进行数据集可视化。
    • 使用 MLlib 构建、训练,以及评估机器学习模型。
    • 使用各种数据流实现端到端的数据流水线。
    • 分析图数据和社交网络。