在當(dāng)前快速發(fā)展的技術(shù)格局中,企業(yè)尋求創(chuàng)新解決方案來簡化運(yùn)營并提高效率成為一種趨勢。
Apache DolphinScheduler作為一個強(qiáng)大的工具,允許跨分布式系統(tǒng)進(jìn)行復(fù)雜的工作流任務(wù)調(diào)度。本文將深入探討如何將Apache DolphinScheduler適配并整合進(jìn)現(xiàn)代IT環(huán)境,提升其在云原生部署中的表現(xiàn)。
前言
Apache DolphinScheduler 的高效云原生部署模式,比原始部署模式節(jié)省了95%以上的人力資源和工作時間,提升了部署效率和成本效益。
通過集成 GitOps 技術(shù),我們提升了Apache DolphinScheduler 的 DevOps 管理能力,改善了軟件交付效率和安全審計能力。
通過集成新的云原生技術(shù),我們?yōu)?Apache DolphinScheduler 增加了水平擴(kuò)展、健康探測和滾動部署等功能,提升了其靈活性和適應(yīng)性。
將 Prometheus 等可觀測性技術(shù)整合到基礎(chǔ)設(shè)施和服務(wù)網(wǎng)格中,顯著提升了 DolphinScheduler 的監(jiān)控功能,為其性能和健康狀態(tài)提供了更深入的洞察。
與 Kubernetes 作業(yè)技術(shù)深度整合,實現(xiàn)了 DolphinScheduler 的混合調(diào)度器,適用于傳統(tǒng)虛擬機(jī)和基于容器的運(yùn)行環(huán)境,提升了其多樣性和兼容性。
項目特點(diǎn)
Apache DolphinScheduler 是由 Analysys 開源的分布式、易于擴(kuò)展的可視化工作流任務(wù)調(diào)度平臺,解決了需要企業(yè)級問題:
-
多源數(shù)據(jù)連接和訪問:技術(shù)領(lǐng)域中最常見的數(shù)據(jù)源都可以訪問,添加新數(shù)據(jù)源不需要太多改動。
-
多樣化、專業(yè)化和大規(guī)模數(shù)據(jù)任務(wù)管理:這涉及到大數(shù)據(jù)(Hadoop 系列、Flink 等)任務(wù)調(diào)度的問題,與傳統(tǒng)調(diào)度器有著顯著區(qū)別。
-
圖形化任務(wù)編排:提供了方便的用戶體驗,與商業(yè)產(chǎn)品具有競爭力,尤其是對于大多數(shù)無法通過拖放直接生成數(shù)據(jù)任務(wù)的國外開源產(chǎn)品而言。
-
任務(wù)細(xì)節(jié):豐富的任務(wù)、日志和運(yùn)行時間軸顯示,滿足了開發(fā)人員對精細(xì)化數(shù)據(jù)任務(wù)管理的需求,快速定位慢 SQL 和性能瓶頸。
-
支持各種分布式文件系統(tǒng):豐富了用戶對非結(jié)構(gòu)化數(shù)據(jù)的選擇。
-
本地多租戶管理:滿足了大型組織對數(shù)據(jù)任務(wù)管理和隔離的需求。
-
完全自動化的分布式調(diào)度算法來平衡所有調(diào)度任務(wù)。
-
本地集群監(jiān)控:可以監(jiān)控 CPU、內(nèi)存、連接數(shù)和 Zookeeper 狀態(tài),適用于中小企業(yè)的一站式運(yùn)維。
-
本地任務(wù)告警功能:最大程度地減少任務(wù)操作的風(fēng)險。
-
強(qiáng)大的社區(qū)運(yùn)營:傾聽客戶的真實聲音,不斷添加新功能,持續(xù)優(yōu)化客戶體驗。
分布式集群
基于早期的微服務(wù)技術(shù),Apache DolphinScheduler采用了服務(wù)注冊表的概念,通過使用Zookeeper進(jìn)行集群的分布式管理(許多大數(shù)據(jù)技術(shù)使用Zookeeper作為分布式集群管理)。
Worker主節(jié)點(diǎn)可以任意添加,或者可以獨(dú)立部署API管理和告警管理。作為一個企業(yè)級技術(shù)模塊,它實現(xiàn)了微服務(wù)分離、獨(dú)立部署和模塊化管理的良好技術(shù)特性。然而,在容器化云原生應(yīng)用迅速發(fā)展的時代,這種基本的技術(shù)模式存在一些不足之處:
-
需要從頭開始部署,無論是安裝在物理機(jī)還是虛擬機(jī)上,DolphinScheduler都需要數(shù)百個shell操作,一個節(jié)點(diǎn)集群可能需要數(shù)千個shell操作。
-
標(biāo)準(zhǔn)化的企業(yè)級DolphinScheduler涉及到管理大量基本環(huán)境,并且通常需要超過八個節(jié)點(diǎn)、主機(jī)和IP地址。這些基礎(chǔ)設(shè)施信息帶來了一定的管理難度。
-
添加節(jié)點(diǎn)時,還需要進(jìn)行數(shù)十個操作(安裝Java、配置主機(jī)、設(shè)置DS Linux用戶、設(shè)置免密碼登錄、修改安裝節(jié)點(diǎn)配置文件),并且整個集群需要停止和重新啟動。
-
大型企業(yè)通常有多個集群來支持不同的業(yè)務(wù)單元,這將在工作負(fù)載中帶來大量的重復(fù)。
-
調(diào)度器具有一些可觀察性功能,但無法與主流工具集成。
-
整體而言,調(diào)度器仍然需要日常例行檢查工作,例如調(diào)查核心Java進(jìn)程異常退出。
-
在不同的需求和場景下,調(diào)度器的配置設(shè)置缺乏有效的管理機(jī)制或工具。
核心技術(shù)思路
解決這些技術(shù)缺陷的核心思路包括:
-
如何將Apache DolphinScheduler集成到當(dāng)今主流的云原生技術(shù)中;
-
如何在減少人力資源的情況下部署DolphinScheduler,是否能實現(xiàn)完全自動化的集群安裝和部署模式;
-
如何實現(xiàn)完全無服務(wù)器的DolphinScheduler,并大幅降低配置管理的管理成本;
-
如何標(biāo)準(zhǔn)化技術(shù)組件的實現(xiàn)規(guī)范;
-
是否可以實現(xiàn)無人監(jiān)管運(yùn)行,并且系統(tǒng)具備自我修復(fù)能力;
-
如何構(gòu)建并將其集成到現(xiàn)有的可觀測性平臺中。
利用Kubernetes技術(shù)
作為云原生系統(tǒng)技術(shù)的事實標(biāo)準(zhǔn),Kubernetes已經(jīng)給整個IT應(yīng)用技術(shù)系統(tǒng)帶來了革命性的變化。Kubernetes主要基于服務(wù)注冊和發(fā)現(xiàn)、負(fù)載均衡、自動化軟件發(fā)布和回滾、容器化隔離、軟件自愈和分布式配置管理等核心技術(shù)特性。
不僅如此,還可以整合 Cloud Native Computing Foundation(CNCF)的許多優(yōu)秀項目至 ds on k8s 部署:
-
Apache DolphinScheduler的部署技術(shù)得到了改進(jìn)。我們使用了Helm和Argo CD來大大簡化和實現(xiàn)一鍵部署。
-
通過Argo CD實現(xiàn)了配置內(nèi)容的GitOps管理機(jī)制,從而實現(xiàn)了現(xiàn)代DevOps的完整審計能力。
-
Kubernetes的水平Pod自動縮放技術(shù)大大簡化了應(yīng)用擴(kuò)展的操作難度。
-
Kubernetes的標(biāo)準(zhǔn)化健康探針技術(shù)使得調(diào)度器的所有技術(shù)組件都具備了強(qiáng)大的自愈能力。
-
Kubernetes和Argo CD的滾動發(fā)布技術(shù)實現(xiàn)了DolphinScheduler工具的優(yōu)雅簡單升級。
-
使用Kube-Prometheus技術(shù)為DolphinScheduler帶來了標(biāo)準(zhǔn)化的可觀測性能力。
-
強(qiáng)大的UI技術(shù)簡化了CMDB可視化管理、基于Kubernetes的組件配置管理、應(yīng)用日志管理等。
還可以向DolphinScheduler引入了更強(qiáng)大的工具,以獲取更豐富的云原生特性:
-
通過Kubernetes服務(wù)注冊發(fā)現(xiàn)和Ingress技術(shù)實現(xiàn)了更輕松的服務(wù)訪問;
-
引入了Linkerd,將服務(wù)網(wǎng)格的功能引入DolphinScheduler,提高了所有API的管理和監(jiān)控能力;
-
將DolphinScheduler與Argo Workflows或標(biāo)準(zhǔn)的Kubernetes作業(yè)結(jié)合起來;
-
引入對象存儲技術(shù)MinIO,將存儲非結(jié)構(gòu)化數(shù)據(jù)的技術(shù)與DolphinScheduler統(tǒng)一起來。
云原生平臺初始化遷移
部署步驟
-
從 GitHub 存儲庫的 dolphinscheduler-1.3.9.tar.gz 文件中的 ./dolphinscheduler-1.3.9/docker/kubernetes/dolphinscheduler 文件夾中獲取 Helm 包:
https://github.com/apache/dolphinscheduler/archive/refs/tags/1.3.9.tar.gz
-
使用以下命令來部署一個由 Kubernetes 管理的 DolphinScheduler 實例:
kubectl create ns ds139 helm install dolphinscheduler . -n ds139
-
有時,Apache DolphinScheduler 用戶需要集成 DataX、SeaTunnel、MySQL JDBC 驅(qū)動程序或 Oracle JDBC 驅(qū)動程序以進(jìn)行 ETL 和數(shù)據(jù)庫連接。
我們可以下載必要的組件,構(gòu)建新的 Docker 鏡像,然后升級 Kubernetes 管理的 DolphinScheduler 實例:
#Download the additional components
https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.49/mysql-connector-java-
5.1.49.jar
https://repo1.maven.org/maven2/com/oracle/database/jdbc/ojdbc8/
https://github.com/alibaba/DataX/blob/master/userGuid.md
#Create a new docker image with new tag by this Dockerfile
FROM apache/dolphinscheduler:1.3.9
COPY *.jar /opt/dolphinscheduler/lib/
RUN mkdir -p /opt/soft/datax
COPY datax /opt/soft/datax
#Edit image tag of helm value.yaml file, and execute helm upgrade.
helm upgrade dolphinscheduler -n ds139
一般建議在生產(chǎn)環(huán)境中使用獨(dú)立的外部 PostgreSQL 作為 DolphinScheduler 的管理數(shù)據(jù)庫。
這樣,切換到外部數(shù)據(jù)庫后,即使在 Kubernetes 中完全刪除并重新部署 DolphinScheduler,也不需要重新創(chuàng)建 Apache DolphinScheduler 的應(yīng)用數(shù)據(jù)(例如用戶定義的數(shù)據(jù)處理任務(wù))。
這再次證明了高可用性和數(shù)據(jù)完整性。此外,建議為Apache DolphinScheduler 組件配置 PersistentVolume
,因為如果 pod
重新啟動或升級,歷史 DolphinScheduler 應(yīng)用日志將會丟失。
與傳統(tǒng)模式下執(zhí)行數(shù)百個 shell 命令相比,只需修改一個配置文件,并使用單行安裝命令,就可以自動安裝八個 Apache DolphinScheduler 組件,節(jié)省了大量人力成本和操作錯誤。
對于多個 DolphinScheduler 集群,這將大大降低人力成本,業(yè)務(wù)部門的等待時間將從幾天減少到不到一個小時,甚至可能十分鐘內(nèi)完成。
基于Argo CD添加GitOps
Argo CD 是一個基于 Kubernetes 的聲明式 GitOps 持續(xù)交付工具,是 CNCF 的孵化項目,也是 GitOps 的最佳實踐工具。
GitOps 對 Apache DolphinScheduler 的實現(xiàn)帶來了以下優(yōu)勢:
-
集群軟件的圖形化和一鍵式安裝
-
Git 記錄了完整的發(fā)布過程,實現(xiàn)一鍵回滾
-
方便的 DolphinScheduler 工具日志查看
一旦實施完成,我們可以看到由 Argo CD 自動部署的 Pod、ConfigMap、Secret、Service、Ingress 等資源,它還顯示了清單提交信息和用戶名,完全記錄了所有發(fā)布事件信息。同時,還可以通過一鍵點(diǎn)擊回滾到歷史版本。
相關(guān)資源信息可以通過kubectl命令查看:
[root@tpk8s-master01 ~]# kubectl get po -n ds139
NAME READY STATUS RESTARTS AGE
Dolphinscheduler-alert-96c74dc84-72cc9 1/1 Running 0 22m
Dolphinscheduler-api-78db664b7b-gsltq 1/1 Running 0 22m
Dolphinscheduler-master-0 1/1 Running 0 22m
Dolphinscheduler-master-1 1/1 Running 0 22m
Dolphinscheduler-master-2 1/1 Running 0 22m
Dolphinscheduler-worker-0 1/1 Running 0 22m
Dolphinscheduler-worker-1 1/1 Running 0 22m
Dolphinscheduler-worker-2 1/1 Running 0 22m
[root@tpk8s-master01 ~]# kubectl get statefulset -n ds139
NAME READY AGE
Dolphinscheduler-master 3/3 22m
Dolphinscheduler-worker 3/3 22m
[root@tpk8s-master01 ~]# kubectl get cm -n ds139
NAME DATA AGE
Dolphinscheduler-alert 15 23m
Dolphinscheduler-api 1 23m
Dolphinscheduler-common 29 23m
Dolphinscheduler-master 10 23m
Dolphinscheduler-worker 7 23m
[root@tpk8s-master01 ~]# kubectl get service -n ds139
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
Dolphinscheduler-api ClusterIP 10.43.238.5 <none> 12345/TCP 23m
Dolphinscheduler-master-headless ClusterIP None <none> 5678/TCP 23m
Dolphinscheduler-worker-headless ClusterIP None <none> 1234/TCP,50051/TCP 23m
[root@tpk8s-master01 ~]# kubectl get ingress -n ds139
NAME CLASS HOSTS ADDRESS
Dolphinscheduler <none> ds139.abc.com
還可以看到 Kubernetes 集群中所有 Pod 都部署在不同的主機(jī)上,例如,worker1 和 worker2 分別部署在不同的節(jié)點(diǎn)上。
一旦配置了 Ingress,我們就可以使用域名在公司的內(nèi)部網(wǎng)絡(luò)中訪問 Apache DolphinScheduler 的 Web 用戶界面,讓我們以 DNS 子域名 abc.com 為例:
http://ds139.abc.com/dolphinscheduler/ui/#/home,我們可以在Argo CD 中查看 Apache DolphinScheduler 的每個組件的內(nèi)部日志:
使用 Argo CD,修改主節(jié)點(diǎn)、工作節(jié)點(diǎn)、API 或警報等組件的副本數(shù)量非常方便。Apache DolphinScheduler 的Helm
配置還保留了 CPU 和內(nèi)存的設(shè)置信息。在 value.yaml 文件中修改副本的設(shè)置。
修改后,我們可以將其推送到公司的內(nèi)部源代碼系統(tǒng):
master:
podManagementPolicy: "Parallel"
replicas: "5"
worker:
podManagementPolicy: "Parallel"
replicas: "5"
alert:
replicas: "3"
api:
replicas: "3"
只需在 Argo CD 上點(diǎn)擊同步即可進(jìn)行同步,所需的相應(yīng) pod 將被添加。
[root@tpk8s-master01 ~]# kubectl get po -n ds139
NAME READY STATUS RESTARTS AGE
Dolphinscheduler-alert-96c74dc84-72cc9 1/1 Running 0 43m
Dolphinscheduler-alert-96c74dc84-j6zdh 1/1 Running 0 2m27s
Dolphinscheduler-alert-96c74dc84-rn9wb 1/1 Running 0 2m27s
Dolphinscheduler-api-78db664b7b-6j8rj 1/1 Running 0 2m27s
Dolphinscheduler-api-78db664b7b-bsdgv 1/1 Running 0 2m27s
Dolphinscheduler-api-78db664b7b-gsltq 1/1 Running 0 43m
Dolphinscheduler-master-0 1/1 Running 0 43m
Dolphinscheduler-master-1 1/1 Running 0 43m
Dolphinscheduler-master-2 1/1 Running 0 43m
Dolphinscheduler-master-3 1/1 Running 0 2m27s
Dolphinscheduler-master-4 1/1 Running 0 2m27s
Dolphinscheduler-worker-0 1/1 Running 0 43m
Dolphinscheduler-worker-1 1/1 Running 0 43m
Dolphinscheduler-worker-2 1/1 Running 0 43m
Dolphinscheduler-worker-3 1/1 Running 0 2m27s
Dolphinscheduler-worker-4 1/1 Running 0 2m27s
不僅如此,基于 Argo CD 的 GitOps 技術(shù)為整個 DolphinScheduler 工具提供了圖形化、自動化、可追溯、可審計和強(qiáng)大的 DevOps、回滾和監(jiān)控功能,而無需對 DolphinScheduler 進(jìn)行任何代碼修改。
Apache DolphinScheduler 在 k8s 上的服務(wù)自愈
眾所周知,當(dāng)代的IT環(huán)境總是處于不穩(wěn)定狀態(tài)。換句話說,我們的技術(shù)系統(tǒng)將服務(wù)器、操作系統(tǒng)和網(wǎng)絡(luò)的各種故障視為集群中的常規(guī)事件。當(dāng)最終用戶無法通過瀏覽器正常訪問 Apache DolphinScheduler 的任務(wù)管理頁面,或者 DolphinScheduler 無法運(yùn)行常規(guī)的大數(shù)據(jù)任務(wù)時,已經(jīng)為時已晚。
技術(shù)現(xiàn)狀
然而,在 Apache DolphinScheduler 轉(zhuǎn)向云原生之前,它只能依靠日常監(jiān)控來檢查主節(jié)點(diǎn)/工作節(jié)點(diǎn)/API等組件是否正常運(yùn)行,通過 DolphinScheduler 管理UI,或者通過 jps 檢查Java進(jìn)程是否存在。
當(dāng)企業(yè)擁有數(shù)百個調(diào)度環(huán)境時,這不僅會花費(fèi)大量時間,而且更重要的是,系統(tǒng)的可用性將面臨巨大風(fēng)險。
值得注意的是,Kubernetes 技術(shù)本身可以自動重啟和恢復(fù)標(biāo)準(zhǔn)化應(yīng)用程序的有狀態(tài)和部署類型,甚至 CRD 本身也可以自動重啟和恢復(fù)。
當(dāng)應(yīng)用程序失敗時,會記錄異常事件,并重新拉取應(yīng)用程序以重新啟動應(yīng)用程序,Kubernetes 將記錄 pod 重新啟動的次數(shù),以便技術(shù)人員可以快速定位故障。
除了標(biāo)準(zhǔn)化的自愈機(jī)制外,還有主動的健康監(jiān)控方法。通過構(gòu)建一個服務(wù)接口來主動探測正在運(yùn)行 DolphinScheduler 的 pod,使用 livenessProbe 機(jī)制,當(dāng)檢測次數(shù)超過失敗重試次數(shù)時,該機(jī)制可以自動重啟 pod。
此外,通過使用 readinessProbe,Kubernetes 集群可以在探測器捕獲異常時自動切斷對異常 pod 的流量,并在異常事件消失后自動恢復(fù)對 pod 的流量請求。
livenessProbe:
enabled: true
initialDelaySeconds: "30"
periodSeconds: "30"
timeoutSeconds: "5"
failureThreshold: "3"
successThreshold: "1"
readinessProbe:
enabled: true
initialDelaySeconds: "30"
periodSeconds: "30"
timeoutSeconds: "5"
failureThreshold: "3"
successThreshold: "1"
可觀測性
我們知道,Prometheus 已經(jīng)成為云原生系統(tǒng)中監(jiān)控工具的事實標(biāo)準(zhǔn),將 Apache DolphinScheduler 的標(biāo)準(zhǔn)監(jiān)控整合到 Prometheus 系統(tǒng)中對我們來說是最合理的選擇。
-
Kube-Prometheus
技術(shù)可以監(jiān)控 Kubernetes 集群中的所有資源。 - StatefulSet、命名空間和 Pod 是 DolphinScheduler 的三個主要資源特性。
- 通過 Kube-Prometheus 技術(shù),可以自動進(jìn)行 CPU、內(nèi)存、網(wǎng)絡(luò)、IO、副本等方面的常規(guī)監(jiān)控,無需額外的開發(fā)或配置。
我們在 Kubernetes 中使用 Kube-Prometheus operator
技術(shù),在部署后自動監(jiān)控 Apache DolphinScheduler 的每個組件的資源。
但請注意,Kube-Prometheus
的版本需要與 Kubernetes 的主版本對應(yīng)。
集成服務(wù)網(wǎng)格
作為數(shù)據(jù)服務(wù)提供商,Apache DolphinScheduler 通過服務(wù)網(wǎng)格技術(shù)實現(xiàn)了服務(wù)鏈接的可觀察性管理,并將其納入內(nèi)部服務(wù)治理系統(tǒng)中。
不僅需要通用資源監(jiān)控,還需要服務(wù)調(diào)用鏈的監(jiān)控技術(shù)。通過服務(wù)網(wǎng)格技術(shù),可以實現(xiàn) Apache DolphinScheduler 的內(nèi)部服務(wù)調(diào)用以及 DolphinScheduler API 的外部調(diào)用的可觀察性分析,優(yōu)化 DolphinScheduler 產(chǎn)品的服務(wù)。
此外,作為數(shù)據(jù)工具的服務(wù)組件,Apache DolphinScheduler 可以通過服務(wù)網(wǎng)格工具無縫集成到企業(yè)的內(nèi)部服務(wù)模式中。
使得具有 TLS 服務(wù)通信能力、客戶端服務(wù)通信重試機(jī)制和跨集群服務(wù)注冊發(fā)現(xiàn)等功能成為可能,而無需修改 DolphinScheduler 的代碼。通過服務(wù)網(wǎng)格技術(shù),可以實現(xiàn)對 Apache DolphinScheduler 的 API 外部服務(wù)調(diào)用和內(nèi)部調(diào)用的可觀察性分析,從而優(yōu)化 Apache DolphinScheduler 產(chǎn)品服務(wù)。
我們使用了 Linkerd 作為服務(wù)網(wǎng)格產(chǎn)品進(jìn)行集成,這也是 CNCF 出色的畢業(yè)項目之一。通過修改 Apache DolphinScheduler Helm 中 value.yaml 文件中的注釋,并重新部署,可以快速將網(wǎng)格代理 sidecar 注入到 DolphinScheduler 的 master、worker、API、alert 等組件中。
annotations:
linkerd.io/inject: enabled
還可以觀察組件之間通信的服務(wù)質(zhì)量,包括每秒請求的數(shù)量:
云原生工作流調(diào)度
要成為真正的云原生調(diào)度工具,Apache DolphinScheduler需要能夠調(diào)度云原生作業(yè)流程。
調(diào)度的任務(wù)都是在固定的Pod中執(zhí)行。在這種模式下,任務(wù)開發(fā)技術(shù)的隔離要求相對較高。
特別是在Python語言環(huán)境下,團(tuán)隊中會存在不同版本的Python基礎(chǔ)和依賴包,甚至版本之間的差異可能會出現(xiàn)數(shù)百種組合。
依賴包的輕微差異就會導(dǎo)致Python程序運(yùn)行錯誤。這也是阻止DolphinScheduler運(yùn)行大量Python應(yīng)用程序的障礙。
建議采取以下方法,以便DolphinScheduler能夠快速與Kubernetes作業(yè)系統(tǒng)集成,并具有強(qiáng)大的任務(wù)隔離和并發(fā)能力:
-
使用標(biāo)準(zhǔn)的Kubernetes API系統(tǒng)進(jìn)行作業(yè)提交??梢酝ㄟ^kubectl命令行或REST API直接提交任務(wù)。
-
將kubectl命令文件上傳到DolphinScheduler,并通過DolphinScheduler的shell任務(wù)提交。
-
使用Argo Workflows項目的Argo CLI命令或REST API命令進(jìn)行提交。
無論是Kubernetes還是Argo Workflows,都需要添加watch功能,因為Kubernetes是一種異步技術(shù),需要等待任務(wù)完成。
在這里,我們以Argo Workflows為例,我們可以在DolphinScheduler中創(chuàng)建一個新的shell任務(wù)或步驟,并將以下命令粘貼到其中。
結(jié)果,我們可以將常規(guī)的數(shù)據(jù)作業(yè)(例如數(shù)據(jù)庫SQL作業(yè)、Spark作業(yè)或Flink作業(yè))和云原生作業(yè)結(jié)合起來,執(zhí)行更全面的作業(yè)流程。例如,這個作業(yè)是一個Hive SQL任務(wù),用于導(dǎo)出Web應(yīng)用的用戶點(diǎn)擊數(shù)據(jù):
beeline -u "jdbc:hive2://192.168.1.1:10006" --outputformat=csv2 -e "select * from database.user-click" > user-click.csv
這個示例作業(yè)是一個Python Tensorflow任務(wù),用于通過訓(xùn)練數(shù)據(jù)構(gòu)建機(jī)器學(xué)習(xí)模型。
該作業(yè)通過HTTP方式運(yùn)行。首先,我們運(yùn)行該作業(yè):
通過HTTP方式運(yùn)行Python Tensorflow作業(yè)
curl --request POST -H "Authorization: ${ARGO_TOKEN}" -k \
--url https://argo.abc.com/api/v1/workflows/argo \
--header 'content-type: application/json' \
--data '{
"namespace": "argo",
"serverDryRun": false,
"workflow": {
"metadata": {
"name": "python-tensorflow-job",
"namespace": "argo"
},
"spec": {
"templates": [
{
"name": "python-tensorflow",
"container": {
"image": "tensorflow/tensorflow:2.9.1",
"command": [
"python"
],
"args": [
"training.py"
],
"resources": {}
}
}
],
"entrypoint": "python-tensorflow",
"serviceAccountName": "argo",
"arguments": {}
}
}
}'
然后我們可以檢查工作信息和狀態(tài):
#Http way to check the Python Tensorflow job information and status
curl --request GET -H "Authorization: ${ARGO_TOKEN}" -k \
--url https:/argo.abc.com/api/v1/workflows/argo/python-tensorflow-job
從HDFS升級到S3文件技術(shù)
分布式算法是云原生技術(shù)領(lǐng)域之一,比如谷歌的Kubeflow技術(shù),它完美地結(jié)合了TensorFlow和Kubernetes。分布式算法通常使用文件,而S3是存儲大型數(shù)據(jù)文件的事實標(biāo)準(zhǔn),這些文件可以很容易地訪問。
當(dāng)然,Apache DolphinScheduler還集成了MinIO技術(shù),通過簡單的配置可以實現(xiàn)S3文件管理。
首先,通過修改Helm value.yaml文件中的configmap部分,將其指向一個MinIO服務(wù)器。
configmap:
DOLPHINSCHEDULER_OPTS: ""
DATA_BASEDIR_PATH: "/tmp/dolphinscheduler"
RESOURCE_STORAGE_TYPE: "S3"
RESOURCE_UPLOAD_PATH: "/dolphinscheduler"
FS_DEFAULT_FS: "s3a://dfs"
FS_S3A_ENDPOINT: "http://192.168.1.100:9000"
FS_S3A_ACCESS_KEY: "admin"
FS_S3A_SECRET_KEY: "password"
在MinIO中存儲文件的桶的名稱稱為“dolphinscheduler”。用戶通過DolphinScheduler UI上傳的共享文件存儲在這個文件夾中。
總結(jié)
作為一款新一代的云原生大數(shù)據(jù)工具,Apache DolphinScheduler 有望在將來與 Kubernetes 生態(tài)系統(tǒng)中更多優(yōu)秀的工具和功能集成,以滿足多樣化的用戶群體和場景需求。
將來的規(guī)劃路線包括下邊:
-
使用 sidecar 定期刪除 worker 作業(yè)日志,實現(xiàn)輕松的運(yùn)維管理
-
與 Argo Workflows 更深入地集成,用戶可以通過 API、CLI 等在 Apache DolphinScheduler 中調(diào)用 Argo Workflows 進(jìn)行單一作業(yè)、DAG 作業(yè)和定期作業(yè)
-
使用 HPA(Horizontal Pod Autoscaling)自動調(diào)整 DolphinScheduler 的任何組件的規(guī)模,實現(xiàn)更具彈性的運(yùn)行環(huán)境,并處理不確定的工作負(fù)載
-
集成 Spark 操作器和 Flink 操作器,進(jìn)行全面的云原生分布式計算
-
實現(xiàn)多云和多集群的分布式作業(yè)調(diào)度,并加強(qiáng)無服務(wù)器和 FAAS 類架構(gòu)屬性。
通過引入云原生技術(shù)和GitOps流程,Apache DolphinScheduler不僅提升了其部署和運(yùn)維的效率,也增強(qiáng)了其在多樣化和高變性任務(wù)處理上的能力。
未來,隨著與Kubernetes生態(tài)系統(tǒng)中更多優(yōu)秀工具和功能的集成,Apache DolphinScheduler預(yù)計將為廣泛的用戶群體和場景需求提供支持。文章來源:http://www.zghlxwxcb.cn/news/detail-854713.html
本文由 白鯨開源 提供發(fā)布支持!文章來源地址http://www.zghlxwxcb.cn/news/detail-854713.html
到了這里,關(guān)于這篇 DolphinScheduler on k8s 云原生部署實踐,值得所有大數(shù)據(jù)人看!的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!