Glue Connector 和 Connection 的关系与区别
AWS Glue作为一种无服务器产品,其运行环境是“不可预知”的,也就是“一个黑盒”,所以如何能连接一些自有数据源是Glue必须考虑并给予满足的,为此,Glue给出的解决方案就是Connector和Connection,一个connector就是一个用于协助访问数据源的程序包(容器镜像或Jar包),如果你要使用一个connector,必须先创建一个针对该connector的connection。一个connection包含了连接一个特定数据源的属性。connector和connections联合起来为目标数据源提供访问通路。本文地址:https://laurence.blog.csdn.net/article/details/129139176,转载请注明出处!
1. 关系与区别
下面是一些明确切且重要的结论:
- 先创建Connector,再创建Connection,后者依附于前者,Connector与Connection是一对多的映射关系
- Connector与Connection非常类似于数据库客户端工具(例如DataGrip)中的Driver和DataSource之间的关系,Connector类似Driver,主要包含JAR包和基础属性(如JDBC类型的Connector需要配置Base的JDBC URL),DataSource类似于DataSource,主要包含身份认证信息和网络配置
- 能在Glue控制台上编辑的主要是Custom Connector & Connection,以及Marketplace Connector关联的Connection
- Marketplace Connector是只读的,不可配置,对应Connection可由用户创建和编辑
- Marketplace Connector在架构上有更大的“运作空间”,一般以容器形式运行于EKS/ECS上
- Custom Connector只能是一个Jar包,所以它只有Spark、Athena、JDBC三种类型(对应Glue提供的三种集成API)
- Custom Connection可以独立于Connector存在,依赖Jar包可通过Job Dependent Jar配置给Job,故不一定非要依赖Connector
- 再进一步,如果配置了VPC Connection,再通过Job Dependent Jar配置Jar包,则Connection也可以省去(未必所有的Connection都可以,但测试过部分,确实是可行的)
- 尽管上述两点都已证明可行,还是建议始终使用Custom Connector + Custom Connection的标准方式配置数据源连接。跳过Connector直接创建Custom Connection会丢失一个优势:由于在Glue图形化编辑器上,只有Connector是可以直接拖放的Source/Sink组件,所以如果跳过Custom Connector直接创建Custom Connection,在Glue图形化编辑器上就没有这个数据源对应的连接器可以拖放了。
下图对以上要点进行了总结:
来自于marketplace的connector显然拥有“特权”,它们拥有更加复杂的架构,这些connector往往都有自己docker镜像,并使用ECS/EKS部署和运行镜像,独立的镜像给了connector最大化的定制空间。而自定义connector的“运作空间”远远没有marketplace上的connector大,它不能拥有自定义镜像,只能以jar包形式存在,并依附于Glue的运行环境(通过三套API接口集成),所以,自定义的connector只有三种类型,只能以Jar包形式存在:
- Spark DataSource API -> connectionType=custom.spark
- Amazon Athena Data Source API -> connectionType=custom.athena
- Java JDBC API -> connectionType=custom.jdbc
2. Connection的加载时机
此外,我们一直想找出:Glue的Connection与Spark原生数据加载方式(例如:spark.read.format(“jdbc”))之间到底有什么差异,我们以JDBC类型的Connection做了如下一些测试:
测试场景 | 测试结果 |
---|---|
Custom JDBC Connection + Glue Context with Connection | 成功 |
Custom VPC Connection + Job Dependent Jar + Glue Context with Connection | 成功 |
Custom JDBC Connection + Spark原生数据加载方式 ( spark.read.format(“jdbc”) ) | 失败 |
上述三个测试用例可有力地证明:在Glue中,对于一个数据源的连接配置只能通过Glue专属的GlueContext加载才能生效。关于这一点,我们没有办法从源代码上获得验证,但是一种合理的解释是:我们知道,Glue作为Serverless产品,其工作节点(Worker)的网络环境是不可见的“黑盒”,为了能和目标数据源打通,Glue会根据Connction中的网络配置给它的工作节点创建临时的ENI(虚拟网卡),用于连接到Connection配置的子网中,这些工作节点也因此获得了指定子网内的私有IP地址,从上面的测试结果来看,真正触发Glue去完成这一系列操作的“开关”是在代码中通过GlueContext加载Connection时(根据Spark Lazy Loading的一贯特性,触发的时机可能会更晚,有可能是在初次读取DynamicFrame时),而不是只要在Job属性中关联了一个Connection,在Job启动时就会被自动激活。
3. 重要细节
最后,补充一些测试中的细节:
-
Trino JDBC Driver的URL中user参数不得为空
-
Trino JDBC Driver的URL中user和passoword,只能通过secret manager配置方可生效
-
通过Glue专属的GlueContext加载Connection指的是类似下面的代码:
# author: https://laurence.blog.csdn.net/ Trino_node1676884948138 = glueContext.create_dynamic_frame.from_options(connection_type="custom.jdbc",connection_options={"tableName": "orders","dbTable": "orders","jobBookmarkKeys": ["orderkey"],"jobBookmarkKeysSortOrder": "asc","connectionName": "my-trino-connection",},transformation_ctx="Trino_node1676884948138", )
-
通过Spark原生数据加载方式读取数据源指的是类似下面的代码:
# author: https://laurence.blog.csdn.net/ spark.read.format("jdbc").option("url", "jdbc:trino://localhost:8889/hive/default").option("driver", "io.trino.jdbc.TrinoDriver").option("user", "hadoop").option("dbtable", "orders").load().show()
-
Glue的官方文档对于创建ENI有专门的解释:
AWS Glue sets up elastic network interfaces that enable your jobs to connect securely to other resources within your VPC. Each elastic network interface is assigned a private IP address from the IP address range within the subnet you specified.
4. 相关资源
4.1. 内置Connectors
connectionType | Connects To |
---|---|
custom.* | Spark, Athena, or JDBC data stores (see Custom and AWS Marketplace connectionType values |
documentdb | Amazon DocumentDB (with MongoDB compatibility) database |
dynamodb | Amazon DynamoDB database |
kafka | Kafka or Amazon Managed Streaming for Apache Kafka |
kinesis | Amazon Kinesis Data Streams |
marketplace.* | Spark, Athena, or JDBC data stores (see Custom and AWS Marketplace connectionType values) |
mongodb | MongoDB database |
mysql | MySQL database (see JDBC connectionType Values) |
oracle | Oracle database (see JDBC connectionType Values) |
orc | Files stored in Amazon Simple Storage Service (Amazon S3) in the Apache Hive Optimized Row Columnar (ORC) file format |
parquet | Files stored in Amazon S3 in the Apache Parquet file format |
postgresql | PostgreSQL database (see JDBC connectionType Values) |
redshift | Amazon Redshift database (see JDBC connectionType Values) |
s3 | Amazon S3 |
sqlserver | Microsoft SQL Server database (see JDBC connectionType Values) |
4.2. Marketplace Connectors
通过下面的链接可以查找到Marketplace上所有的连接器:
https://aws.amazon.com/marketplace/search/results?searchTerms=glue+connector
4.3. Custom Connectors
这里有一篇整体介绍,建议先阅读此文:
Developing, testing, and deploying custom connectors for your data stores with AWS Glue
4.3.1. 基于Spark DataSource API的自定义连接器
文档:
https://github.com/aws-samples/aws-glue-samples/tree/master/GlueCustomConnectors/development/Spark/glue-3.0
示例:
MinimalSpark3Connector.scala
4.3.2. 基Java JDBC API的自定义连接器
文档:
https://docs.aws.amazon.com/glue/latest/ug/connectors-chapter.html#code-jdbc-connector
示例:
https://github.com/aws-samples/aws-glue-samples/blob/master/GlueCustomConnectors/development/Spark/SparkConnectorMySQL.scala
4.3.3. 基Java JDBC API的自定义连接器
文档:
https://github.com/aws-samples/aws-glue-samples/tree/master/GlueCustomConnectors/development/Athena
示例:
https://github.com/aws-samples/aws-glue-samples/tree/master/GlueCustomConnectors/development/Athena
本文地址:https://laurence.blog.csdn.net/article/details/129139176,转载请注明出处!
相关文章:

Glue Connector 和 Connection 的关系与区别
AWS Glue作为一种无服务器产品,其运行环境是“不可预知”的,也就是“一个黑盒”,所以如何能连接一些自有数据源是Glue必须考虑并给予满足的,为此,Glue给出的解决方案就是Connector和Connection,一个connect…...

如何使用ngxin的 upstream
1.引言: 1.1反向代理: 反向代理是充当Web服务器网关的代理服务器。当您将请求发送到使用反向代理的Web服务器时,他们将先转到反向代理,由该代理将确定是将其路由到Web服务器还是将其阻止。 这意味着有了反向代理,您…...

Java数组,超详细整理,适合新手入门
目录 一、什么是Java中的数组? 二、数组有哪些常见的操作? 三、数组的五种赋值方法和使用方法 声明数组 声明数组并且分配空间 声明数组同时赋值(1) 声明数组同时赋值(2) 从控制台输入向数组赋值 四、求总和平均 五、求数组中最大值最小值 六…...
1.3数据传输控制方式:IO数据传输控制方式、程序控制(查询)方式、程序中断方式、DMA方式、通道方式、I/O处理机
1.3数据传输控制方式:IO数据传输控制方式、程序控制(查询)方式、程序中断方式、DMA方式、通道方式、I/O处理机程序控制(查询)方式程序中断方式DMA方式通道方式、I/O处理机I/O数据传输方式,由软件到硬件发展…...
Linux 设置语言
文章目录1. 临时设置环境变量2. 默认语言设置3. 语言包4. 安装浏览器 chromium1. 临时设置环境变量 通过设置环境变量,可以使单个命令使用另一种语言LANG $ LANGfr_FR.utf8 date mar. mai 24 12:16:51 CDT 2022后续命令将恢复为使用系统的默认语言进行输出。该loc…...
Python基础-数据类型之集合
一、集合的定义 集合:是一个无序的没有重复元素的序列,因此不能通过索引来进行操作 1:使用set()创建集合 set(object) # 参数为一个序列,整型不能作为参数 set_a set("abcb") print(set_a) # {b, a, c} 2&…...

[Css]Grid属性简单陈列(适合开发时有基础的快速过一眼)
[css进阶]Grid属性简介 文章目录[css进阶]Grid属性简介典型需求网格容器的属性displaygrid-template-columns和grid-template-rowsgrid-template-areasgrid-templategrid-column-gap grid-row-gapgrid-gapjustify-itemsalign-itemsjustify-contentalign-contentgrid-auto-colum…...

100种思维模型之启发式偏差思维模型-017
曾国藩在给儿子的一封家书中曾写道:余于凡事皆用困知勉行工夫,尔不可求名太骤,求效太捷也。熬过此关,便可少进。再进再困,再熬再奋,自有亨通精进之日。 不急躁不求捷径,小火慢炖,将事…...
微服务 feign远程调用时 显示服务不可用 timed-out and no fallback
目录 第一种: failed and no fallback available 1 服务挂掉了 2 服务没有开启 3 注册中心没注册进去 -> ps: 直接调用的接口 通过网关转发失败 会报503 4 高并发下的服务熔断了 第二种: timed-out and no fallback 2.1 业务场景: A服务一切正常 但是B服务显示timeo…...

第一个Java程序(初识Java)
个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【JavaSE_primary】 文章目录1.Java概述1.1什么是Java1.2Java之父2.0第一个Java程序编译运行.class3.0程序如何跑起来的?3.1J…...

vulnhub LordOfTheRoot_1.0.1
总结:端口敲门,CVE-2015-8660提权, 目录 下载地址 漏洞分析 信息收集 端口敲门 网站分析 方法一 ssh登录提权 方法二 下载地址 LordOfTheRoot_1.0.1.ova (Size: 1.6 GB)Download: http://www.mediafire.com/download/m5tbx0dua05szjm…...
MutationObserver与IntersectionObserver
MutationObserver 出现原因:当我们需要监听元素发生变化时,不借助使元素发生变化的业务动作的情况下,使用无污染方式监听非常困难,为了解决这个问题,MutationObserver诞生! 概述 可以用来监听DOM的任何变化…...
【ESP 保姆级教程】玩转巴法云篇② ——MQTT设备云,MQTT协议下的数据通信
忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-02-21 ❤️❤️ 本篇更新记录 2023-02-21 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请…...

植物大战 仿函数——C++
容器适配器 容器适配器不支持迭代器。栈这个东西,让你随便去遍历,是不好的。他是遵循后进先出的。所以他提供了一个街头top取得栈顶数据。 仿函数 仿函数(functor)是C中一种重载了函数调用运算符(operator()&#x…...

【C语言】浮点型数据在内存中的存储
🚀🚀🚀 如果文章对你有帮助不要忘记点赞关注收藏哦🚀🚀🚀 文章目录⭐浮点数在内存中的存储1.1 🤓举个例子:1.2浮点数存储规则🌈:对于M与E有一些特别规定1.3解释前面题目&…...
impala中的刷新元数据和刷新表
impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据。 虽然Hive系统也提供了SQL语义,但由于Hive底层执行使用的是MapReduce引擎,仍然是一个批处理过程,难以满…...

Vscode创建vue项目的详细步骤
目录 一、概述 操作的前提 二、操作步骤 一、概述 后端人员想在IDEA里面创建一个Vue的项目,但是这非常麻烦,用vscode这个前端专用软件创建就会非常快速。 操作的前提 1.安装vscode软件的步骤:vscode下载和安装教程和配置中文插件&#…...

如何在面试中介绍自己的项目,才能让软件测试面试官无可挑剔,
四、项目 4.1 简单介绍下最近做过的项目 根据自己的项目整理完成,要点: 1)项目背景、业务、需求、核心业务的流程 2)项目架构,B/S还是C/5,数据库用的什么? 中间件用的什么?后台什么语言开发…...

虹科方案|从 uCPE 到成熟的边缘计算平台
基于开放硬件平台,通用客户端设备 (uCPE) 支持快速添加、集成或删除任意数量的集中管理虚拟功能。 为了增加收入并保持竞争优势,托管服务提供商 (MSP) 和企业正在部署 uCPE 以增强业务敏捷性、加速新服务的引入并提高运营效率。最初,uCPE被部…...

计算机是怎么读懂C语言的?
文章目录前言程序环境翻译环境翻译环境分类编译预处理预处理符号预定义符号#define#undef命令行定义条件编译文件包含头文件包含查找规则嵌套文件包含其他预处理指令编译阶段汇编链接🎉welcome🎉 ✒️博主介绍:博主大一智能制造在读ÿ…...

hadoop入门介绍及各组件功能运行关系
文章目录Hadoop 组成部分1.HDFS2.MapReduce 架构概述3. yarn 架构概述4.HDFS、YARN、MapReduce三者关系Hadoop 组成部分 1.HDFS Hadoop Distributed File System,简称 HDFS,是一个分布式文件系统。 HDFS 架构概述 主要分为 NameNode (mn):存储文件的元…...

(HP)新手引导使用react-shepherd
1,官方参数文档:https://shepherdjs.dev/docs/tutorial-02-usage.html 2,基本代码 import { ShepherdTour } from react-shepherd; import ./index.less; // 自己的样式文件,用来修改样式 import ./shepherd.less; // 将shephe…...

数据结构:栈和队列(Leetcode20. 有效的括号+225. 用队列实现栈+232. 用栈实现队列)
目录 一.数据结构--栈 1.栈的基本介绍 2.栈的实现 二.数据结构--队列 1.队列的基本介绍 2.队列的实现 三.栈的运用(Leetcode20. 有效的括号225) 1.问题描述 2.问题分析 题解代码: 四.用两个队列实现栈(225. 用队列实现栈 - 力扣(Leetcode&a…...
22.2.19周赛双周赛(贪心、记忆化搜索...)
文章目录双周赛98[6359. 替换一个数字后的最大差值](https://leetcode.cn/problems/maximum-difference-by-remapping-a-digit/)[6361. 修改两个元素的最小分数](https://leetcode.cn/problems/minimum-score-by-changing-two-elements/)贪心排序[6360. 最小无法得到的或值](ht…...

2023最新软件测试面试题(带答案)
1. 请自我介绍一下(需简单清楚的表述自已的基本情况,在这过程中要展现出自信,对工作有激情,上进,好学) 面试官您好,我叫###,今年26岁,来自江西九江,就读专业是电子商务,毕…...

【C++】类型转换方法
本篇博客让我们来见识一下C中新增的类型转换方法 文章目录1.C语言中类型转换2.C中的强制类型转换2.1 static_cast2.2 reinterpret_cast2.3 const_castvolatile关键字2.4 dynamic_cast3.C强制类型转换的作用4.RTTI1.C语言中类型转换 在C语言中,类型转换有下面两种形…...

100亿级订单怎么调度,来一个大厂的极品方案
背景 超时处理,是一个很有技术难度的问题。 所以很多的小伙伴,在写简历的时候,喜欢把这个技术难题写在简历里边, 体现自己高超的技术水平。 在40岁老架构师 尼恩的读者交流群(50)中,尼恩经常指导大家 优化简历。 最…...

C++性能白皮书
最近看完了《C性能白皮书》,这本书列出了一些性能优化的思路,不过只是一些指引,没有讲具体细节,我整理出了其中的关键点分享给大家: 硬件篇 作为一个程序员,想要性能优化,最好要了解些硬件&…...
华为OD机试 - 黑板上色 | 机试题算法思路 【2023】
最近更新的博客 华为OD机试 - 简易压缩算法(Python) | 机试题算法思路 【2023】 华为OD机试题 - 获取最大软件版本号(JavaScript) 华为OD机试 - 猜字谜(Python) | 机试题+算法思路 【2023】 华为OD机试 - 删除指定目录(Python) | 机试题算法思路 【2023】 华为OD机试 …...

如何在六秒内吸引观众的注意力
根据《2022国民专注力洞察报告》显示,当代人的连续专注时长,已经从2000年的12秒,下降到了现在的8秒。对于这个事实你可能难以相信,实际上这意味着,大多数互联网用户跳到一些页面上时,可能眼皮都不眨一下就离…...