相关文章推荐
强悍的核桃  ·  phpoffice/phpword - ...·  2 周前    · 
坏坏的羽毛球  ·  UC ...·  9 月前    · 
深沉的板栗  ·  selenium.common.except ...·  1 年前    · 
英俊的茴香  ·  std::shuffle ...·  1 年前    · 
飘逸的蚂蚁  ·  NavigationBar及backBarI ...·  1 年前    · 
本文详细记录了在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 ,转载请注明出处!

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;

③ 将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()

⑥ 程序输出

找了很久的接入各种类型数据库(es、hive、mysql、clickhouse、……)的方案,最后被告知trino。还没让做的时候就在思考怎么连上trino进行配置啥的,然后就简单写了个测试类,如下: 想着代码随时删,网上使用连接池链接trino的例子也很少有人分享,为了让有需要者快速复制开发,就贴出来: 还有两个热门连接池的手动代码创建的代码。...