本文详细记录了在AWSGlue3.0环境中,通过JDBC连接Trino398(overEMR6.9.0)进行数据读写的测试过程。测试包括创建GlueConnection、在Hive中插入测试数据、上传TrinoJDBC驱动到S3、创建GlueJob以及编写和运行测试代码。实验结果显示了在Glue中利用JDBC与Trino交互的可能性。
摘要由CSDN通过智能技术生成
呼应此前一篇文章
《在Spark上使用JDBC连接Trino》
,继续在AWS Glue上测试JDBC连接Trino,同样,这是一个非常不典型的应用用场景,本文仅记录测试步骤和结果,不做评论。本文地址:
https://laurence.blog.csdn.net/article/details/129098423
,转载请注明出处!
信息项
|
设定值
|
测试环境
|
AWS Glue 3.0 + Trino 398 ( over EMR 6.9.0 )
|
Metastore
|
Glue Data Catalog
|
Trino Server
|
10.0.129.105
|
Trino端口
|
8889 ( 区别于开源默认端口8080 )
|
测试在Glue上使用JDBC读写Trino的可行性
① 创建Glue Connection
选择JDBC类型的Connection,配置好JDBC URL和网络,Glue Connection最重要的作用是配置Glue Worker到目标数据源的网络联通性,所以务必要清楚Trino所在VPC,子网以及可确保联通的安全组:
② 在Hive中创建数据表并插入测试数据:
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;
③ 将Trino JDBC Driver上传至S3
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:
- 需attach上一步创建的connection
- 需指定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)
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()
⑥ 程序输出
找了很久的接入各种类型数据库(es、hive、mysql、clickhouse、……)的方案,最后被告知trino。还没让做的时候就在思考怎么连上trino进行配置啥的,然后就简单写了个测试类,如下:
想着代码随时删,网上使用连接池链接trino的例子也很少有人分享,为了让有需要者快速复制开发,就贴出来:
还有两个热门连接池的手动代码创建的代码。...