前言
此文章主要如何配置使能在idea 中debug模式啟動(dòng)flink sqlClient 客戶端帖汞,通過(guò)執(zhí)行flink sql debug源碼查看flink解析sql提交任務(wù)到flink集群執(zhí)行的原理。
了解sqlClient 代碼 有以下好處:
改造 sqlClient 成為server端使之可以接收遠(yuǎn)端client服務(wù)傳輸?shù)膄link sql語(yǔ)句凑术,并返回執(zhí)行結(jié)果到遠(yuǎn)端client翩蘸,從而有望可以實(shí)現(xiàn)flink開(kāi)發(fā)平臺(tái)。
主要軟件如下:flink 1.12.0 hive 2.3.4 hadoop 2.7.2
主要步驟
下載flink1.12的源碼
官網(wǎng)下載地址如下:https://www.apache.org/dyn/closer.lua/flink/flink-1.12.0/flink-1.12.0-src.tgz
源碼在idea中打開(kāi)淮逊,主要查看 flink-table 項(xiàng)目的源碼
找到flink sqlClient的啟動(dòng)類
由 sql-client 的啟動(dòng)腳本 sql-client.sh 可知催首,啟動(dòng)類為 SqlClient 類其main方法為整個(gè)sqlClient 的啟動(dòng)方法
添加啟動(dòng)類運(yùn)行需要的參數(shù)和依賴包
由flink sqlClient 啟動(dòng)腳本命令為:
可知 需要添加 embedded 參數(shù)
由啟動(dòng)腳本由 -classpath 參數(shù),可知運(yùn)行sqlClient需要添加依賴包
在啟動(dòng)腳本中添加打印日志邏輯把 manglePathList "$CC_CLASSPATH:$INTERNAL_HADOOP_CLASSPATHS:$FLINK_SQL_CLIENT_JAR"
結(jié)果值打印出來(lái)
得到的結(jié)果是以:分隔開(kāi)的需要依賴的jar包
使用以下腳本下載包到本地目錄:D:\flink\lib
# `manglePathList "$CC_CLASSPATH:$INTERNAL_HADOOP_CLASSPATHS:$FLINK_SQL_CLIENT_JAR"`
jars=`hadoop classpath`
OLD_IFS="$IFS"
IFS=":"
arr=($jars)
IFS="$OLD_IFS"
for s in ${arr[@]}
do
echo "$s"
sz $s
done
idea 中添加D:\flink\lib 目錄上的包到項(xiàng)目中
添加flink的配置文件
運(yùn)行main方法發(fā)現(xiàn)報(bào)了提示找不到配置文件的錯(cuò)泄鹏,發(fā)現(xiàn)讀取了 FLINK_CONF_DIR 變量名的值作為配置文件路徑
在idea 中添加系統(tǒng)變量 FLINK_CONF_DIR=D:\flink\conf
下載flink 的所有配置文件目錄:/usr/local/apps/flink1.12/conf 下的所有配置文件 到D:\flink\conf 文件夾內(nèi)
運(yùn)行SqlClient 的main方法啟動(dòng)
啟動(dòng)成功 在idea的窗口中出現(xiàn)如下圖案
flink中整合hive catalogs 支持執(zhí)行hive 語(yǔ)句
修改 flink 的配置文件 sql-client-defaults.yaml 配置 hive catalogs
hive-conf-dir 中存放hive的配置文件
同時(shí)需要啟動(dòng):hive --service metastore
執(zhí)行語(yǔ)句檢查是否提交到flink集群上
INSERT INTO test_hive SELECT ‘Jack’, 20;
select * from test_hive;
debug flink sql 執(zhí)行流程
以debug 模式啟動(dòng)SqlClient 的main方法
執(zhí)行 INSERT INTO test_hive SELECT ‘Jack’, 20
; 語(yǔ)句讀取到flink sql
parseCommand 方法解析提交的flink sql
callCommand 方法執(zhí)行flink sql
callCommand 方法中根據(jù)sql的類型執(zhí)行不同的方法
這里執(zhí)行的是callInsert
executor.executeUpdate 執(zhí)行flink sql
后面的print 語(yǔ)句就是打印下面這內(nèi)容
來(lái)源:微信公眾號(hào)