Spark SQL扩展外部数据源内部机制分析

Spark作为一个分布式计算引擎,其核心模块SQL支持外部数据源扩展,极其提高了其应用场景的广度和深度。自定义外部数据源,网上存在大量的学习资料,但Spark内部如何实现这些扩展机制的资料,去少之又少。我阅读并调试了大量的代码,最终理清了其脉络,由于涉及篇幅较多,我只写了核心过程,掌握这些过程,对理解sql扩展数据源机制会有极大帮助。

由于内容比较枯燥,建议读者结合Spark代码去分析下面的内容

关键抽象逻辑:

Sessionstate抽象类BaseSessionStateBuilder,被每一个应用端sessionstate使用。其内部定义一个Analyzer解析器。数据源相关逻辑规则

1、覆盖extendsResolutionRules并定义FindDataSourceTable规则,其会判断logicalplan是否是SimpleCatalogRelation,如果是,则把外部数据源数据包装成LogicalRelation(Relation),这个转换在创建表、查询和插入阶段均会使用。

2、覆盖postHocResolutionRules,并定义DataSourceAnalysis规则,转换createtable和insertintoTable操作计划。

核心接口:org.apache.spark.sql.sources.interfaces

这个接口内的抽象几乎满足了现有很多需求,如果不满足,可以在此自定义,并在下面关键地方实现自己的逻辑即可扩展。

创建表核心逻辑

1、  SparksqlParser.visitCreateTable传入schema、

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值