前序:FlinkCDC-Hudi系列文章:
FlinkCDC-Hudi:Mysql数据实时入湖全攻略一:初试风云
FlinkCDC-Hudi:Mysql数据实时入湖全攻略二:Hudi与Spark整合时所遇异常与解决方案
FlinkCDC-Hudi:Mysql数据实时入湖全攻略三:探索实现FlinkCDC mysql 主从库同步高可用
FlinkCDC-Hudi:Mysql数据实时入湖全攻略四:两种FlinkSql kafka connector的特征与应用
FlinkCDC-Hudi:Mysql数据实时入湖全攻略五:FlinkSQL同时输出到kafka与hudi的几种实现
FlinkCDC-Hudi:Mysql数据实时入湖全攻略六:极限压测下炸出来的FlinkCDC-Hudi坑,真多
1、设置作业名
FlinkSQL> set pipeline.name = job_name;
2、开启checkpoint
设置execution.checkpointing.interval后,会周期性地进行checkpoint,checkpoint生成
FlinkSQL> set execution.checkpointing.interval=30sec;
3、取消作业时保留最新的checkpoint
flink作业取消作业时会默认删除checkpoint文件,为了方便作业回滚、重启,可以设置取消时保留checkpoint文件。
Flink SQL> set execution.checkpointing.externalized-checkpoint-retention= RETAIN_ON_CANCELLATION;
4、FlinkSQL client设置savepoint/checkpoint
通过execution.savepoint.path指定savepoint/checkpoint路径,然后触发作业,该作业就会从savepoint/checkpoint重启。需要注意的是所设置的参数在flink sql client session生命周期内有效,无法unset。只能重启client来清楚设置。
Flink SQL> set 'execution.savepoint.path'='hdfs:///tmp/flink/checkpoints/88541fd8a08e1cee71aac55d2f39951f/chk-3'
5、Flink sql client初始化环境
Flink sql client暂不支持多条语句粘贴执行,粘贴多条语句时会报错。如果在一个启动一次session后,总是要做一些初始化工作,如建表、设置checkpoint变量等,不断地复制粘贴这些语句无疑是很麻烦的事情。这时可以将这些sql写到一个文件中,在启动sql client时加入 -i 参数来初始化运行环境。-i 初始化只支持 set语句和ddl操作哦,不要在 -i 文件中加入CRUD语句。
FLINK_HOME/bin/sql-client.sh embedded -s yarn-session -j ./lib/hudi-flink-bundle_2.11-0.10.0.jar -i init.sql shell
6、不启动Flink sql client 直接触发作业执行
如果不想启动client进入交互查询,可以将sql语句写入一个文件中,可以直接通过-f 启动flink sql 作业。
FLINK_HOME/bin/sql-client.sh embedded -s yarn-session -j ./lib/hudi-flink-bundle_2.11-0.10.0.jar -i init.sql -f execute.sql
7、查看表信息
查看表信息三步曲。
FlinkSQL> show catalog;
FlinkSQL> show tables;
FlinkSQL> desc tableName;
8、一个作业实现多个输出
一般而言,在flink sql中,一个insert语句对应一个作业。为了使一个作业可以执行多个insert语句,可以使用STATEMENT SET语法。语法定义如下:
EXECUTE STATEMENT SET
BEGIN
insert_statement;
...
insert_statement;
END;
insert_statement:
<insert_from_select>|<insert_from_values>
应用示例:
CREATE TABLE students (name STRING, age INT, gpa DECIMAL(3, 2)) WITH (...);
EXECUTE STATEMENT SET
BEGIN
INSERT INTO students
VALUES ('fred flintstone', 35, 1.28), ('barney rubble', 32, 2.32);
INSERT INTO students
VALUES ('fred flintstone', 35, 1.28), ('barney rubble', 32, 2.32);
END;