关于机器学习:SageMaker-R环境下访问数据源的N种方式


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将同一办法扩大到其余数据源。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理