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
獲取方式
這也是個坑,主要是源碼基於集羣考慮這個問題,單機還是得修改纔可:
以上兩處只是關鍵部分,對於此問題修改的地方不止以上兩處,具體可以參見我源碼哈😝😝