亚马逊AWS官方博客

全新功能——适用于 Apache Spark 的 Amazon Athena



杰夫·巴尔在 2016 年首次发布 Amazon Athena,它改变了我对与数据交互的看法。采用 Amazon Athena,只需几个步骤即可与数据进行交互——我可以在 Athena 中创建表、使用连接器加载数据,还可以使用 ANSI SQL 标准进行查询。

随着时间的推移,金融服务、医疗保健和零售等各行各业都需要对各种格式和大小的数据进行更为复杂的分析。为了便于进行复杂的数据分析,各个企业都采用了 Apache Spark。Apache Spark 是一种流行的开源分布式处理系统,旨在为任何规模的数据运行快速分析工作负载。

但是,构建用于交互式应用程序运行 Apache Spark 的基础架构并非易事。客户需要在应用程序上提供、配置并维护基础架构。更不用说还要执行最优化的调整资源来避免应用程序启动缓慢和闲置成本带来的困扰。

适用于 Apache Spark 的 Amazon Athena 简介
今天,我很高兴宣布推出适用于 Apache Spark 的 Amazon Athena。借助这一功能,我们可以运行 Apache Spark 工作负载,将 Jupyter Notebook 作为在 Athena 上执行数据处理的接口,并运用 Athena API 以编程方式与 Spark 应用程序进行交互。我们可以在不到一秒钟的时间内启动 Apache Spark,无需手动配置基础架构。

下面是快速预览:

快速预览适用于 Apache Spark 的 Amazon Athena

工作原理
由于适用于 Apache Spark 的 Amazon Athena 采用无服务器运行,这有利于客户进行交互式数据探索获得见解,而无需预置和维护运行 Apache Spark 的资源。借助此功能,客户现在可以直接在 Athena 控制台使用笔记本体验构建 Apache Spark 应用程序,也可以使用 API 以编程方式构建 Apache Spark 应用程序。

下图说明了此功能的工作原理:

适用于 Apache Spark 的 Amazon Athena 的工作原理

在 Athena 控制台上,现在可以使用 Jupyter notebook 运行笔记本电脑并通过 Python 运行 Spark 应用程序。在该 Jupyter notebook 中,客户可以查询各种来源的数据,并使用 Spark 应用程序执行多次计算和数据可视化,而无需切换上下文。

Amazon Athena 与 AWS Glue Data Catalog 集成,可帮助客户使用在 AWS Glue Data Catalog 中的任何数据来源,包括 Amazon S3 中的数据。这样,客户可以构建应用程序,分析和可视化数据来探索数据,为机器学习管道准备数据集。

正如在预览部分演示的那样,运行 Apache Spark 引擎的工作组的初始化需要不到一秒钟的时间来运行交互式工作负载的资源。为了实现这一目标,适用于 Apache Spark 的 Amazon Athena 使用了轻量级的微型虚拟机 Firecracker,这有助于实现即时启动,无需维护预热资源池。这有助于客户进行交互式数据探索获得见解,而无需为运行 Apache Spark 准备资源。

开始使用适用于 Apache Spark 的 Amazon Athena
让我们看看如何使用适用于 Apache Spark 的 Amazon Athena。在这篇文章中,我会逐步讲解如何使用这一功能。

第一步是创建工作组。在 Athena 环境中,工作组帮助我们在用户和应用程序之间分离工作负载。

要创建工作组,请在 Athena 控制面板中选择创建工作组

选择创建工作组

在下一页上,我会给出这个工作组的名称和描述。

创建一个工作组

在同一个页面上,我可以选择 Apache Spark 作为 Athena 的引擎。此外,我还需要指定一个具有适当权限的服务角色,在 Jupyter notebook 中使用。然后,我选中打开示例笔记本,这样我就可以在 Athena 中轻松使用 Apache Spark 了。我还可以选择加密由 Athena 管理的 Jupyter notebook,或者使用在 AWS Key Management Service (AWS KMS) 中配置的密钥。

之后,我需要定义一个 Amazon Simple Storage Service (Amazon S3) 存储桶来存储来自 Jupyter notebook 的计算结果。一旦确定了这个工作组的所有配置,我只需要选择创建工作组

配置计算结果设置

现在,我可以看到已经在 Athena 中创建了工作组。

选择新建的工作组

要查看该工作组的详细信息,我可以从工作组中选择链接。由于在创建这个工作组时还选中了打开示例笔记本,所以我可以使用 Jupyter notebook 帮助我开始操作。采用 Amazon Athena,我可以灵活地导入现有笔记本,这些笔记本可以通过导入文件从笔记本电脑上传,或者选择创建笔记本从头开始创建新笔记本。

可在工作组中找到示例笔记本

选择 Jupyter notebook 示例后,便可以开始构建我的 Apache Spark 应用程序了。

运行 Jupyter notebook 时,会自动在工作组中创建会话。随后,每次我在 Jupyter notebook 中运行计算时,所有结果都会记录在会话中。这样,通过选择计算 ID,Athena 可以为我提供查看每次计算的完整信息,这会将我带到计算详细信息页面。在这里,我可以查看代码和计算结果

查看代码和计算结果

在会话中,我可以调整协调器大小执行器大小,默认为 1 个数据处理单元 (DPU)。一个 DPU 由 4 个 vCPU 和 16 GB 内存组成。如果有复杂计算,改用更大的 DPU 可以更快地处理任务。

配置会话参数

编程 API 访问权限
除了使用 Athena 控制台外,我还可以使用编程访问权限与 Athena 中的 Spark 应用程序进行交互。例如,我可以使用 create-work-group 命令创建工作组,使用 create-notebook 启用笔记本,然后使用 start-session 运行笔记本会话。

如果需要在不打开 Jupyter notebook 的情况下执行生成报告或计算数据之类的命令,使用编程访问权限很有用。

使用之前创建的 Jupyter notebook,我可以通过使用 AWS CLI 运行以下命令来启动会话:

$> aws athena start-session \
    --work-group <WORKGROUP_NAME>\
    --engine-configuration '{"CoordinatorDpuSize": 1, "MaxConcurrentDpus":20, "DefaultExecutorDpuSize": 1, "AdditionalConfigs":{"NotebookId":"<NOTEBOOK_ID>"}}'
    --notebook-version "Jupyter 1"
    --description "Starting session from CLI"

{
    "SessionId":"<SESSION_ID>",
    "State":"CREATED"
}

然后,我可以使用 start-calculation-execution API 来运行计算。

$ aws athena start-calculation-execution \
    --session-id "<SESSION_ID>"
    --description "Demo"
    --code-block "print(5+6)"

{
    "CalculationExecutionId":"<CALCULATION_EXECUTION_ID>",
    "State":"CREATING"
}

除了使用带有 --code-block 标志的内联代码外,我还可以使用以下命令传递来自 Python 文件的输入:

$ aws athena start-calculation-execution \
    --session-id "<SESSION_ID>"
    --description "Demo"
    --code-block file://<PYTHON FILE>

{
    "CalculationExecutionId":"<CALCULATION_EXECUTION_ID>",
    "State":"CREATING"
}

定价和可用性
适用于 Apache Spark 的 Amazon Athena 现已在以下 AWS 区域上市:美国东部(俄亥俄州)、美国东部(弗吉尼亚州北部)、美国西部(俄勒冈州)、亚太地区(东京)和欧洲地区(爱尔兰)。要使用此功能,您需要按小时支付根据数据处理单元或 DPU 定义的计算使用量而计算的费用。有关更多信息,请参阅此处的定价页

要开始使用此功能,请参阅适用于 Apache Spark 的 Amazon Athena,从文档中获取更多信息、了解定价并按照分步演练进行操作。

祝大家构建顺利。

Donnie