这篇搭一下flink1.15的源码环境,看一下flink-table代码的结构,后面每周看一些代码,把flinksql玩好。
基础环境准备
安装IDE、jdk(1.8) 、maven(3.8.4)、IDE安装scala插件、IDE配制maven
这些都是之前装sparksql环境时已经装好的,可以直接用
flink源码导入IDE
git地址:https://github.com/apache/flink.git
切branch1.15
拉下来的是master的代码,我习惯看某个具体版本的源码,方便按版本定位问题,所以,需要切一下branch
编译源码
在刚拉好的源码包下执行:
mvn clean install -DskipTests
为项目配制一下jdk
运行测试类
经过上面的一波操作之后,环境就准备好了,接下来跑测试类试一把,如果没报错就算是ok了。
跑一下flink-sql-parser下的测试类,测试没有问题。
flink-table的代码结构
Common
flink-table-common:
这个包中主要是包含 Flink Planner和 Blink Planner一些共用的代码,比如:类型系统定义、UDF堆栈和内置函数定义、内部数据定义、catalogs, formats, connectors 的扩展点等等。
API
flink-table-api-java:
这部分是用户编程使用的 API,包含Table API and SQL 的Java API,是所有planner功能的入口点,比如TableEnvironmentImpl类。
flink-table-api-scala:
Table API and SQL 的Scala API。
flink-table-api-bridge-base:
bridge 桥接器,用于在Table API and DataStream API 之间连接的API的基类。
flink-table-api-java-bridge:
bridge 桥接器,用于在Table API and DataStream API 之间连接的Java API。
flink-table-api-scala-bridge:
bridge 桥接器,用于在Table API and DataStream API 之间连接的scala API。
flink-table-api-java-uber:
绑定flink-table-common和所有Java API模块,包括到数据流API和第三方依赖的桥接,该模块由flink dist使用,而不是直接由用户使用。
Runtime
flink-table-code-splitter:
用于拆分生成的Java代码的工具,以便每个方法不超过64KB的限制。
flink-table-runtime:
运行时核心代码,包含运算符实现、内置函数实现、类型系统实现,读写器、转换器等。
Parser and planner
flink-sql-parser:
默认ANSI sql解析器实现。
flink-sql-parser-hive:
hivesql方言解析器实现。
flink-table-planner:
planner 计划器,是 table API 最主要的部分,提供了运行时环境和生成程序执行计划的 planner,包含AST与语义树、SQL validator 、planner、优化器和规则实现、代码生成器等。
flink-table-planner-loader-bundle:
flink-table-planner的捆绑包。
flink-table-planner-loader:
flink-table-plannerr的加载器。
SQL client
flink-sql-client:
将查询提交到Flink群集的CLI工具。
Testing
flink-table-test-utils:
测试包,提供一些测试实用工具。