Commit e990a130 authored by walkhan's avatar walkhan

add chinese document

parent 9049f2d0
* [首页](/zh-CN/introduce.md)
* 文档
* [快速开始](/guide/quickstart.md)
* [发展计划](/guide/roadmap.md)
* [编译部署](/guide/deploy.md)
* [核心功能](/guide/functions.md)
* [开发调试](/guide/debug.md)
* 下载
* [扩展语法补全](/extend/completion.md)
* [扩展自定义函数](/extend/udf.md)
* [扩展连接器](/extend/connector.md)
* [扩展数据源](/extend/datasource.md)
* [扩展 Flink 版本](/extend/flinkversion.md)
* [Flink-CDC 集成](/extend/flinkcdc.md)
* [DolphinScheduler 集成](/extend/dolphinscheduler.md)
* [DataSphereStudio 集成](/extend/dataspherestudio.md)
* [Hive 集成](/extend/hive.md)
* [Doris 集成](/extend/doris.md)
* [Clickhouse 集成](/extend/clickhouse.md)
* [Hudi 集成](/extend/hudi.md)
* [Iceberg 集成](/extend/hudi.md)
* [Flink CDC和Kafka进行多源合并和下游同步更新](/extend/Flink_CDC_kafka_Multi_source_merger.md)
* 开发者
* [Dlink Yarn 的三种提交实践](/share/yarnsubmit.md)
* [Dlink AGGTABLE 表值聚合的实践](/share/aggtable.md)
* [Dlink 核心概念及实现原理详解](/share/principle.md)
* 用户案例
* [OpenAPI](/api/openapi.md)
* 语言
* [中文](/zh-CN/)
* [En](/en-US/)
<!-- docs/zh-CN/_sidebar.md -->
- [Dinky简介](/zh-CN/introduce.md)
- 概念和架构
- [系统架构](/zh-CN/architecture.md)
- [基本概念](/zh-CN/concept.md)
- [功能](/zh-CN/feature.md)
- 入门
- [下载](/zh-CN/quick_start/download.md)
- [编译](/zh-CN/quick_start/build.md)
- [部署](/zh-CN/quick_start/deploy.md)
- 基本使用指南
- 参考手册
- FlinkSQL Studio
- 作业和目录创建
- 作业开发
- 作业配置
- 作业管理
- 会话管理
- 注册中心
- 集群实例
- 集群配置
- jar管理
- 数据源管理
- 文档管理
- 系统设置
- 用户管理
- Flink设置
- 运维中心
- 生命周期管理
- 作业监控
- api
- 最佳实践
- [Yarn提交实践指南](/zh-CN/practice/yarnsubmit.md)
- [Dlink 核心概念及实现原理详解](/zh-CN/practice/principle.md)
- [AGGTABLE 表值聚合的实践](/zh-CN/practice/aggtable.md)
- 扩展
- 集成
- [Flink-CDC集成](/zh-CN/extend/flinkcdc.md)
- [Flink-CDC-Kafka多源合并](/zh-CN/extend/Flink_CDC_kafka_Multi_source_merger.md)
- [hive集成](/zh-CN/extend/hive.md)
- [clickhouse集成](/zh-CN/extend/clickhouse.md)
- [Doris集成](/zh-CN/extend/doris.md)
- [Hudi集成](/zh-CN/extend/hudi.md)
- [Iceberg集成](/zh-CN/extend/iceberg.md)
- [Flink UDF集成](/zh-CN/extend/udf.md)
- [DolphinScheduler集成](/zh-CN/extend/dolphinscheduler.md)
- [DataSphereStudio集成](/zh-CN/extend/dataspherestudio.md)
- 其他
- [扩展Flink版本](/zh-CN/extend/flinkversion.md)
- [扩展连接器](/zh-CN/extend/connector.md)
- [扩展数据源](/zh-CN/extend/datasource.md)
- [FlinkSQL 编辑器自动补全函数](/zh-CN/extend/completion.md)
- 开发者指南
- 常见问题
- 历史版本
- [近期计划](/zh-CN/others/plans.md)
- [致谢](/zh-CN/others/thanks.md)
- [交流与贡献](/zh-CN/others/comminicate.md)
- [roadmap](/zh-CN/roadmap.md)
\ No newline at end of file
## 敬请期待
\ No newline at end of file
![](https://gitee.com/DataLinkDC/dlink/raw/main/dlink-doc/images/main/dinky_principle.png)
<big>**JobManager**</big>
JobManager 作为 Dinky 的作业管理的统一入口,负责 Flink 的各种作业执行方式及其他功能的调度。
<big>**Executor**</big>
Executor 是 Dinky 定制的 FlinkSQL 执行器,来模拟真实的 Flink 执行环境,负责 FlinkSQL 的 Catalog 管理、UDF管理、片段管理、配置管理、语句集管理、语法校验、逻辑验证、计划优化、生成 JobGraph、本地执行、远程提交、SELECT 及 SHOW 预览等核心功能。
<big>**Interceptor**</big>
Interceptor 是 Dinky 的 Flink 执行拦截器,负责对其进行片段解析、UDF注册、SET 和 AGGTABLE 等增强语法解析。
<big>**Gateway**</big>
Gateway 并非是开源项目 flink-sql-gateway,而是 Dinky 自己定制的 Gateway,负责进行基于 Yarn 环境的任务提交与管理,主要有Yarn-Per-Job 和 Yarn-Application 的 FlinkSQL 提交、停止、SavePoint 以及配置测试,而 User Jar 目前只开放了 Yarn-Application 的提交。
<big>**Flink SDK**</big>
Dinky 主要通过调用 flink-client 和 flink-table 模块进行二次开发。
<big>**Yarn SDK**</big>
Dinky 通过调用 flink-yarn 模块进行二次开发。
<big>**Flink API**</big>
Dinky 也支持通过调用 JobManager 的 RestAPI 对任务进行管理等操作,系统配置可以控制开启和停用。
<big>**Yarn-Session**</big>
Dinky 通过已注册的 Flink Session 集群实例可以对 Standalone 和 Yarn-Session 两种集群进行 FlinkSQL 的提交、Catalog 的交互式管理以及对 SELECT 和 SHOW 等语句的执行结果预览。
<big>**Yarn-Per-Job**</big>
Dinky 通过已注册的集群配置来获取对应的 YarnClient 实例,然后将本地解析生产的 JobGraph 与 Configuration 提交至 Yarn 来创建 Flink-Per-Job 应用。
<big>**Yarn-Application**</big>
Dinky 通过已注册的集群配置来获取对应的 YarnClient 实例。对于 User Jar,将 Jar 相关配置与 Configuration 提交至 Yarn 来创建 Flink-Application 应用;对于 Flink SQL,Dinky 则将作业 ID 及数据库连接配置作为 Main 入参和 dlink-app.jar 以及 Configuration 提交至 Yarn 来创建 Flink-Application 应用。
\ No newline at end of file
## 前言
最近小伙伴们一直追问,如何在 IDEA 里去调试 Dlink。本文将指导大家可以成功地搭建调试环境并可以修改相关功能的代码,当然欢迎大家将相关问题修复及新功能的实现贡献到 dev 分支哦。那一起来看看吧!
## 准备
首先,请从 GitHub 中拉取 Dlink 源码,例如:
```bash
git clone https://github.com/DataLinkDC/dlink.git
```
## IntelliJ IDEA
该指南介绍了关于如何设置 IntelliJ IDEA 来进行 Dlink 前后端开发。Eclipse 不建议使用。
以下文档描述了 IntelliJ IDEA 2021.3 (https://www.jetbrains.com/idea/download/) 的设置步骤以及 Dlink 的导入步骤。
所以以下简称 IDEA 来表示 IntelliJ IDEA 。
### 安装 Lombok 插件
IDEA 提供了插件设置来安装 Lombok 插件。如果尚未安装,请在导入 Dlink 之前按照以下说明来进行操作以启用对 Lombok 注解的支持:
1. 转到 IDEA Settings → Plugins 并选择 Marketplace 。
2. 选择并安装 Lombok 插件。
3. 如果出现提示,请重启 IDEA 。
### 导入 Dlink
1. 启动 IDEA 并选择 Open。
2. 选择已克隆的 Dlink 存储库的根文件夹。
3. 等待项目加载完成。
4. 设置 JDK 1.8 和 Maven 3.6.0。
## 前端环境
### 安装 npm
可用版本 7.19.0,安装步骤详情百度。
### 安装 node.js
可用版本 14.17.0,安装步骤详情百度。
### 初始化依赖
```bash
npm install --force
```
## 编译项目
### 编译
IDEA 里 Build → Build Project 。
### 打包
```bash
mvn clean install -Dmaven.test.skip=true
```
打包最终位于根目录 build 下,`dlink-release-0.5.0-SNAPSHOT.tar.gz` 其大小约为 40 M。
### 问题
如果在打包 dlink-web 过程失败,请先单独打包前端进行问题排查。
```bash
npm build
```
## 修改 pom
### dlink-core.pom
```xml
<dependency>
<groupId>com.dlink</groupId>
<artifactId>dlink-client-1.13</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.dlink</groupId>
<artifactId>dlink-executor</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.dlink</groupId>
<artifactId>dlink-connector-jdbc-1.13</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.dlink</groupId>
<artifactId>dlink-function</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.dlink</groupId>
<artifactId>dlink-gateway</artifactId>
<scope>provided</scope>
</dependency>
```
把上述依赖的 scope 注释掉。
### dlink-admin.pom
可在该 pom 下按功能添加其他 Dlink 子组件依赖以及 Flink 和 Hadoop 的第三方依赖。
如使用 ClickHouse 数据源及元数据功能,则添加以下内容:
```xml
<dependency>
<groupId>com.dlink</groupId>
<artifactId>dlink-metadata-clickhouse</artifactId>
<version>0.5.0-SNAPSHOT</version>
</dependency>
```
如使用 Flink Hive 等其他连接器功能,则需要添加相关依赖。
## 修改配置文件
### application.yml
配置数据库连接信息:
```yaml
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/dlink?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: dlink
password: dlink
driver-class-name: com.mysql.cj.jdbc.Driver
```
## 初始化数据库
创建 dlink 用户并在 dlink 数据库中执行 dlink-doc/sql/dlink.sql 文件。
此外 dlink-doc/sql/dlink_history.sql 标识了各版本的升级 sql。
## 启动后端服务
启动 dlink-admin 下的 Dlink 启动类,可见 8888 端口。
## 启动前端服务
```bash
npm start
```
等待几分钟,访问 127.0.0.1:8000 可见登录页。
输入 admin/admin 登录。
## 源码结构
```java
dlink -- 父项目
|-dlink-admin -- 管理中心
|-dlink-app -- Application Jar
|-dlink-assembly -- 打包配置
|-dlink-client -- Client 中心
| |-dlink-client-1.11 -- Client-1.11 实现
| |-dlink-client-1.12 -- Client-1.12 实现
| |-dlink-client-1.13 -- Client-1.13 实现
| |-dlink-client-1.14 -- Client-1.14 实现
|-dlink-common -- 通用中心
|-dlink-connectors -- Connectors 中心
| |-dlink-connector-jdbc -- Jdbc 扩展
|-dlink-core -- 执行中心
|-dlink-doc -- 文档
| |-bin -- 启动脚本
| |-bug -- bug 反馈
| |-config -- 配置文件
| |-doc -- 使用文档
| |-sql -- sql脚本
|-dlink-executor -- 执行中心
|-dlink-extends -- 扩展中心
|-dlink-function -- 函数中心
|-dlink-gateway -- Flink 网关中心
|-dlink-metadata -- 元数据中心
| |-dlink-metadata-base -- 元数据基础组件
| |-dlink-metadata-clickhouse -- 元数据- clickhouse 实现
| |-dlink-metadata-mysql -- 元数据- mysql 实现
| |-dlink-metadata-oracle -- 元数据- oracle 实现
| |-dlink-metadata-postgresql -- 元数据- postgresql 实现
|-dlink-web -- React 前端
|-docs -- 官网文档
```
### dlink-admin
Dlink 的管理中心,标准的 SpringBoot 应用,负责与前端 react 交互。
### dlink-app
Dlink 在 Yarn Application 模式所使用的简化解析包。
### dlink-assembly
项目打包配置,管理了最终 tar.gz 的打包内容。
### dlink-client
Dlink 定制的 Flink 运行环境的实现。用来桥接 Dlink 与不同版本的 Flink 运行环境。
### dlink-common
Dlink 的子项目的公用类及实现项目。
### dlink-connectors
Dlink 的 Connectors,目前实现了 Oracle、Clickhouse、SQLServer。此外 Dlink 可以直接使用 Flink 的所有连接器,在确保依赖不冲突的情况下。
### dlink-core
Dlink 的核心模块,内包含 Flink RestAPI 、集群、SQL解释器、Job统一调度器(JobManager)、会话管理等实现。
### dlink-doc
此模块为打包所需的资源模块,包含启动脚本、sql脚本、配置文件等。
### dlink-executor
Dlink 的执行模块,是从 dlink-core 中拆分出来,内含最核心的 Executor、Interceptor、Operation 等实现。
### dlink-extends
存放 Dlink 扩展其他生态的组件。
### dlink-function
Dlink 所额外提供的 Flink 各种自定义函数。
### dlink-gateway
Dlink 的任务网关,负责把实现不同执行模式的任务提交与管理,目前主要包含 Yarn PerJob 和 Application。
### dlink-metadata
Dlink 的元数据中心,用于实现各种外部数据源对接到 Dlink,以此使用其各种查询、执行等能力。未来用于 Flink Catalog 的预装载等。
### dlink-web
Dlink 的前端项目,基于 Ant Design Pro 5.0.0。Why Not Vue ? React Who Use Who Know。(中式英语 =。=)
Dlink 的前端架构与开发后续文章会详解,本文略。
### docs
Dlink 的官网实现,大佬们可以修改或贡献 markdown。多多分享,让社区发展更快,十分感谢。
## 任务执行路线
同步执行:三角号按钮。
异步提交:小火箭按钮。
### Local
同步执行/异步提交 ==> StudioService ==> JobManager ==> Executor ==> LocalStreamExecutor ==> CustomTableEnvironmentImpl ==> LocalEnvironment
### Standalone
注册集群实例 ==> 同步执行/异步提交 ==> StudioService ==> JobManager ==> Executor ==> RemoteStreamExecutor ==> CustomTableEnvironmentImpl ==> RemoteEnvironment ==> JobGraph ==> Flink Standalone Cluster
### Yarn Session
注册集群实例 ==> 同步执行/异步提交 ==> StudioService ==> JobManager ==> Executor ==> RemoteStreamExecutor ==> CustomTableEnvironmentImpl ==> RemoteEnvironment ==> JobGraph ==> Flink Yarn Session Cluster
### Yarn Per-Job
注册集群配置 ==> 异步提交 ==> StudioService ==> JobManager ==> Executor ==> JobGraph ==> Gateway ==> YarnPerJobGateway==> YarnClient ==> Flink Yarn Per-Job Cluster
### Yarn Application
注册集群配置 ==> 异步提交 ==> StudioService ==> JobManager ==> Executor ==> TaskId & JDBC ==> Gateway ==> YarnApplicationGateway==> YarnClient ==> dlink-app.jar ==> Executor ==> AppStreamExecutor ==> CustomTableEnvironmentImpl ==> LocalEnvironmentFlink Yarn Application Cluster
## 总结
以为内容为大家带来了 Dlink 的基本功能 IDEA 部署调试步骤,并简单介绍了各模块的作用,也清晰的描述了各执行模式下 FlinkSQL 实现免 Jar 提交的代码思路。在了解以上内容后,相信大家已经可以动手改造 Dlink 了,欢迎大家及时加入 Dlink 社区成为核心贡献者,共建共赢。
后续文章将指引大家如何快速拓展 Dlink 的功能组件,敬请期待。
This diff is collapsed.
敬请期待
\ No newline at end of file
## FlinkSQL 编辑器自动补全函数
Dlink-0.3.2 版本上线了一个非常实用的功能——自动补全。
我们在使用 IDEA 等工具时,提示方法并补全、生成的功能大大提升了开发效率。而 Dlink 的目标便是让 FlinkSQL 更加丝滑,所以其提供了自定义的自动补全功能。对比传统的使用 `Java` 字符串来编写 FlinkSQL 的方式,Dlink 的优势是巨大。
在文档中心,我们可以根据自己的需要扩展相应的自动补全规则,如 `UDF``Connector With` 等 FlinkSQL 片段,甚至可以扩展任意可以想象到内容,如注释、模板、配置、算法等。
具体新增规则的示例请看下文描述。
## set 语法来设置执行环境参数
对于一个 FlinkSQL 的任务来说,除了 sql 口径,其任务配置也十分重要。所以 Dlink-0.3.2 版本中提供了 `sql-client``set` 语法,可以通过 `set` 关键字来指定任务的执行配置(如 “ `set table.exec.resource.default-parallelism=2;` ” ),其优先级要高于 Dlink 自身的任务配置(面板右侧)。
那么长的参数一般人谁记得住?等等,别忘了 Dlink 的新功能自动补全~
配置实现输入 `parallelism` 子字符串来自动补全 `table.exec.resource.default-parallelism=`
在文档中心中添加一个规则,名称为 `parallelism`,填充值为 `table.exec.resource.default-parallelism=`,其他内容随意。
保存之后,来到编辑器输入 `par` .
选中要补全的规则后,编辑器中自动补全了 `table.exec.resource.default-parallelism=`
至此,有些小伙伴发现,是不是可以直接定义 `pl2` 来自动生成 `set table.exec.resource.default-parallelism=2;`
当然可以的。
还有小伙伴问,可不可以定义 `pl` 生成 `set table.exec.resource.default-parallelism=;` 后,光标自动定位到 `=``;` 之间?
这个也可以的,只需要定义 `pl` 填充值为 `set table.exec.resource.default-parallelism=${1:};` ,即可实现。
所以说,只要能想象到的都可以定义,这样的 Dlink 你爱了吗?
嘘,还有点小 bug 后续修复呢。如果有什么建议及问题请及时指出哦。
\ No newline at end of file
## 扩展 Connector
将 Flink 集群上已扩展好的 Connector 直接放入 Dlink 的 lib 或者 plugins 下,然后重启即可。定制 Connector 过程同 Flink 官方一样。
## 扩展 Metadata
遵循SPI。
\ No newline at end of file
## 敬请期待
\ No newline at end of file
## 敬请期待
\ No newline at end of file
## 背景
Apache Doris是一个现代化的MPP分析型数据库产品。仅需亚秒级响应时间即可获得查询结果,有效地支持实时数据分析。例如固定历史报表,实时数据分析,交互式数据分析和探索式数据分析等。
目前 Doris 的生态正在建设中,本文将分享如何基于 Dlink 实现 Mysql 变动数据通过 Flink 实时入库 Doris。
## 准备
老规矩,列清各组件版本:
| 组件 | 版本 |
| :-------------: | :----------: |
| Flink | 1.13.3 |
| Flink-mysql-cdc | 2.1.0 |
| Doris | 0.15.1-rc09 |
| doris-flink | 1.0-SNAPSHOT |
| Mysql | 8.0.13 |
| Dlink | 0.4.0 |
需要注意的是,本文的 Doris 是基于 OracleJDK1.8 和 Scala 2.11 通过源码进行编译打包的,所以所有组件的 scala 均为 2.11,此处和 Doris 社区略有不同。
## 部署
本文的 Flink 和 Doris 的部署不做描述,详情请查阅官网。
[Doris]: https://doris.apache.org/master/zh-CN/extending-doris/flink-doris-connector.html#%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95 "Doris"
本文在 Dlink 部署成功的基础上进行,如需查看具体部署步骤,请阅读《flink sql 知其所以然(十六):flink sql 开发企业级利器之 Dlink》。
Dlink 的 plugins 下添加 `doris-flink-1.0-SNAPSHOT.jar``flink-sql-connector-mysql-cdc-2.1.0.jar` 。重启 Dlink。
```java
plugins/ -- Flink 相关扩展
|- doris-flink-1.0-SNAPSHOT.jar
|- flink-csv-1.13.3.jar
|- flink-dist_2.11-1.13.3.jar
|- flink-format-changelog-json-2.1.0.jar
|- flink-json-1.13.3.jar
|- flink-shaded-zookeeper-3.4.14.jar
|- flink-sql-connector-mysql-cdc-2.1.0.jar
|- flink-table_2.11-1.13.3.jar
|- flink-table-blink_2.11-1.13.3.jar
```
当然,如果您想直接使用 FLINK_HOME 的话,可以在 `auto.sh` 文件中 `SETTING` 变量添加`$FLINK_HOME/lib`
## 数据表
### 学生表 (student)
```sql
-- Mysql
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`sid` int(11) NOT NULL,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`sid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `student` VALUES (1, '小红');
INSERT INTO `student` VALUES (2, '小黑');
INSERT INTO `student` VALUES (3, '小黄');
```
### 成绩表(score)
```sql
-- Mysql
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (
`cid` int(11) NOT NULL,
`sid` int(11) NULL DEFAULT NULL,
`cls` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`score` int(11) NULL DEFAULT NULL,
PRIMARY KEY (`cid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `score` VALUES (1, 1, 'chinese', 90);
INSERT INTO `score` VALUES (2, 1, 'math', 95);
INSERT INTO `score` VALUES (3, 1, 'english', 93);
INSERT INTO `score` VALUES (4, 2, 'chinese', 92);
INSERT INTO `score` VALUES (5, 2, 'math', 75);
INSERT INTO `score` VALUES (6, 2, 'english', 80);
INSERT INTO `score` VALUES (7, 3, 'chinese', 100);
INSERT INTO `score` VALUES (8, 3, 'math', 60);
```
### 学生成绩宽表(scoreinfo)
```sql
-- Doris
CREATE TABLE scoreinfo
(
cid INT,
sid INT,
name VARCHAR(32),
cls VARCHAR(32),
score INT
)
UNIQUE KEY(cid)
DISTRIBUTED BY HASH(cid) BUCKETS 10
PROPERTIES("replication_num" = "1");
```
## FlinkSQL
```sql
CREATE TABLE student (
sid INT,
name STRING,
PRIMARY KEY (sid) NOT ENFORCED
) WITH (
'connector' = 'mysql-cdc',
'hostname' = '127.0.0.1',
'port' = '3306',
'username' = 'test',
'password' = '123456',
'database-name' = 'test',
'table-name' = 'student');
CREATE TABLE score (
cid INT,
sid INT,
cls STRING,
score INT,
PRIMARY KEY (cid) NOT ENFORCED
) WITH (
'connector' = 'mysql-cdc',
'hostname' = '127.0.0.1',
'port' = '3306',
'username' = 'test',
'password' = '123456',
'database-name' = 'test',
'table-name' = 'score');
CREATE TABLE scoreinfo (
cid INT,
sid INT,
name STRING,
cls STRING,
score INT,
PRIMARY KEY (cid) NOT ENFORCED
) WITH (
'connector' = 'doris',
'fenodes' = '127.0.0.1:8030' ,
'table.identifier' = 'test.scoreinfo',
'username' = 'root',
'password'=''
);
insert into scoreinfo
select
a.cid,a.sid,b.name,a.cls,a.score
from score a
left join student b on a.sid = b.sid
```
## 调试
### 在 Dlink 中提交
本示例采用了 yarn-session 的方式进行提交。
![image-20211218134246511](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTp0RDozicic8lrYycianYsUN9ibG3QjNqVbMk7L41wHykKnkV0YxDCVSYj68HlFWylpYckkXicgnTDU7uQ/0?wx_fmt=png)
### FlinkWebUI
![image-20211218134439699](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTp0RDozicic8lrYycianYsUN9ibn1jXbvKznaF8Tm4AxxvYYDI0fEtXbGm0XUeXhGp44KMlPdoOzjvtHQ/0?wx_fmt=png)
上图可见,流任务已经成功被 Dlink 提交的远程集群了。
### Doris 查询
![image-20211218135404787](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTp0RDozicic8lrYycianYsUN9iblKTY6o9fWZxFDQYC19wKVFRGDuUBgNOZxm14sWjyr8tUY7RDeUiaEUw/0?wx_fmt=png)
上图可见,Doris 已经被写入了历史全量数据。
### 增量测试
在 Mysql 中执行新增语句:
```sql
INSERT INTO `score` VALUES (9, 3, 'english', 100);
```
Doris 成功被追加:
![image-20211218135545742](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTp0RDozicic8lrYycianYsUN9ibvE4qyQ9ttf2kNZ3raEgabvh442HfiaIfm2l5dhdFmWoGiaHMlvcQmocw/0?wx_fmt=png)
### 变动测试
在 Mysql 中执行新增语句:
```sql
update score set score = 100 where cid = 1
```
Doris 成功被修改:
![image-20211218135949764](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTp0RDozicic8lrYycianYsUN9ib3liaIvXQcCSboO4IoeJhtTRa38ukNogtFzwg31mNEFwRcJ1wGNIhQkQ/0?wx_fmt=png)
## 扩展 Flink-CDC
`flink-sql-connector-mysql-cdc-2.1.0.jar` 等 CDC 依赖加入到 Dlink 的 `plugins` 下即可。
\ No newline at end of file
## 扩展其他版本的 Flink
Flink 的版本取决于 lib 下的 dlink-client-1.13.jar。当前版本默认为 Flink 1.13.3 API。向其他版本的集群提交任务可能存在问题,已实现 1.11、1.12、1.13, 1.14,切换版本时只需要将对应依赖在lib下进行替换,然后重启即可。
切换版本时需要同时更新 plugins 下的 Flink 依赖。
\ No newline at end of file
## 前言
最近有很多小伙伴问,dlink 如何连接 Hive 进行数据开发?
关于 dlink 连接 Hive 的步骤同 Flink 的 `sql-client ` ,只不过它没有默认加载的配置文件。下文将详细讲述对 Hive 操作的全过程。
## 准备工作
由于搭建 Hive 的开发环境会涉及到重多组件和插件,那其版本对应问题也是至关重要,它能帮我们避免很多不必要的问题,当然小版本号之间具备一定的兼容性。
我们先来梳理下本教程的各个组件版本:
| 组件 | 版本 |
| :----: | :----: |
| Dlink | 0.3.2 |
| Flink | 1.12.4 |
| Hadoop | 2.7.7 |
| Hive | 2.3.6 |
| Mysql | 8.0.15 |
再来梳理下本教程的各个插件版本:
| 所属组件 | 插件 | 版本 |
| :-----------: | :------------------------: | :-------------------: |
| Dlink | dlink-client | 1.12 |
| Dlink & Flink | flink-sql-connector-hive | 2.3.6_2.11-1.12.3 |
| Dlink & Flink | flink-shaded-hadoop-3-uber | 3.1.1.7.2.8.0-224-9.0 |
## 部署扩展
部署扩展的工作非常简单(前提是 Dlink 部署完成并成功连接 Flink 集群,相关部署步骤请查看《Dlink实时计算平台——部署篇》),只需要把 `flink-sql-connector-hive-2.3.6_2.11-1.12.3.jar``flink-shaded-hadoop-3-uber-3.1.1.7.2.8.0-224-9.0.jar` 两个插件分别加入到 Dlink 的 plugins 目录与 Flink 的 lib 目录下即可,然后重启二者。当然,还需要放置 `hive-site.xml`,位置自定义,Dlink 可以访问到即可。
## 创建 Hive Catalog
已知,Hive 已经新建了一个数据库实例 `hdb` ,创建了一张表 `htest`,列为 `name``age`,存储位置默认为 `hdfs:///usr/local/hadoop/hive-2.3.9/warehouse/hdb.db` 。(此处为何 2.3.9 呢,因为 `flink-sql-connector-hive-2.3.6_2.11-1.12.3.jar` 只支持到最高版本 2.3.6,小编先装了个 2.3.9 后装了个 2.3.6,尴尬 > _ < ~)
```sql
CREATE CATALOG myhive WITH (
'type' = 'hive',
'default-database' = 'hdb',
'hive-conf-dir' = '/usr/local/dlink/hive-conf'
);
-- set the HiveCatalog as the current catalog of the session
USE CATALOG myhive;
select * from htest
```
在 Dlink 编辑器中输入以上 sql ,创建 Hive Catalog,并查询一张表。
其中,`hive-conf-dir` 需要指定 `hive-site.xml` 的路径,其他同 Flink 官方解释。
执行查询后(记得选中执行配置的预览结果),可以从查询结果中查看到 htest 表中只有一条数据。(这是正确的,因为小编太懒了,只随手模拟了一条数据)
此时可以使用 FlinkSQL 愉快地操作 Hive 的数据了。
## 使用 Hive Dialect
很熟悉 Hive 的语法以及需要对 Hive 执行其自身特性的语句怎么办?
同 Flink 官方解释一样,只需要使用 `SET table.sql-dialect=hive` 来启用方言即可。注意有两种方言 `default``hive` ,它们的使用可以随意切换哦~
```sql
CREATE CATALOG myhive WITH (
'type' = 'hive',
'default-database' = 'hdb',
'hive-conf-dir' = '/usr/local/dlink/hive-conf'
);
-- set the HiveCatalog as the current catalog of the session
USE CATALOG myhive;
-- set hive dialect
SET table.sql-dialect=hive;
-- alter table location
alter table htest set location 'hdfs:///usr/htest';
-- set default dialect
SET table.sql-dialect=default;
select * from htest;
```
上述 sql 中添加了 Hive Dialect 的使用,FlinkSQL 本身不支持 `alter table .. set location ..` 的语法,使用 Hive Dialect 则可以实现语法的切换。本 sql 内容对 htest 表进行存储位置的改变,将其更改为一个新的路径,然后再执行查询。
由上图可见,被更改过 location 的 htest 此时查询没有数据,是正确的。
然后将 location 更改为之前的路径,再执行查询,则可见原来的那条数据,如下图所示。
## 总结
由上所知,Dlink 以更加友好的交互方式展现了 Flink 集成 Hive 的部分功能,当然其他更多的 Hive 功能需要您自己在使用的过程中去体验与挖掘。
目前,Dlink 支持 Flink 绝大多数特性与功能,集成与拓展方式与 Flink 官方文档描述一致,只需要在 Dlink 的 plugins 目录下添加依赖即可。
\ No newline at end of file
This diff is collapsed.
## 敬请期待
\ No newline at end of file
## 扩展 UDF
将 Flink 集群上已扩展好的 UDF 直接放入 Dlink 的 lib 或者 plugins 下,然后重启即可。定制 UDF 过程同 Flink 官方一样。
注意:以下功能均为对应版本已实现的功能,实测可用。
| 应用 | 方向 | 功能 | 进展 |
|:-------:|:----------:|-------------------------------------------|:-----:|
| 开发中心 | FlinkSQL | 支持 sql-client 所有语法 | 0.4.0 |
| | | 支持 Flink 所有 Configuration | 0.4.0 |
| | | 支持 Flink 所有 Connector | 0.4.0 |
| | | 支持 SELECT、SHOW 等查询实时预览 | 0.4.0 |
| | | 支持 INSERT 语句集 | 0.4.0 |
| | | 新增 SQL 片段语法 | 0.4.0 |
| | | 新增 AGGTABLE 表值聚合语法及 UDATF 支持 | 0.4.0 |
| | | 新增 CDCSOURCE 多源合并语法支持 | 0.6.0 |
| | | 新增 FlinkSQLEnv 执行环境复用 | 0.5.0 |
| | | 新增 Flink Catalog 交互查询 | 0.4.0 |
| | | 新增 执行环境的共享与私有会话机制 | 0.4.0 |
| | | 新增 多种方言的作业目录管理(FlinkSQL、SQL、Java) | 0.5.0 |
| | | 新增 作业配置与执行配置管理 | 0.4.0 |
| | | 新增 基于 Explain 的语法校验与逻辑解析 | 0.4.0 |
| | | 新增 JobPlan 图预览 | 0.5.0 |
| | | 新增 基于 StreamGraph 的表级血缘分析 | 0.4.0 |
| | | 新增 基于上下文元数据自动提示与补全 | 0.4.0 |
| | | 新增 自定义规则的自动提示与补全 | 0.4.0 |
| | | 新增 关键字高亮与代码缩略图 | 0.4.0 |
| | | 新增 选中片段执行 | 0.4.0 |
| | | 新增 布局拖拽 | 0.4.0 |
| | | 新增 SQL导出 | 0.5.0 |
| | | 新增 快捷键保存、校验、美化 | 0.5.0 |
| | | 支持 local 模式下 FlinkSQL 提交 | 0.4.0 |
| | | 支持 standalone 模式下 FlinkSQL 提交 | 0.4.0 |
| | | 支持 yarn session 模式下 FlinkSQL 提交 | 0.4.0 |
| | | 支持 yarn per-job 模式下 FlinkSQL 提交 | 0.4.0 |
| | | 支持 yarn application 模式下 FlinkSQL 提交 | 0.4.0 |
| | | 支持 kubernetes session 模式下 FlinkSQL 提交 | 0.5.0 |
| | | 支持 kubernetes application 模式下 FlinkSQL 提交 | 0.5.0 |
| | | 支持 UDF Java 方言Local模式在线编写、调试、动态加载 | 0.5.0 |
| | Flink 作业 | 支持 yarn application 模式下 Jar 提交 | 0.4.0 |
| | | 支持 k8s application 模式下 Jar 提交 | 0.5.0 |
| | | 支持 作业 Cancel | 0.4.0 |
| | | 支持 作业 SavePoint 的 Cancel、Stop、Trigger | 0.4.0 |
| | | 新增 作业自动从 SavePoint 恢复机制(包含最近、最早、指定一次) | 0.4.0 |
| | Flink 集群 | 支持 查看已注册集群的作业列表与运维 | 0.4.0 |
| | | 新增 自动注册 Yarn 创建的集群 | 0.4.0 |
| | SQL | 新增 外部数据源的 SQL 校验 | 0.5.0 |
| | | 新增 外部数据源的 SQL 执行与预览 | 0.5.0 |
| | BI | 新增 折线图的渲染 | 0.5.0 |
| | | 新增 条形图图的渲染 | 0.5.0 |
| | | 新增 饼图的渲染 | 0.5.0 |
| | 元数据 | 新增 查询外部数据源的元数据信息 | 0.4.0 |
| | | 新增 FlinkSQL 和 SQL 的自动生成 | 0.6.0 |
| | 归档 | 新增 执行与提交历史 | 0.4.0 |
| 运维中心 | 暂无 | 暂无 | 0.4.0 |
| 注册中心 | Flink 集群实例 | 新增 外部 Flink 集群实例注册 | 0.4.0 |
| | | 新增 外部 Flink 集群实例心态检测与版本获取 | 0.4.0 |
| | | 新增 外部 Flink 集群手动一键回收 | 0.4.0 |
| | Flink 集群配置 | 新增 Flink On Yarn 集群配置注册及测试 | 0.4.0 |
| | User Jar | 新增 外部 User Jar 注册 | 0.4.0 |
| | 数据源 | 新增 Mysql 数据源注册及测试 | 0.4.0 |
| | | 新增 Oracle 数据源注册及测试 | 0.4.0 |
| | | 新增 postgreSql 数据源注册及测试 | 0.4.0 |
| | | 新增 ClickHouse 数据源注册及测试 | 0.4.0 |
| OpenApi | 调度 | 新增 submitTask 调度接口 | 0.5.0 |
| | FlinkSQL | 新增 executeSql 提交接口 | 0.5.0 |
| | | 新增 explainSql 验证接口 | 0.5.0 |
| | | 新增 getJobPlan 计划接口 | 0.5.0 |
| | | 新增 getStreamGraph 计划接口 | 0.5.0 |
| | | 新增 getJobData 数据接口 | 0.5.0 |
| | Flink | 新增 executeJar 提交接口 | 0.5.0 |
| | | 新增 cancel 停止接口 | 0.5.0 |
| | | 新增 savepoint 触发接口 | 0.5.0 |
| 关于 | 关于 Dinky | 版本更新记录
\ No newline at end of file
## Dinky介绍
实时即未来,Dinky 为 Apache Flink 而生,让 Flink SQL 纵享丝滑,并致力于实时计算平台建设。
Dinky 架构于 Apache Flink,增强 Flink 的应用与体验,探索流式数仓。即站在巨人肩膀上创新与实践,Dinky 在未来批流一体的发展趋势下潜力无限。
最后,Dinky 的发展皆归功于 Apache Flink 等其他优秀的开源项目的指导与成果。
## Dinky由来
Dinky(原 Dlink):
1.Dinky 英译为 “ 小巧而精致的 ” ,最直观的表明了它的特征:轻量级但又具备复杂的大数据开发能力。
2.为 “ Data Integrate No Knotty ” 的首字母组合,英译 “ 数据整合不难 ”,寓意 “ 易于建设批流一体平台及应用 ”。
3.从 Dlink 改名为 Dinky 过渡平滑,更加形象的阐明了开源项目的目标,始终指引参与者们 “不忘初心,方得始终 ”。
\ No newline at end of file
欢迎您加入社区交流分享,也欢迎您为社区贡献自己的力量。
在此非常感谢大家的支持~
QQ社区群:**543709668**,申请备注 “ Dinky ”,不写不批
微信社区群(推荐):添加微信号 wenmo_ai 邀请进群,申请备注 “ Dinky + 企业名 + 职位”,不写不批
公众号(最新消息获取建议关注):[DataLink数据中台](https://mmbiz.qpic.cn/mmbiz_jpg/dyicwnSlTFTp6w4PuJruFaLV6uShCJDkzqwtnbQJrQ90yKDuuIC8tyMU5DK69XZibibx7EPPBRQ3ic81se5UQYs21g/0?wx_fmt=jpeg)
\ No newline at end of file
1.任务生命周期管理
2.作业监控及运维
3.流作业自动恢复
4.作业日志查看
5.钉钉报警和推送
\ No newline at end of file
[Apache Flink](https://github.com/apache/flink)
[Mybatis Plus](https://github.com/baomidou/mybatis-plus)
[ant-design-pro](https://github.com/ant-design/ant-design-pro)
[Monaco Editor](https://github.com/Microsoft/monaco-editor)
[SpringBoot]()
[docsify](https://github.com/docsifyjs/docsify/)
此外,感谢 [JetBrains](https://www.jetbrains.com/?from=dlink) 提供的免费开源 License 赞助
[![JetBrains](https://github.com/DataLinkDC/dlink/raw/main/dlink-doc/images/main/jetbrains.svg)](https://www.jetbrains.com/?from=dlink)
\ No newline at end of file
This diff is collapsed.
## Dlink 是什么
Dlink 是一个基于 Apache Flink 二次开发的网页版的 FlinkSQL Studio,可以连接多个 Flink 集群实例,并在线开发、执行、提交 FlinkSQL 语句以及预览其运行结果,支持 Flink 官方所有语法并进行了些许增强。
## 与 Flink 的不同
Dlink 基于 Flink 源码二次开发,主要应用于 SQL 任务的管理与执行。以下将介绍 Dlink-0.2.3 与 Flink 的不同。
### Dlink 的原理
![](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTo5cwuZy7GSLibw5J7Lx6cicx0vXaDHqn5VrrDJ9d3hcEicbEVO77NcP6bOylC9bOpuibM08JJ8bh8XQQ/0?wx_fmt=png)
### Dlink 的 FlinkSQL 执行原理
![](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqVImq5JvQzZ7oMqpnQ2NVHdmM6Pfib63atzoWNIqK7Ue6p9KfdibV889sOcZJ1Olw3kLHLmHZiab3Tg/0?wx_fmt=png)
### Connector 的扩展
Dlink 的 Connector 的使用与扩展同 Flink 的完全一致,即当使用 Flink 集成 Dlink 时,只需要将 Flink 扩展的依赖加入 Dlink 的 lib 下即可。
当然,Dlink 自身源码也提供了一些 Connector ,它们遵循 Flink 的扩展要求,可以直接被加入到 Flink 的 lib 下进行使用。
### 多版本支持
Dlink 的单机版只能同时稳定连接同一大版本号下的不同版本的 Flink 集群实例,连接其他大版本号的集群实例在提交任务时可能存在问题;而 DataLink 中的 Dlink 微服务版可以同时稳定连接所有版本号的 Flink 集群实例。
Dlink 提供了多版本的 `dlink-client.jar`,根据需求选择对应版本的依赖加入到 lib 下即可稳定连接该版本的 Flink 集群实例。
### Catalog 共享
Dlink 提供了共享会话对 Flink 的 Catalog、环境配置等进行了长期管理,可以实现团队开发共享 Catalog 的效果。
### Sql 语法增强
Dlink 对 FlinkSQL 的语法进行增强,主要表现为 Sql 片段与表值聚合 Sql 化。
#### Sql 片段
```sql
sf:=select * from;tb:=student;
${sf} ${tb}
## 效果等同于
select * from student
```
#### 表值聚合
```sql
CREATE AGGTABLE aggdemo AS
SELECT myField,value,rank
FROM MyTable
GROUP BY myField
AGG BY TOP2(value) as (value,rank);
```
### 同步执行结果预览
Dlink 可以对同步执行的 FlinkSQL 进行运行完成的结果预览,同 `sql-client`
## 概念原理
在 Dlink 中具有六个概念,当熟悉他们的原理时,可以搭配出更强大的使用效果。
### 本地环境
本地环境即为`LocalEnvironment`,是在本地模式运行 Flink 程序的句柄,在本地的 JVM (standalone 或嵌入其他程序)里运行程序,通过调用`ExecutionEnvironment.createLocalEnvironment()`方法来实现。
Dlink 通过本地环境来实现隔离调试,本地环境执行时所需要的 `connector` 等资源在 `lib` 目录下引入。本地环境执行过程包含完整的 sql 执行过程。
### 远程环境
远程环境即为`RemoteEnvironment`,是在远程模式中向指定集群提交 Flink 程序的句柄,在目标集群的环境里运行程序,通过调用`ExecutionEnvironment.createRemoteEnvironment(host,port)`方法来实现,其中 host 为 `rest.address` ,port 为 `rest.port`
Dlink 可以对任意 standalone、on yarn等运行模式的远程集群进行 sql 提交。远程环境执行过程只包含 sql 任务的准备工作,即解析、优化、转化物理执行计划、生成算子、提交作业执行图。所以远程环境执行时所需要的 connector 等资源也需要在 lib 目录下引入。
### 共享会话
共享会话为用户与执行环境的操作会话,主要包含 Catalog、片段、执行环境配置等内容。可以认为官方的 `sql-client` 是一个会话,保留了本次命令窗口的操作结果,当退出 `sql-client` 后,会话结束。
Dlink 的共享会话相当于可以启动多个 `sql-client` 来进行会话操作,并且其他用户可以使用您的会话 key ,在对应环境中共享您的会话的所有信息。例如,通过执行环境 + 共享会话可以确定唯一的 Catalog。
### 临时会话
临时会话指不启用共享会话,您每次交互执行操作时,都会创建临时的独立的会话,操作解释后立即释放,适合作业解耦处理。
Dlink 的临时会话相当于只启动一个 `sql-client` ,执行完语句后立即关闭再启动。
### 同步执行
同步执行指通过 Studio 进行操作时为同步等待,当语句运行完成后返回运行结果。
Dlink 的语句与官方语句一致,并做了些许增强。Dlink 将所有语句划分为三种类型,即 `DDL``DQL``DML` 。对于同步执行来说, `DDL``DQL` 均为等待语句执行完成后返回运行结果,而 `DML` 语句则立即返回异步提交操作的执行结果。
### 异步提交
异步提交指通过 Studio 进行操作时为异步操作,当语句被执行后立马返回操作执行结果。
对于三种语句类型,Dlink 的异步提交均立即返回异步操作的执行结果。当前版本的 Dlink 的异步提交不进行历史记录。
### 搭配使用
| 执行环境 | 会话 | 运行方式 | 适用场景 |
| -------- | -------- | -------- | ------------------------------------------------------------ |
| 本地环境 | 临时会话 | 同步执行 | 无集群或集群不可用的情况下单独开发FlinkSQL作业,需要查看运行结果 |
| 本地环境 | 共享会话 | 同步执行 | 无集群或集群不可用的情况下复用Catalog或让同事排查bug,需要查看运行结果 |
| 本地环境 | 临时会话 | 异步提交 | 无集群或集群不可用的情况下快速启动一个作业,不需要查看运行结果 |
| 本地环境 | 共享会话 | 异步提交 | 共享会话效果无效 |
| 远程环境 | 临时会话 | 同步执行 | 依靠集群单独开发FlinkSQL作业,需要查看运行结果 |
| 远程环境 | 共享会话 | 同步执行 | 依靠集群复用Catalog或让同事排查bug,需要查看运行结果 |
| 远程环境 | 临时会话 | 异步提交 | 快速向集群提交任务,不需要查看运行结果 |
| 远程环境 | 共享会话 | 异步提交 | 共享会话效果无效 |
## 源码扩展
Dlink 的源码是非常简单的, Spring Boot 项目轻松上手。
### 项目结构
```java
dlink -- 父项目
|-dlink-admin -- 管理中心
|-dlink-client -- Client 中心
| |-dlink-client-1.12 -- Client-1.12 实现
| |-dlink-client-1.13 -- Client-1.13 实现
|-dlink-connectors -- Connectors 中心
| |-dlink-connector-jdbc -- Jdbc 扩展
|-dlink-core -- 执行中心
|-dlink-doc -- 文档
| |-bin -- 启动脚本
| |-bug -- bug 反馈
| |-config -- 配置文件
| |-doc -- 使用文档
| |-sql -- sql脚本
|-dlink-function -- 函数中心
|-dlink-web -- React 前端
```
### 模块介绍
#### dlink-admin
该模块为管理模块,基于 `Spring Boot + MybatisPlus` 框架开发,目前版本对作业、目录、文档、集群、语句等功能模块进行管理。
#### dlink-client
该模块为 Client 的封装模块,依赖了 `flink-client`,并自定义了新功能的实现如 `CustomTableEnvironmentImpl``SqlManager ` 等。
通过该模块完成对不同版本的 Flink 集群的适配工作。
#### dlink-connectors
该模块为 Connector 的封装模块,用于扩展 Flink 的 `Connector`
#### dlink-core
该模块为 Dlink 的核心处理模块,里面涉及了共享会话、拦截器、执行器等任务执行过程使用到的功能。
#### dlink-doc
该模块为 Dlink 的文档模块,部署相关资源以及使用文档等资料都在该模块下。
#### dlink-function
该模块为 UDF 的封装模块,用于扩展 Flink 的 `UDF`
#### dlink-web
该模块为 Dlink 的前端工程,基于 `Ant Design Pro` 开发,属于 `React` 技术栈,其中的 Sql 在线编辑器是基于 `Monaco Editor` 开发。
## Yarn-Session 实践
### 注册 Session 集群
![image-20211128225423360](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6iaAIees3BsUONXbIocdRUI0WWVSzibPpltibBbMmWgfWJ0AklUlPF9Ugw/0?wx_fmt=png)
进入集群中心进行远程集群的注册。点击新建按钮配置远程集群的参数。图中示例配置了一个 Flink on Yarn 的高可用集群,其中 JobManager HA 地址需要填写集群中所有可能被作为 JobManager 的 RestAPI 地址,多个地址间使用英文逗号分隔。表单提交时可能需要较长时间的等待,因为 dlink 正在努力的计算当前活跃的 JobManager 地址。
保存成功后,页面将展示出当前的 JobManager 地址以及被注册集群的版本号,状态为正常时表示可用。
注意:只有具备 JobManager 实例的 Flink 集群才可以被成功注册到 dlink 中。( Yarn-Per-Job 和 Yarn-Application 也具有 JobManager,当然也可以手动注册,但无法提交任务)
如状态异常时,请检查被注册的 Flink 集群地址是否能正常访问,默认端口号为8081,可能更改配置后发生了变化,查看位置为 Flink Web 的 JobManager 的 Configuration 中的 rest 相关属性。
### 执行 Hello World
万物都具有 Hello World 的第一步,当然 dlink 也是具有的。我们选取了基于 datagen 的流查询作为第一行 Flink Sql。具体如下:
```sql
CREATE TABLE Orders (
order_number BIGINT,
price DECIMAL(32,2),
buyer ROW<first_name STRING, last_name STRING>,
order_time TIMESTAMP(3)
) WITH (
'connector' = 'datagen',
'rows-per-second' = '1'
);
select order_number,price,order_time from Orders
```
该例子使用到了 datagen,需要在 dlink 的 plugins 目录下添加 flink-table.jar。
点击 Flink Sql Studio 进入开发页面:
![image-20211128230416447](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6RuS3kibG0jJnDjoUicX7sN63UN6j7Osg4lWh5SelOw0hp4Vj6icFAuDkA/0?wx_fmt=png)
在中央的编辑器中编辑 Flink Sql。
右边作业配置:
1. 执行模式:选中 yarn-session;
2. Flink 集群:选中上文注册的测试集群;
3. SavePoint 策略:选中禁用;
4. 按需进行其他配置。
右边执行配置:
1. 预览结果:启用;
2. 远程执行:启用。
点击快捷操作栏的三角号按钮同步执行该 FlinkSQL 任务。
### 预览数据
![image-20211128231230335](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6leQx4mfqsdwVftlEUXSFWnEzOTJGrCGHUKo98SpIn11WkZquEwwjpg/0?wx_fmt=png)
切换到历史选项卡点击刷新可以查看提交进度。切换到结果选项卡,等待片刻点击获取最新数据即可预览 SELECT。
### 停止任务
![image-20211128231523703](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6koYZDQqzsawPOCTP64ycdUZlib5oJA9vo9fpX43DNTmibY60ojZv44zQ/0?wx_fmt=png)
切换到进程选项卡,选则对应的集群实例,查询当前任务,可执行停止操作。
## Yarn-Per-Job 实践
### 注册集群配置
进入集群中心——集群配置,注册配置。
![image-20211128231914983](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6Vcw98k4yfgR2dSo3BUhxdtpRdd8A7NLyXkZhFibhiciarp9DTY415UehQ/0?wx_fmt=png)
1. Hadoop 配置文件路径:指定配置文件路径(末尾无/),需要包含以下文件:core-site.xml,hdfs-site.xml,yarn-site.xml;
2. Flink 配置 lib 路径:指定 lib 的 hdfs 路径(末尾无/),需要包含 Flink 运行时的所有依赖,即 flink 的 lib 目录下的所有 jar;
3. Flink 配置文件路径:指定配置文件 flink-conf.yaml 的具体路径(末尾无/);
4. 按需配置其他参数(重写效果);
5. 配置基本信息(标识、名称等);
6. 点击测试或者保存。
### 执行升级版 Hello World
之前的 hello world 是个 SELECT 任务,改良下变为 INSERT 任务:
```sql
CREATE TABLE Orders (
order_number INT,
price DECIMAL(32,2),
order_time TIMESTAMP(3)
) WITH (
'connector' = 'datagen',
'rows-per-second' = '1',
'fields.order_number.kind' = 'sequence',
'fields.order_number.start' = '1',
'fields.order_number.end' = '1000'
);
CREATE TABLE pt (
ordertotal INT,
numtotal INT
) WITH (
'connector' = 'print'
);
insert into pt select 1 as ordertotal ,sum(order_number)*2 as numtotal from Orders
```
![image-20211128232734409](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6HU0ics1Er4CibiaRc8jndmc3rHX9J3ArSp4QF2qyARR46hPzOh0kDbYYQ/0?wx_fmt=png)
编写 Flink SQL;
作业配置:
1. 执行模式:选中 yarn-per-job ;
2. Flink 集群配置:选中刚刚注册的配置;
3. SavePoint 策略:选中最近一次。
快捷操作栏:
1. 点击保存按钮保存当前所有配置;
2. 点击小火箭异步提交作业。
![image-20211128233423276](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6OsQDhibZQbh1nXrx9d0OBiaiaibnIMnLcSfT3MNxhY9CEyAxrA9NLczohA/0?wx_fmt=png)
注意,执行历史需要手动刷新。
### 自动注册集群
点击集群中心——集群实例,即可发现自动注册的 Per-Job 集群。
![image-20211128234056101](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6zCpJ7Knv1WYHTUxHt8iagpNNjRAPsPiaqBoD2xkLupcM7Op1Q48tb6ibQ/0?wx_fmt=png)
### 查看 Flink Web UI
提交成功后,点击历史的蓝色地址即可快速打开 Flink Web UI地址。
![image-20211128233735071](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6AQq5qVMAkwUM8WiaLnTrzDnSlLicTJZjWxowdW9dKUibNp33nrnHpL2Ng/0?wx_fmt=png)
### 从 Savepoint 处停止
在进程选项卡中选择自动注册的 Per-Job 集群,查看任务并 SavePoint-Cancel。
![image-20211128234321656](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6jDvzsoHias24jAY6ElCFj6lFCX1jjdGmoGGa5vI5xgNSEUzyEiaZEZNA/0?wx_fmt=png)
在右侧保存点选项卡可以查看该任务的所有 SavePoint 记录。
![image-20211128234619397](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6TGv1Gun2rB35Upv8hnsoeHzeDdFT4Ryag8icHz7BrzhE4YELiaMk7KYw/0?wx_fmt=png)
### 从 SavePoint 处启动
再次点击小火箭提交任务。
![image-20211128235430989](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6WTchGqUeBiaNY5hT6tjQ611UaQA3jawOS4uQHrN65icia3d4qLAfZMEibg/0?wx_fmt=png)
查看对应 Flink Web UI,从 Stdout 输出中证实 SavePoint 恢复成功。
## Yarn-Application 实践
### 注册集群配置
使用之前注册的集群配置即可。
### 上传 dlink-app.jar
第一次使用时,需要将 dlink-app.jar 上传到 hdfs 指定目录,目录可修改如下:
![image-20211128235914006](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6loq9rmu2tlkDvgSoD6WSlNBrniabV7MibNtSQrA2wKnCjKOzUGGiawW4g/0?wx_fmt=png)
50070 端口 浏览文件系统如下:
![image-20211129000047789](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X68kEAFYLBQpGcamP5djEaj9LiaLqlQCxVIXrbdFbgCb4Ct25HTAHCRIw/0?wx_fmt=png)
### 执行升级版 Hello World
作业配置:
1. 执行模式:选中 yarn-application ;
快捷操作栏:
1. 点击保存按钮保存当前所有配置;
2. 点击小火箭异步提交作业。
### 其他同 Per-Job
其他操作同 yarn-per-job ,本文不再做描述。
### 提交 User Jar
作业中心—— Jar 管理,注册 User Jar 配置。
![image-20211129000804888](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6lGkXGSXSP9JyWTxc5rrh8zD9y5XYR9HkKxRRDicbUQicSFhaAAR0Ulxw/0?wx_fmt=png)
右边作业配置的可执行 Jar 选择刚刚注册的 Jar 配置,保存后点击小火箭提交作业。
![image-20211129000933320](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6qyajpuR1OPlsFynwibdSRX3ECcRGGJPmutqyaibJbFS8HYCYic0rswuiaw/0?wx_fmt=png)
由于提交了个批作业,Yarn 可以发现已经执行完成并销毁集群了。
![image-20211129001241101](https://mmbiz.qpic.cn/mmbiz_png/dyicwnSlTFTqSas1xKRbibnZdGY1iagC3X6UJbUIgHTSJHN29zicKuf761ERGnZHibMMURhuFpL2Iiah9LSiceTXIrAyg/0?wx_fmt=png)
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment