在AWS Glue上使用JDBC连接Trino

Posted Laurence Geng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在AWS Glue上使用JDBC连接Trino相关的知识,希望对你有一定的参考价值。

呼应此前一篇文章《在Spark上使用JDBC连接Trino》,继续在AWS Glue上测试JDBC连接Trino,同样,这是一个非常不典型的应用用场景,本文仅记录测试步骤和结果,不做评论。本文地址:https://laurence.blog.csdn.net/article/details/129098423,转载请注明出处!

1. 测试环境

信息项 设定值
测试环境 AWS Glue 3.0 + Trino 398 ( over EMR 6.9.0 )
Metastore Glue Data Catalog
Trino Server 10.0.129.105
Trino端口 8889 ( 区别于开源默认端口8080 )

2. 测试目标

测试在Glue上使用JDBC读写Trino的可行性

3. 操作步骤

① 创建Glue Connection

选择JDBC类型的Connection,配置好JDBC URL和网络,Glue Connection最重要的作用是配置Glue Worker到目标数据源的网络联通性,所以务必要清楚Trino所在VPC,子网以及可确保联通的安全组:

② 在Hive中创建数据表并插入测试数据:

# 在Hive所在EMR主节点上执行
cat | hive <<EOF
CREATE TABLE IF NOT EXISTS orders (
  orderkey bigint,
  orderstatus string,
  totalprice double,
  orderdate date
);
INSERT INTO orders VALUES (1, \'DONE\', 2342, current_date());
INSERT INTO orders VALUES (2, \'DONE\', 892, current_date());
INSERT INTO orders VALUES (3, \'DONE\', 7843, current_date());
SELECT * FROM orders;
EOF

③ 将Trino JDBC Driver上传至S3

# 在Trino所在EMR主节点上执行
aws s3 cp /usr/lib/trino/trino-jdbc/trino-jdbc-398-amzn-0.jar s3://YOUR_BUCKET/trino-jdbc-398-amzn-0.jar

④ 创建Glue Job

有两点区别于普通Glue Job:

  1. 需attach上一步创建的connection
  2. 需指定trino jdbc driver路径 (即为第②步中上传的jar包路径)

⑤ 编写测试代码

import sys
from awsglue.transforms import *
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

sc = SparkContext()
glueContext = GlueContext(sc)
job = Job(glueContext)
# Please update the values in the options to connect to your own data source
options = 
    "dbTable":"orders",
    "url" : "jdbc:trino://10.0.129.105:8889/hive/default",
    "user": "hadoop",
    "password": "",
    "className" : "io.trino.jdbc.TrinoDriver"
    
datasource = glueContext.create_dynamic_frame_from_options(
    connection_type = "custom.jdbc", 
    connection_options = options,
    transformation_ctx = "datasource")
datasource.show()

job.commit()

⑥ 程序输出

以上是关于在AWS Glue上使用JDBC连接Trino的主要内容,如果未能解决你的问题,请参考以下文章

如何使用带有 PySpark 的 WHERE 子句在 AWS Glue 中查询 JDBC 数据库?

如何从 AWS Glue 中的 JDBC 编目连接加载部分数据?

AWS Python Shell - 如何使用 Glue 目录连接

连接到 SQL Server 实例 AWS Glue

从 AWS Glue 读取 Netezza 时连接超时

使用 JDBC 写入编写 AWS Glue DynamicFrame 时出现 PostreSQL 枚举问题