考虑到当今大数据时代生成的数据量,分布式机器学习是一项重要技术。 由此引出的问题是,我们应该选择哪个平台来帮助构建分布式机器学习环境? Apache Spark 是近年来非常流行的此类平台之一。
spark
Apache Spark 是一个开源集群计算框架,用于提供闪电般快速的分布式计算。 Apache Spark 可用于配置机器集群,以提供通用分布式计算引擎的方式进行配置,能够处理大量数据。
使用 Spark 时,您的数据集被分区并分布在 Spark 集群中,从而允许集群并行处理数据。 Apache Spark 旨在处理内存中的数据,仅此一点就真正将其与其他分布式计算平台区分开来。 通过存储和处理数据和内存,可以获得巨大的性能提升。 Apache Spark 本身是用 Scala 构建的。
Scala 是一种类型安全的 JVM 语言,它将面向对象和函数式编程结合到一种极其简洁、逻辑性和非凡强大的语言中。 正如我们将在本课程后面看到的,通过一些简单的配置选项,可以在 Amazon EMR 集群之上轻松快速地启动 Apache Spark。 考虑到这一点,您就可以开始明白为什么 EMR 和 Spark 为处理大型数据集提供了一个出色的平台。 Spark 核心是 Apache Spark 技术堆栈的核心。
Spark核心是基础层,提供分布式任务调度、调度和基本IO功能。 Spark 核心通过 API 公开,如下图所示。 API 接口可用于 Scala、Python、Java 和 R。Spark 平台附带用于 SQL、流媒体、机器学习和图形的内置模块。
Apache Spark 使用主从类型基础设施构建。 主节点充当中央控制器和协调器。
当我们启动启用了 Spark 的 EMR 集群时,AWS 会负责 Spark 的安装。 这就是在 EMR 之上运行 Spark 的好处。 Spark 的安装和部署会自动为您完成。 在 EMR 集群上启动 AWS 中托管的 Spark 工作环境非常简单快捷,让您能够将精力集中在数据科学本身上。
不管怎样,我们将快速浏览每个主要组件,以确保您对已部署的 Spark 拓扑有基本的了解。 驱动程序是main方法运行的进程。 首先,它将您的用户程序转换为任务,然后将任务安排在执行器上。 驱动程序与集群管理器通信,将任务分配给执行器。 顾名思义,集群管理器负责管理集群。
Spark 能够与多种集群管理器配合使用,包括 YARN、Mesos 和独立集群管理器。 默认情况下,EMR 将使用 YARN 启动 Spark,作为首选的集群管理器。 工作节点是执行实际工作的机器。 工作节点托管 Spark 执行程序进程。 EMR核心节点相当于Spark工作节点。
执行器是在工作线程中启动的各个 JVM 进程。 执行程序进程负责为特定 Spark 作业运行单个任务。 它们在 Spark 应用程序开始时启动,通常在应用程序的整个生命周期中运行。 任务完成后,执行器将结果发送回驱动器。
执行器还提供本地数据的内存缓存。 任务是驱动程序发送到要启动的执行器 JVM 进程的工作单元。 SparkContext 是 Spark 核心的入口点,对于您希望提交到 Spark 集群中的任何工作,SparkContext 为您提供了 Spark 执行环境的访问点,并充当 Spark 应用程序的控制器。
Apache Spark 有几种不同但相关的数据抽象。 让我们简要介绍一下每种不同的抽象,以及它们的主要优点是什么。 RDD(即弹性分布式数据集)是 Spark 使用且仍在使用的原始数据抽象。 RDD 提供了一个容错的项目集合,可以并行计算。 它是 Spark 的数据集表示,在机器集群上进行分区。
提供了一个 API,使您能够对其进行操作。 RDD 可以通过 JDBC 连接从各种数据格式和源(例如 CSV 文件、JSON 文件和/或数据库)创建。 接下来引入了 DataFrame。 DataFrame 将数据组织成命名列,类似于数据库表。 DataFrames 的一个关键目标是使数据集处理变得简单对于普通用户来说更方便、更容易使用。
我们将利用 Spark DataFrames 访问 CSV 存储的数据。 最后一个抽象,DataSet,建立在 DataFrame 的成功之上,通过提供额外的类型安全、面向对象的编程接口,提供对映射到关系模式的强类型、不可变对象集合的访问。 Spark 具有先进的有向无环图(简称 DAG)。 创建的每个 Spark 作业都会生成一个 DAG。
DAG 表示要在集群上执行的一系列任务阶段。 Spark 创建的 DAG 可以包含任意数量的阶段。 从幻灯片中可以看出,您的 Spark 代码被转换为 DAG,然后将其传递给 DAG 调度程序。 DAG 调度程序将图拆分为任务阶段,并将它们作为任务集分发给集群管理器上的任务调度程序。 最后,各个任务被传递到特定工作节点上指定的执行程序进程。
Spark MLlib
MLlib 是 Apache Spark 的可扩展机器学习库。 Spark MLlib 因其简单性、可扩展性以及与 Spark 生态系统中其他工具的轻松集成而增强了机器学习。 Apache Spark 附带一个本机机器学习库 MLlib,该库旨在实现简单性、可扩展性以及与其他 Spark 工具的轻松集成。
凭借 Spark 的可扩展性、语言兼容性和速度,数据科学家可以更快地解决和迭代 3D 数据问题。 Spark MLlib 可用于许多常见的业务用例,并可应用于许多数据集以执行特征提取、转换、分类、回归和聚类等操作。
MLlib 擅长的一些示例业务用例包括广告和营销优化、异常和欺诈检测、推荐系统。 Spark MLlib 实现了许多常见的机器学习算法。 根据您的问题类型,无论是二元分类、多类分类还是回归,都可以利用此处显示的任何支持的算法。
决策树能够处理数值数据和分类数据。 决策树只需要很少或最少的数据准备。 最后,决策树在处理非常大的数据集时表现良好。
EMR
除了在 EMR 之上运行购买 barc 之外,您还可以运行其他流行的分布式框架,例如 H-base、Presto 和 Flink。 Amazon EMR 可用于执行:日志分析、Web 索引、ETL、财务预测、生物信息学以及我们已经提到的机器学习。 Amazon EMR 与 Spark 一起简化了集群和分布式作业管理的任务。
当您启动 EMR 集群时,您需要定义计算资源并将其分配给三个不同的节点:Master、Core 和 Task。
现在让我们逐一讨论一下。 主节点。 每个 EMR 集群将只有一个主节点。 主节点管理集群。 该节点协调作业和数据到核心节点和任务节点的分配。 主节点运行主要的 Hadoop 守护进程,例如名称节点、作业触发器和资源管理器。
核心节点。 作业任务在一组核心节点上执行。 数据使用 Hadoop 分布式文件系统 HDFS 存储。 核心节点运行数据节点和任务跟踪器恶魔。 任务节点。 任务节点是可选的。 他们还可以运行任务。 任务节点仅运行任务跟踪器恶魔。 设计和操作 EMR 集群时真正有用的功能之一是能够调整其大小。
您可以自动或手动调整可用于 EMR 集群的 Amazon EC2 实例数量,以响应具有不同需求的工作负载。 这使您可以确保集群在成本和性能方面始终以最佳状态运行。 在电子邮件集群上运行的 Spark 可以连接到多个数据存储位置。
有各种连接器可以提供这种灵活性,例如:通过 EMR DynamoDB 连接器的 DynamoDB、通过 JDBC 连接的后续数据库和/或通过 EMR 文件系统的 S3。