開發的flink程式,要使用yarn-cluster的方式進行部署。
程式中依賴了很多第三方jar包,不想用shade那種打包方式打成乙個大jar包,然後提交。
想將應用程式jar包和依賴jar包分開,依賴的jar包在提交時一起提交上去(像spark on yarn直接指定「–jars」這樣),但是找了好久發現flink官方沒有提供這樣的方式。
直接將依賴的jar包放在flink的lib目錄下,可以實現,但是感覺這樣會汙染flink的lib包。
於是找到了如下方法,可以實現類似的功能。在此記錄分享一下。
大概實現就是修改flink提交的指令碼,開放了使用者新增自己的jar依賴能力,然後在提交時指定依賴的jar包目錄。
修改flink-yarn模組下的yarnclusterdescriptor 類的addlibfolderstoshipfiles 方法,在方法首部新增如下**:
user_lib_dir就是我們之後要用到的環境引數
string userlibdir = system.getenv().get("user_lib_dir");
if (userlibdir != null)
}
編譯flink-yarn模組。執行如下命令編譯
mvn clean package -dskiptests -dfast
用編譯後得到的yarnclusterdescriptor.class替換flink的lib目錄中flink-dist.jar對應的類
# 檢視yarnclusterdescriptor.class在jar包中的目錄路徑
jar tvf flink-dist_2.11-1.11.3.jar|grep yarnclusterdescriptor.class
# 目錄路徑如下
58667 fri feb 05 20:28:38 cst 2021 org/apache/flink/yarn/yarnclusterdescriptor.class
# 建立對應的目錄,並將編譯後的yarnclusterdescriptor.class放進去
mkdir -p org/apache/flink/yarn
mv yarnclusterdescriptor.class org/apache/flink/yarn
# 將class檔案更新回jar包裡面
jar uvf flink-dist_2.11-1.11.3.jar org/apache/flink/yarn/yarnclusterdescriptor.class
修改flink安裝目錄下bin下的config.s**件,在constructflinkclasspath函式中新增如下**:
for f in $user_lib_dir/*.jar
doflink_classpath=$flink_classpath:$f
done
----------------------------新增後的----------------------------
constructflinkclasspath()
修改應用的啟動指令碼,在我們啟動指令碼前設定使用者lib庫,如下:
export user_lib_dir=/***/lib
將自己的jar依賴放到lib下。
執行應用程式的啟動指令碼就可以將我們自己的依賴也一起提交上去了。
flink 動態支援依賴jar包提交
清華映象站
apache映象站
新增缺少依賴的jar進可執行jar包
系統 win10 環境 jdk 1.8 202 之前有個可執行jar檔案特別大,由於依賴的jar包檔案巨大,所以在更新的時候不想重複拷貝依賴檔案。在拷貝以後需要將依賴的jar包都放回到可執行jar包的boot inf lib資料夾下。錯誤的方式 使用壓縮軟體開啟jar包,將需要的jar檔案copy進...
JSONObject物件依賴的jar包
在web專案中經常會用到json資料 如 struts2處理請求返回json資料給jsp解析 因此,jsonobject物件是必備的,這時就需要引入相關的jar包了。json所需要的jar包如下 json lib 2.3 jdk15.jar json所依賴的jar如下 commons beanuti...
spring boot啟動jar包迴圈依賴的問題
早晨來了合併 啟動發現報錯,如下資訊。原來是兩個bean迴圈依賴了。解決辦法 該異常時因為spring的ioc容易注入 現迴圈依賴情況報錯,就是vipuserservice引用 vipexperienceservice,vipexperienceservice又引用了 vipuserservice ...