作为一名整天与代码打交道的码农,你肯定免不了会接触,甚至频繁处理各类数据吧。尤其是在互联网技术快速发展的今天,我们每个人每天所遇到的数据,无论体量、增速和类型都在不断增加,那么问题来了:如何管理并理解这些「大数据」,进而从中获得最大化价值?
考虑到企业内部的各种数据孤岛,持续产生各种格式的数据和不断变化的技术环境,这些因素使得收集、存储、分享,以及对数据进行分析和可视化变得困难重重。面对这种情况,我们又该如何构建稳健的数据管道,连接至数据仓储,并为数据科学家与工程师们获取有关数据见解提供所需平台?
为了满足这种需求,很多组织已经开始投资中心化的数据仓储,并逐渐意识到使用 Amazon Simple Storage Service(S3)作为数据湖的优点。然而要为数据湖构建数据管道,不可避免会涉及到数据发现过程,其中包括识别数据格式和结构,对数据编订目录,以及理解元数据以构建表定义,提供数据查询等。
本文将引导大家完成构建数据管道所需的全部步骤:从使用 AWS Glue 为 Amazon S3 中存储的数据创建元数据爬取程序,进行数据发现与编目;到使用 Amazon Athena 检索表数据,以及最后通过 Amazon SageMaker Notebooks 查询 Athena 表。
这其中的重点在于 Amazon SageMaker,这是一个端到端机器学习(ML)平台,我们可以借此构建、训练与部署机器学习模型。这项高度模块化的服务让我们可以单独使用其中的每个组件。使用 Amazon SageMaker 笔记本模块能够提升与数据交互的效率,而不会因为需要将数据下载到本地而产生延迟。
下文将展示如何使用 Amazon SageMaker 的 Jupyter 笔记本组件集成 Athena,并进行数据处理。本文示例中使用来自 Airline On-Time Performance 的2008年数据集。此数据集包含了从1987年10月到2008年4月间美国境内所有商业航班的抵达与出发详细信息。我们会上传该数据到 Amazon S3,以供 AWS Glue 和 Athena,以及随后的 Amazon SageMaker 使用。
使用 AWS Glue 发现数据
AWS Glue 的数据目录功能和内置的 Amazon S3 集成简化了识别数据与数据结构定义自动获取。在数据目录中使用 AWS Glue Crawler 程序,我们可以遍历存储在 Amazon S3 的数据,并在数据目录中自动创建和维护数据字典。
编制数据目录的第一步是定义数据库:
1.在AWS Glue控制台中选择添加数据库,填入数据库名称并选择「创建」。
2.随后创建一个 AWS Glue 元数据爬取程序以添加表到数据库。Crawler 程序会爬取 Amazon S3 中的数据,并添加表定义到数据库。
3.选择一个数据存储。数据源可基于 S3、JDBC 和 DynamoDB 等,填入对应的数据源 URL,然后选择下一步。
4.针对 IAM 角色,我们需要创建一个新角色,它用于为 AWS Glue 提供访问 Amazon S3 中文件或其他数据源的权限,并且具有对数据进行解密的权限。
5.选择下一步,设置运行频率为「按需运行」。
6.随后选择我们在第一步中创建的数据库作为元数据资料库。
7.检查步骤,然后选择完成。Crawler 程序已准备就绪,可以运行了。选择立即运行。这将会为我们在 Amazon S3 中的数据创建表定义。
使用 Athena 查询 Amazon S3 数据
Athena 可以让我们使用标准 SQL 接口查询 Amazon S3 内的数据。通过使用 AWS Glue 数据目录,我们可以创建交互式查询以及执行后续业务所需的任何数据操作。Amazon Athena 控制台会自动反映 AWS Glue 目录中的数据库和表。只需登录到 AWS 管理控制台,导航到 Amazon Athena 控制台,就可以在查询编辑器中看到之前创建的数据库和表。
请确保选择右上角的设置按钮并留意转储位置。Amazon Athena 会在转储的 S3 桶中保存查询结果,以便 Amazon SageMaker 在后续步骤中查询 Athena 时使用。
使用 Amazon SageMaker 进行数据分析与管理
在此数据管道中的最后一步是,使这些表定义可用于 Amazon SageMaker 中的 Jupyter 笔记本实例。Jupyter 笔记本被数据科学家普遍用于对数据进行可视化、开展统计分析、执行数据操作,以及使数据随时可被用于机器学习。
1.在 Amazon SageMaker 控制台中,选择创建笔记本实例。
2.在笔记本实例设置下方填充笔记本实例名称,为 Amazon SageMaker 中的笔记本实例选择实例类型和 IAM 角色,以便与 Amazon S3 进行交互。SageMaker 执行角色需要有对 Athena,数据所在的 S3 存储桶以及 KMS(若已加密)进行操作的必要权限。
3.在创建笔记本实例和将状态更改为 InService 时耐心等待。
4.选择打开链接,此操作将在单独的浏览器窗口打开笔记本界面。
5.单击新建,以便在 Jupyter 中创建新的笔记本。Amazon SageMaker 为 Jupyter 提供了多个内核,包括支持 Python 2 和3、MXNet、TensorFlow 和 PySpark 的内核。选择 Python 作为此练习的内核,它有内置的 Pandas 库。在笔记本内,执行以下命令以安装 Athena JDBC 驱动程序。PyAthena 是适用于 Amazon Athena JDBC 驱动程序的 Python DB API 2.0 (PEP 249)合规客户端。
import sys
!{sys.executable} -m pip install PyAthena
6.在安装 Athena 驱动程序以后,我们就可以使用 JDBC 连接以连接至 Athena 并生成 Pandas 数据框。数据科学家对数据的操作通常可被分为多个阶段:修整与清洗数据、对其分析和建模、然后将分析结果整理到适合图表展示的格式。Pandas 是适用于所有这些任务的理想工具。
from pyathena import connect
import pandas as pd
conn = connect(s3_staging_dir='',
region_name='')
df = pd.read_sql("SELECT * FROM athenaquery. limit 8;", conn)
df
结论
本文中描述的解决方案提供了一种对传入数据存储的数据进行编目的自动化方式,并提供了数据操作和分析能力。此外,此场景为特征工程、构建、训练和评价更多机器学习模型奠定了基础,从而深入洞察数据并产出更有价值的业务成果。