暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SeaTunnel 让 Apache Flink 和 Spark SQL作业更简单!

SeaTunnel 2023-03-15
2623

点击蓝字 关注我们

作者 | Nick Komissarenko, Dell EMC Certified trainer since 2007, co-founder of Big Data School

我们会定期为我们的 Apache Flink 和 Spark 数据工程师课程添加有用的内容和工具,帮助用户更高效地开发和运营大数据分析应用程序。我将通过本文带你了解什么是 SeaTunnel,以及这个高性能分布式数据集成平台是如何让流式数据同步与 Apache Flink 和 Spark SQL 作业变得容易的。



Flink 和 Spark 与 SQL 的流式数据同步


Apache Flink 是一个热门的用于创建流式有状态应用程序的分布式框架,它不仅可以在 Scala/Java 中创建数据处理任务,还可以通过 SQL 查询创建数据处理任务,从而降低了技术门槛。专业的 Scala/Java 开发人员更有可能使用 DataSet 或 DataStream API 来创建 Flink 作业。在访问数据源时,该方法需要大量代码,主要是扩展连接器。而且 SQL 查询使用是基于声明式方法的,即使用 Java 服务提供者接口(SPI,Service Provider Interface)的方法发现连接器。

回想一下,Flink 支持使用 CREATE TABLE SQL 语句来注册表,你可以指定表名、模式以及用于连接到外部系统的参数。所需的连接属性将转换为基于字符串的键值对。工厂将根据工厂 ID 从键值对创建配置的表源、表目标和适当的格式。如果只为每个组件查找一个匹配的工厂时,可以通过 Java SPI 找到的所有被计算在内的工厂。如果找不到工厂,或者如果有多个工厂与给定的属性相匹配,则会抛出异常,包含有关工厂和支持属性的附加信息。

Apache Flink 使用 Java SPI 通过标识符加载连接器工厂和表格式。因为每个连接器和表格式的名为 org.apache.flink.table.factories.Factory 的 SPI 资源文件位于同一个 META-INF/services 目录中,如果不仅使用了一个,所以这些资源文件将在构建 uber-jar 项目时相互覆盖。

因此,对于数据工程师来说,DataSet 或 DataStream API 比 SQL 更灵活,但在可扩展性方面差一些,因为每次添加新连接器时,都需要编写代码。而 SQL 基于 SPI 机制创建连接器,只需要将连接器 Jar 注入集群即可。因此,SQL 更容易从源头同步数据进行实时计算。

要提高流式数据同步的效率,可以使用专门的解决方案,例如 Apache SeaTunnel。这是一个高性能的分布式数据集成平台,每天可以可靠地实时同步数百亿个事件。它不仅可以与 Flink 引擎一起使用,还可以与 Spark 一起使用。如何做到这一点,可参考本文如何在 Apache SeaTunnel (Incubating) 中使用 Flink SQL 简化数据同步》。



Apache SeaTunnel 的工作原理


Apache SeaTunnel 的主要应用场景是批量同步、数据聚合和集成、运行包含大量数据的 ETL 流程,以及处理来自多个来源的数据。所有这些场景还可能涉及到 Apache Flink 和 Spark。例如,SeaTunnel 在本地运行 Spark,创建客户端,并在作业配置中配置适当的设置。提交作业后,会生成 spark-submit 命令,在集群上启动作业。使用 SeaTunnel,此作业的逻辑将通过主 SeaTunnel Spark 类并根据模板文件进行一些添加。具体的配置文件,包含 4 个部分:Spark 配置、数据源定义、数据接收器定义和数据转换。Spark 会根据配置运行作业,并生成相应的结果。

同样,你可以将 SeaTunnel 应用到 Flink SQL 作业中:首先通过 Shell 读取命令,将参数拼接起来发送到 Flink 集群。再通过 SQL 解析得到 Flink 环境配置和  connector 类型,加载到 CLASSPATH 中,设置 options,解析完成,发送到集群。添加 connector 非常简单,只需要在 SeaTunnel connector 下添加一个 Flink SQL 中的  Sub-module,包括 Flink 本身的依赖,打包时输出到想要的地址即可。Flink SQL 模块目前实现的不足之处是对应用模式的支持较差,目前只能部署在 YARN 和 Kubernetes 上。

总结一下使用 Apache SeaTunnel 与 Flink 和 Spark 引擎的好处,可以看到这是一种实时动态配置大数据处理作业的方法。SeaTunnel 可以帮助用户解决同步大量数据时可能出现的问题:丢失和重复,任务的堆积和延迟,生产环境中吞吐量低,作业周期长,缺乏对应用工作状态的监控等问题。此外,SeaTunnel 平台允许数据工程师直接使用 SQL 构建数据处理管道,减少复杂的 Java/Scala 代码量。

目前,SeaTunnel 项目仍在 Apache Foundation 孵化器中,并积极进行开发。

参考:
1. https://seatunnel.medium.com/how-to-simplify-data-synchronization-using-flink-sql-in-apache-seatunnel-incubating-f972c1685fdf
2. https://seatunnel.apache.org/docs/2.1.3/intro/about/
3. https://github.com/apache/incubator-seatunnel
 
原文链接:
https://medium.com/@bigdataschool/применение-seatunnel-для-управления-sql-заданиями-apache-flink-и-spark-2ad72e7443ec

Apache SeaTunnel


Apache SeaTunnel(Incubating) 是一个分布式、高性能、易扩展、用于海量数据(离线&实时)同步和转化的数据集成平台

仓库地址: 
https://github.com/apache/incubator-seatunnel

网址:
https://seatunnel.apache.org/

Proposal:
https://cwiki.apache.org/confluence/display/INCUBATOR/SeaTunnelPro

Apache SeaTunnel(Incubating)  下载地址:
https://seatunnel.apache.org/download
 
衷心欢迎更多人加入!

我们相信,在「Community Over Code」(社区大于代码)、「Open and Cooperation」(开放协作)、「Meritocracy」(精英管理)、以及「多样性与共识决策」等 The Apache Way 的指引下,我们将迎来更加多元化和包容的社区生态,共建开源精神带来的技术进步!

我们诚邀各位有志于让本土开源立足全球的伙伴加入 SeaTunnel 贡献者大家庭,一起共建开源!

提交问题和建议:
https://github.com/apache/incubator-seatunnel/issues

贡献代码:
https://github.com/apache/incubator-seatunnel/pulls

订阅社区开发邮件列表 : 
dev-subscribe@seatunnel.apache.org

开发邮件列表:
dev@seatunnel.apache.org

加入 Slack:
https://join.slack.com/t/apacheseatunnel/shared_invite/zt-1cmonqu2q-ljomD6bY1PQ~oOzfbxxXWQ

关注 Twitter: 
https://twitter.com/ASFSeaTunnel

往期推荐




技术详解 | SeaTunnel WAL 机制实现内存数据持久化存储




如何使用 SeaTunnel 同步 MySQL 数据到 Hive




SeaTunnel 社区 Committer 迎新!



分享、点赞、在看,给个3连击呗!

文章转载自SeaTunnel,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论