dolphinscheduler單機化改造

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 我去掉了TestingServerAlertServerPythonGatewayServer ,去掉後啓動速度及資源佔用有提升😉😉
下面是具體代碼:

 @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獲取方式

這也是個坑,主要是源碼基於集羣考慮這個問題,單機還是得修改纔可:



以上兩處只是關鍵部分,對於此問題修改的地方不止以上兩處,具體可以參見我源碼哈😝😝

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章