dolphinscheduler單機化改造
轉載請注明出處: https://www.cnblogs.com/funnyzpc/p/16466920.html
前面
其實如果單機的話直接走standalone-server就可以了,簡單又快捷,如果更改的話 后期要升級可能又需要維護個版本才可,所以簡單用standalone-server是最合適的,
好了,就說說我碰到的standalone-server模式下的一些不便的地方以及解決思路,還有種種折騰??
standalone-server下沒有日志
這是個很坑的問題,非常不利于除錯,以下這是官方 dolphinscheduler-daemon.sh 的代碼片段
elif [ "$command" = "standalone-server" ]; then
CLASS=org.apache.dolphinscheduler.server.StandaloneServer
export SPRING_PROFILES_ACTIVE="${SPRING_PROFILES_ACTIVE},standalone,${DATABASE_TYPE}"
所以你大概需要改成這樣:
elif [ "$command" = "standalone-server" ]; then
LOG_FILE="-Dlogging.config=classpath:logback-master.xml"
CLASS=org.apache.dolphinscheduler.server.StandaloneServer
export SPRING_PROFILES_ACTIVE="${SPRING_PROFILES_ACTIVE},standalone,${DATABASE_TYPE}"
對于ide除錯需要添加此引數:

任務執行用戶與系統用戶強系結問題
你是不是系統搭建起來了,也創建worker賬戶了 而且也正確創建任務了 發現任務總執行失敗呢??,這個時候就該注意是不是linux沒有創建對應worker同名的賬戶呢/(ㄒoㄒ)/~~ ,我也碰到了,也是看原始碼才知道的,所以在單機模式下有必要將這個限制去掉哈??
(TaskExecuteThread)

這樣下來,以后不管什么賬戶都是可以執行任務了,注意這功能不要在集群模式下去掉,至少為了安全吧~
standalone-server下用的是h2資料庫
這是個坑,h2你可以理解為應用級別的記憶體表,很顯然當你重啟應用了資料就全丟失啦??,刺不刺激意不意外??
對于這個問題,很顯然需要將資料庫改為mysql或者postgresql(主要是目前官方只支持這兩款資料庫作為專案資料庫),需要改的地方大致有兩處:
-
一個地方是組態檔,在部署服務器
config目錄下

-
還一個地方是啟動類
StandaloneServer

對于組態檔肯定是要改的,至于這個組態檔也可以在啟動命令列中指定此組態檔,以上只是個投機取巧的做法,也避免了修改啟動腳本??
去掉zookeeper client及依賴
因為集群環境的復雜性,所以需要任務有zookeeper,但對于單機也就冗余復雜了,所以就索性去掉之

這里是從MasterServer開始移除zk支持,所以代碼也是大改,所有關聯的全部被我去掉了,太麻煩了,,,具體你們可以試試
日志可以不用rpc
本來到這一步應該也結束了,跑了幾個任務發現沒得日志,檢查了下才發現代碼告訴我他們是用 netty 實作了個rpc,使用前需要啟動日志模塊(standalone-server下默認不會啟動此模塊),日志用rpc呼叫logger模塊來查詢日志,,,,咋辦,繼續改,,,


主要也就以上兩個地方需要修改,具體的可以參見我的原始碼(開頭有提~)
簡化不必要的啟動模塊
這其實是順帶做的,啟動類 StandaloneServer 我去掉了TestingServer、AlertServer、PythonGatewayServer ,去掉后啟動速度及資源占用有提升????
下面是具體代碼:
@EnableAutoConfiguration
@ComponentScan
public class StandaloneServer {
public static void main(String[] args) throws Exception {
// final TestingServer server = new TestingServer(true);
// System.setProperty("registry.servers", server.getConnectString());
new SpringApplicationBuilder(
ApiApplicationServer.class,
MasterServer.class,
WorkerServer.class
// AlertServer.class
// PythonGatewayServer.class
).profiles("master", "worker", "api",/* "alert", "python-gateway", "h2",*/ "standalone","postgresql").run(args);
}
}
修改worker執行主機host獲取方式
這也是個坑,主要是原始碼基于集群考慮這個問題,單機還是得修改才可:


以上兩處只是關鍵部分,對于此問題修改的地方不止以上兩處,具體可以參見我原始碼哈????
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/499189.html
標籤:其他
