Amazon SageMaker notebooks 现已开箱即用反对 R,且无需在实例上手动装置 R 内核。此外,这些 notebooks 还预装了 reticulate 库,由其为 Amazon SageMaker Python SDK 提供 R 接口,并容许咱们从 R 脚本当中调用 Python 模块。大家能够应用 Amazon SageMaker R 内核轻松拜访多个数据源,运行机器学习(ML)模型。目前,所有提供 Amazon SageMaker 服务的区域都已默认提供 R 内核。
R 是一种专为统计分析构建而成的编程语言,目前在数据科学界具备极高人气。在本文中,咱们将一起理解如何应用 Java 数据库连贯(JDBC)从 Amazon SageMaker R 内核接入以下数据源:
- Apache Hive on Amazon EMR
- Presto on Amazon EMR
- Amazon Athena
- Amazon Redshift
- Amazon Aurora MySQL
对于通过 R 应用 Amazon SageMaker 性能的更多详细信息,请参阅面向 Amazon SageMaker 的 R 用户指南。
解决方案概述
构建这套解决方案,咱们首先须要创立一个蕴含公共与公有子网的 VPC,借此保障隔离网络内的各不同资源与数据源可能实现平安通信。接下来,咱们应用必要配置在自定义 VPC 与 notebook 实例中创立数据源,并应用 R 拜访各数据源。
为了确保数据源不裸露在公开互联网之下,咱们须要保障各数据源齐全驻留在 VPC 的公有子网当中。这里咱们须要创立以下资源:
- 在公有子网内创立一套 Amazon EMR 集群,同时装置 Hive 与 Presto。对于具体操作阐明,请参阅即刻开始:应用 Amazon EMR 剖析大数据
- Athena 资源。对于具体操作阐明,请参阅入门指南。
- 在公有子网内创立一套 Amazon Redshift 集群。对于具体操作阐明,请参阅创立一套示例 Amazon Redshift 集群。
- 在公有子网内创立一套 MySQL 兼容型 Amazon Aurora 集群。对于具体操作阐明,请参阅创立一套 Amazon Aurora DB 集群。
应用 Amazon Systems Manager Session Manager 连贯公有子网内的 Amazon EMR 集群,而后创立 Hive 表。
要在 Amazon SageMaker 中应用 R 内核运行代码,大家还须要创立一个 Amazon SageMaker notebook。请留神下载用于数据源的 JDBC 驱动程序。为蕴含 R 软件包装置脚本的 notebook 配置生命周期,并在创立及启动时将该生命周期配置附加至 notebook 以保障装置顺利完成。
最初,咱们能够应用亚马逊云科技治理控制台导航至 notebook,应用 R 内核运行代码并拜访来自各个数据源。咱们能够通过 GitHub repo 获取这套残缺的解决方案。
解决方案架构
以下架构图展现了如何与各个数据源建设起连贯,应用 Amazon SageMaker 通过 R 内核运行代码。大家也能够应用 Amazon Redshift 查问编辑器或者 Amazon Athena 查问编辑器以创立数据资源。咱们还须要应用 Amazon Systems Manager 中的会话管理器(Session Manager)通过 SSH 接入 Amazon EMR 集群以创立 Hive 资源。
启动 Amazon CloudFormation 模板
要主动创立资源,咱们能够运行一套 Amazon CloudFormation 模板。该模板将帮忙咱们指定须要主动创立的 Amazon EMR 集群、Amazon Redshift 集群或者兼容 MySQL 的 Amazon Aurora 集群,而不用手动执行各个步骤。只须要几分钟,全副资源即可创立结束。
- 抉择以下链接即可启动 CloudFormation 栈。该栈将创立施行本次解决方案的全副必要资源:
- 在 Create stack 页面上,抉择Next。
- 输出栈名称。
- 咱们能够对以下栈细节的默认值做出调整:
栈细节 | 默认值 |
---|---|
抉择 B 类网络地址作为 VPC IP 地址 (10.xxx.0.0/16) s | 0 |
SageMaker Jupyter Notebook 实例类型 | ml.t2.medium |
是否主动创立 EMR 集群? | “Yes” |
是否主动创立 Redshift 集群? | “Yes” |
是否主动创立 Aurora MySQL DB 集群? | “Yes” |
- 抉择Next。
- 在 Configure stack options页面上,抉择Next。
- 抉择I acknowledge that Amazon CloudFormation might create IAM resources(我确认 Amazon CloudFormation 能够创立 IAM 资源)。
- 抉择Create stack。
当初,咱们能够看到正在创立的栈,详见以下截屏。
在栈创立结束之后,状态将显示为 CREATE_COMPLETE。
- 在 Outputs 选项卡中,记录各键及其对应的值。
在本文中,咱们将陆续应用到以下键: - AuroraClusterDBName – Aurora 集群数据库名称
- AuroraClusterEndpointWithPort – Aurora 集群端点地址与端口号
- AuroraClusterSecret – Aurora 集群凭证 secret ARN
- EMRClusterDNSAddress – EMR 集群 DNS 名称
- EMRMasterInstanceId – EMR 集群主实例 ID
- PrivateSubnets – 公有子网
- PublicSubnets – 公共子网
- RedshiftClusterDBName – Amazon Redshift 集群数据库名称
- RedshiftClusterEndpointWithPort – Amazon Redshift 集群端点地址与端口号
- RedshiftClusterSecret – Amazon Redshift 集群凭证 secret ARN
- SageMakerNotebookName – Amazon SageMaker notebook 实例名称
- SageMakerRS3BucketName – Amazon SageMaker S3 数据存储桶
- VPCandCIDR – VPC ID 与 CIDR 地址块
应用必要的 R 软件包与 JAR文件创建 notebook实例
JDBC 为面向 Java 编程语言的应用程序编程接口(API),负责定义对数据库的具体拜访形式。RJDBC 则是 R 中的一款软件包,可帮忙大家应用 JDBC 接口接入各类数据源。CloudFormation 模板创立的 notebook 实例,将保障为 Hive、Presto、Amazon Athena、Amazon Redshift 以及 MySQL 提供必要的 JAR 文件,由此建设起 JDBC 连贯。
- 在 Amazon SageMaker 管制台下的 Notebook 局部,抉择Notebook instances。
- 搜寻与之前记录的 SageMakerNotebookName 键相匹配的 notebook。
- 抉择该 notebook 实例。
- 点击“Actions”之下的“Open Jupyter”,并定位至“jdbc”目录。
CloudFormation 模板将在“jdbc”目录当中下载与 Hive、Presto、Athena、Amazon Redshift 以及 Amazon Aurora MySQL 相兼容的 JAR 文件。
- 找到 Notebook 实例的生命周期配置。
通过生命周期配置,咱们能够在 notebook 实例上装置软件包或示例 notebook,为其配置网络与安全性,或者应用 Shell 脚本进行自定义其余配置。生命周期配置负责在咱们创立 notebook 实例或者启动此 notebook 时,提供须要配套运行的 shell 脚本。
- 在 Lifecycle configuration 局部,抉择 View script 以查看负责在 Amazon SageMaker 中设置 R 内核以通过 R 将 JDBC 连贯指向数据源的生命周期配置脚本。
此生命周期配置,将在 Amazon SageMaker notebook 的 Anaconda 环境中装置 RJDBC 软件包与依赖项。
接入 Hive与 Presto
Amazon EMR 是一套行业当先的云大数据平台,可应用各类开源工具(例如 Apache Spark、Apache Hive、Apache HBase、Apache Flink、Apache Hudi 以及 Presto)解决大量数据。
大家能够应用 System Manager 中的会话管理器(Session Manager)性能从亚马逊云科技控制台登录至 EMR 主节点,由此在 Hive 当中创立测试表。通过 Systems Manager,能够查看并管制亚马逊云科技上的基础设施。Systems Manager 还提供对立的用户界面,供咱们对立查看来自多项 Amazon 服务的治理数据,同时跨多种资源主动执行治理工作。会话管理器是一项全托管 Systems Manager 性能,可帮忙咱们通过基于浏览器的一键式交互 Shell 或马亚迅云科技命令行界面(Amazon CLI),对 Amazon Elastic Compute Cloud(Amazon EC2)实例、本地实例以及虚拟机加以治理。
咱们能够在此步骤中应用在 Amazon CloudFormation Outputs选项卡当中提供的以下值:
- EMRClusterDNSAddress – EMR 集群 DNS 名称
- EMRMasterInstanceId – EMR 集群主实例 ID
- SageMakerNotebookName – Amazon SageMaker notebook 实例名称
随后执行如下操作:
- 在 Systems Manager 控制台的 Instances & Nodes 之下,抉择Session Manager。
- 抉择Start Session。
- 应用 EMRMasterInstanceId键的值作为实例 ID,SSH到 EMR主节点。
这项操作将启动基于浏览器的 Shell。
- 运行以下 SSH 命令:
# change user to hadoop
whoami
sudo su - hadoop
- 登录到 EMR 主节点上,在 Hive 中创立一份测试表:
# Run on the EMR master node to create a table called students in Hive
hive -e "CREATE TABLE students (name VARCHAR(64), age INT, gpa DECIMAL(3, 2));"
# Run on the EMR master node to insert data to students created above
hive -e "INSERT INTO TABLE students VALUES ('fred flintstone', 35, 1.28), ('barney rubble', 32, 2.32);"
# Verify
hive -e "SELECT * from students;"
exit
exit
以下截屏所示,为基于浏览器的 Shell 中的视图示例。
- 退出 Shell 之后,敞开浏览器。
要应用 Amazon SageMaker R 内核对 Amazon EMR 中的数据进行查问,请关上之前由 CloudFormation 模板创立实现的 notebook。
- 在 Amazon SageMaker 控制台的 Notebook 之下,抉择Notebook instances。
- 找到由 SageMakerNotebookName 键的值所指定的 notebook。
- 抉择Open Jupyter。
- 要演示 Amazon SageMaker R 内核中连贯 EMR,抉择 Upload 并上传 ipynb notebook。
Ø 或者在 New 下拉菜单中,抉择 R 以关上一个新 notebook。
Ø 输出“hive_connect.ipynb”中的代码,将 emr_dns 值替换为 EMRClusterDNSAddress 键提供的值:
- 运行该 notebook 中的所有单元,应用 Amazon SageMaker R 控制台接入 Amazon EMR 上的 Hive。
咱们能够通过相似的步骤接入 Presto:
- 在 Amazon SageMaker 管制台上,关上咱们之前创立的 notebook。
- 抉择Open Jupyter。
- 抉择 Upload 以上传ipynb notebook。
Ø 或者,能够在 New 下拉菜单中抉择 R 以关上一个新 notebook。
Ø 输出“presto_connect.ipynb”中的代码,将 emr_dns 值替换为 EMRClusterDNSAddress 键提供的值:
- 运行该 notebook 中的所有单元,应用 Amazon SageMaker R 控制台接入 Amazon EMR 上的 PrestoDB。
接入 Amazon Athena
Amazon Athena 是一项交互式查问服务,可应用规范 SQL 轻松剖析 Amazon Simple Storage Service(Amazon S3)中的数据。Amazon Athena 还具备无服务器属性,大家无需治理任何基础设施,只须要为理论运行的查问付费。要应用 RJDBC 从 Amazon SageMaker R 内核接入 Amazon Athena,咱们须要应用 Amazon Athena JDBC 驱动程序。此驱动程序曾经通过生命周期配置脚本被下载至 notebook 实例当中。
大家还须要在 Amazon S3 中设置查问后果地位。对于更多详细信息,请参阅如何应用查问后果、输入文件与查问历史。
- 在 Amazon Athena 管制台上,抉择Get Started。
- 抉择 Set up a query result location in Amazon S3(在 Amazon S3 中设置查问后果地位)。
- 在 Query result location 局部,输出由 SageMakerRS3BucketName 键的值指定的 Amazon S3 地位。
- 或者也能够间接增加前缀,例如 results。
- 抉择Save。
- 应用 Amazon S3 中的示例数据在 Athena 中创立数据库或 schema 及其对应表。
- 与接入 Hive 及 Presto 的形式相似,大家能够上传 ipynb notebook 以通过 R 内核在 Athena 与 Amazon SageMaker 之间建设一条连贯。
Ø 或者能够关上一个新的 notebook 并输出“athena_connect.ipynb”中的代码,并将其中 s3_bucket 的值替换为 SageMakerRS3BucketName 键的值:
- 运行 notebook 中的所有单元,借此由 Amazon SageMaker R 控制台接入至 Amazon Athena。
接入 Amazon Redshift
Amazon Redshift 是一款速度表现出色的全托管云数据仓库,凭借规范 SQL 与您的现有商务智能(BI)工具实现简略且经济高效的数据分析能力。Redshift 能够对 TB 乃至 PB 级别的大规模结构化数据执行查问,对简单查问实现优化,可在高性能存储之上实现列式存储,并反对大规模并发查问执行性能。要应用 RJDBC 由 Amazon SageMaker R 内核接入 Amazon Redshift,咱们能够应用 Amazon Redshift JDBC 驱动程序,此驱动程序已通过生命周期配置脚本被下载至 notebook 实例当中。
咱们须要从 Amazon CloudFormation Outputs选项卡中获取以下键及其对应值:
- RedshiftClusterDBName – Amazon Redshift 集群数据库名称
- RedshiftClusterEndpointWithPort – Amazon Redshift 集群端点地址与端口号
- RedshiftClusterSecret – Amazon Redshift 集群凭证 secret ARN
CloudFormation 模板会在 Amazon Secrets Manager 当中为 Amazon Redshift 集群创立一项 secret,由此爱护咱们用于拜访应用程序、服务以及各项 IT 资源的 secret。Secrets Manager 还容许用户轻松轮替、治理并检索数据库凭证、API 密钥乃至整个生命周期中的其余 secret。
- 在 Amazon Secrets Manager 管制台上,抉择Secrets。
- 抉择由 RedshiftClusterSecret 键值示意的 secret。
- 在 Secret value局部 ,抉择Retrieve secret value 以获取 Amazon Redshift 集群的用户名与明码。
- 在 Amazon Redshift 管制台上,抉择Editor(在实质上为 Amazon Redshift 查问编辑器)。
- 在 Database name 局部,输出redshiftdb。
- 在 Database password 局部,输出明码。
- 抉择Connect to database。
- 运行以下 SQL 语句,创立一份表并插入几条记录:
CREATE TABLE public.students (name VARCHAR(64), age INT, gpa DECIMAL(3, 2));
INSERT INTO public.students VALUES ('fred flintstone', 35, 1.28), ('barney rubble', 32, 2.32);
- 在 Amazon SageMaker 管制台上,关上 notebook。
- 抉择Open Jupyter。
- 上传 ipynb notebook。
Ø 或者打一个新的 notebook 并输出“redshift_connect.ipynb”中的代码,留神替换其中 RedshiftClusterEndpointWithPort、RedshiftClusterDBName 以及 RedshiftClusterSecret 的值:
- 运行 notebook 中的所有单元,由 Amazon SageMaker R 控制台接入 Amazon Redshift。
接入 MySQL兼容型 Amazon Aurora
Amazon Aurora 是一套专门面向云环境构建的 MySQL 兼容型关系数据库,可能将传统企业级数据库的性能与可用性,同开源数据库的便捷性与老本效益加以联合。要应用 RJDBC 由 Amazon SageMaker R 内核接入 Amazon Aurora,咱们须要用到 MariaDB JDBC 驱动程序,此驱动程序已通过生命周期配置脚本被下载至 notebook 实例当中。
大家须要应用 Amazon CloudFormation Outputs选项卡中提供的以下键及其对应值:
- AuroraClusterDBName – Aurora 集群数据库名称
- AuroraClusterEndpointWithPort – Aurora 集群端点地址及其端口号
- AuroraClusterSecret – Aurora 集群凭证 secret ARN
CloudFormation 模板将在 Secrets Manager 中为 Aurora 集群创立 secret。
- 在 Amazon Secrets Manager 管制台上,找到由 AuroraClusterSecret 键值示意的 secret。
- 在 Secret value局部 ,抉择Retrieve secret value 以获取 Aurora 集群的用户名与明码。
要接入该集群,请遵循与其余服务相似的操作步骤。
- 在 Amazon SageMaker 管制台上,关上 notebook。
- 抉择Open Jupyter。
- 上传 ipynb notebook。
Ø 或者能够打一个新的 notebook 并输出“aurora_connect.ipynb”中的代码,请留神替换 AuroraClusterEndpointWithPort、AuroraClusterDBName 以及 AuroraClusterSecret 的值:
- 运行 notebook 中的所有单元,以在 Amazon SageMaker R 管制台上接入 Amazon Aurora。
总结
在本文中,咱们演示了如何在运行环境中接入各类数据源,包含 Amazon EMR 上的 Hive 与 PrestoDB、Amazon Athena、Amazon Redshift 以及 MySQL 兼容型 Amazon Aurora 集群等,并借此经由 Amazon SageMaker 实现剖析、分析并运行统计计算。大家也能够通过 JDBC 将同一办法扩大到其余数据源。