AWS 胶水是从亚马逊的 ETL 服务, 使您可以轻松地准备和加载您的数据存储和分析。使用 PySpark 模块连同 AWS 胶水, 您可以创建使用 JDBC 连接数据的作业, 将数据直接加载到 AWS 数据存储区。在本文中, 我们将 Cloudant 的 CData JDBC 驱动程序上载到亚马逊 S3 桶中, 并创建并运行一个 AWS 胶水作业, 以提取 Cloudant 数据并将其存储在 S3 中作为 CSV 文件。
将 CData JDBC 驱动程序上载到亚马逊 S3 桶 Cloudant
为了在 AWS Cloudant 中使用 CData JDBC 驱动程序, 您需要将其 (以及任何相关的许可证文件) 存储在亚马逊 S3 中的一个桶中。
- 打开亚马逊 S3 控制台。
- 选择一个现有的桶 (或创建一个新的水桶)。
- 点击上传
- 在驱动程序的安装位置中, 选择在 lib 目录中找到的 JAR 文件 (cdata.jdbc.cloudant.jar)。
配置亚马逊胶水作业
- 从 AWS 胶水控制台导航到 ETL > 作业。
- 单击 “添加作业” 以创建新的胶水作业。
- 填写作业属性:
- 名称:填写作业的名称, 例如 CloudantGlueJob。
- IAM 角色:选择 (或创建) 具有 AWSGlueServiceRole 和 AmazonS3FullAccess 的 IAM 角色 (因为 JDBC 驱动程序和目标位于亚马逊 S3 桶) 权限策略中。
- 此作业运行:选择 “要由您创作的新脚本”。
填充脚本属性: - 脚本文件名称:脚本文件的名称, 例如 GlueCloudantJDBC
- 存储脚本的 S3 路径:填写或浏览到 S3 桶。
- 临时目录:填写或浏览到 S3 桶。
- 展开脚本库和作业参数 (可选)。对于从属 jar 路径, 请填写或浏览到加载 JAR 文件的 S3 桶。
- 单击 “下一步”。在这里, 您可以选择添加到其他 AWS 终结点的连接, 因此, 如果您的目标是红移、MySQL 等, 则可创建和使用与这些数据源的连接。
- 单击 “下一步” 查看作业配置。
- 单击 “完成” 将创建作业。
- 在打开的编辑器中, 为作业编写 Python 脚本。您可以使用示例脚本 (如下所示) 作为示例。
示例粘附脚本
要使用 CData JDBC 驱动程序连接到 Cloudant, 您需要创建一个 JDBC URL, 以填充必要的连接属性。另外 (除非您使用的是 Beta 驱动程序), 否则您需要在 JDBC URL 中设置 RTK 属性。您可以查看安装中包含的授权文件, 以获取有关如何设置此属性的信息。
设置以下连接属性以连接到 Cloudant:
- 用户: 将此设置为您的用户名。
- 密码: 将其设置为密码。
下面是一个示例脚本, 它使用 CData JDBC 驱动程序与 PySpark 和 AWSGlue 模块一起提取 Cloudant 数据并将其写入 CSV 格式的 S3 桶中。对需要的脚本进行任何更改, 以满足您的需要并保存该作业。
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.dynamicframe import DynamicFrame
from awsglue.job import Job
args = getResolvedOptions(sys.argv, ['JOB_NAME'])
sparkContext = SparkContext()
glueContext = GlueContext(sparkContext)
sparkSession = glueContext.spark_session
##Use the CData JDBC driver to read Cloudant data from the Movies table into a DataFrame
##Note the populated JDBC URL and driver class name
source_df = sparkSession.read.format("jdbc").option("url","jdbc:cloudant:RTK=5246...;User=abc123; Password=abcdef;").option("dbtable","Movies")
jdbc.cloudant.CloudantDriver “). 加载 () glueJob = 作业 (glueContext) glueJob. init (参数 [‘ JOB_NAME ‘], 参数) # #Convert DataFrames 到 AWS 胶水的 DynamicFrames 对象 dynamic_dframe = DynamicFrame fromDF (source_df, glueContext,” dynamic_df “) # #WriteDynamicFrame 文件以 CSV 格式存储到 S3 桶中的文件夹中。
# 通过使用以前定义的连接, #It 可以写入任何亚马逊数据存储区 (SQL server、红移等)。
retDatasink4 = glueContext. write_dynamic_frame from_options (框架 = dynamic_dframe, connection_type = “s3”, connection_options = {“路径”: “s3://mybucket/outfiles”}, 格式 = “csv”, transformation_ctx = “datasink4”) glueJob. 提交 ()
运行胶水作业
编写完脚本后, 我们就可以运行胶水作业了。单击 “运行作业”, 等待提取/加载完成。您可以从 AWS 胶水控制台中的 “作业” 页查看作业的状态。一旦作业成功, 您的 S3 桶中将有一个 CSV 文件, 其中有 Cloudant 电影表中的数据。
使用 CData JDBC 驱动程序在 AWS 胶水中 Cloudant, 您可以轻松地为 Cloudant 数据创建 ETL 作业、将数据写入 S3 桶或将其加载到任何其他 AWS 数据存储区中。