這篇 DolphinScheduler on k8s 雲原生部署實踐,值得所有大數據人看!

来源:https://www.cnblogs.com/DolphinScheduler/p/18141313
-Advertisement-
Play Games

在當前快速發展的技術格局中,企業尋求創新解決方案來簡化運營並提高效率成為一種趨勢。 Apache DolphinScheduler作為一個強大的工具,允許跨分散式系統進行複雜的工作流任務調度。本文將深入探討如何將Apache DolphinScheduler適配並整合進現代IT環境,提升其在雲原生部 ...


在當前快速發展的技術格局中,企業尋求創新解決方案來簡化運營並提高效率成為一種趨勢。

Apache DolphinScheduler作為一個強大的工具,允許跨分散式系統進行複雜的工作流任務調度。本文將深入探討如何將Apache DolphinScheduler適配並整合進現代IT環境,提升其在雲原生部署中的表現。

前言

Apache DolphinScheduler 的高效雲原生部署模式,比原始部署模式節省了95%以上的人力資源和工作時間,提升了部署效率和成本效益。

通過集成 GitOps 技術,我們提升了Apache DolphinScheduler 的 DevOps 管理能力,改善了軟體交付效率和安全審計能力。

通過集成新的雲原生技術,我們為 Apache DolphinScheduler 增加了水平擴展、健康探測和滾動部署等功能,提升了其靈活性和適應性。

將 Prometheus 等可觀測性技術整合到基礎設施和服務網格中,顯著提升了 DolphinScheduler 的監控功能,為其性能和健康狀態提供了更深入的洞察。

與 Kubernetes 作業技術深度整合,實現了 DolphinScheduler 的混合調度器,適用於傳統虛擬機和基於容器的運行環境,提升了其多樣性和相容性。

項目特點

Apache DolphinScheduler 是由 Analysys 開源的分散式、易於擴展的可視化工作流任務調度平臺,解決了需要企業級問題:

  • 多源數據連接和訪問:技術領域中最常見的數據源都可以訪問,添加新數據源不需要太多改動。

  • 多樣化、專業化和大規模數據任務管理:這涉及到大數據(Hadoop 系列、Flink 等)任務調度的問題,與傳統調度器有著顯著區別。

  • 圖形化任務編排:提供了方便的用戶體驗,與商業產品具有競爭力,尤其是對於大多數無法通過拖放直接生成數據任務的國外開源產品而言。

  • 任務細節:豐富的任務、日誌和運行時間軸顯示,滿足了開發人員對精細化數據任務管理的需求,快速定位慢 SQL 和性能瓶頸。

  • 支持各種分散式文件系統:豐富了用戶對非結構化數據的選擇。

  • 本地多租戶管理:滿足了大型組織對數據任務管理和隔離的需求。

  • 完全自動化的分散式調度演算法來平衡所有調度任務。

  • 本地集群監控:可以監控 CPU、記憶體、連接數和 Zookeeper 狀態,適用於中小企業的一站式運維。

  • 本地任務告警功能:最大程度地減少任務操作的風險。

  • 強大的社區運營:傾聽客戶的真實聲音,不斷添加新功能,持續優化客戶體驗。

分散式集群

基於早期的微服務技術,Apache DolphinScheduler採用了服務註冊表的概念,通過使用Zookeeper進行集群的分散式管理(許多大數據技術使用Zookeeper作為分散式集群管理)。

Worker主節點可以任意添加,或者可以獨立部署API管理和告警管理。作為一個企業級技術模塊,它實現了微服務分離、獨立部署和模塊化管理的良好技術特性。然而,在容器化雲原生應用迅速發展的時代,這種基本的技術模式存在一些不足之處:

  • 需要從頭開始部署,無論是安裝在物理機還是虛擬機上,DolphinScheduler都需要數百個shell操作,一個節點集群可能需要數千個shell操作。

  • 標準化的企業級DolphinScheduler涉及到管理大量基本環境,並且通常需要超過八個節點、主機和IP地址。這些基礎設施信息帶來了一定的管理難度。

  • 添加節點時,還需要進行數十個操作(安裝Java、配置主機、設置DS Linux用戶、設置免密碼登錄、修改安裝節點配置文件),並且整個集群需要停止和重新啟動。

  • 大型企業通常有多個集群來支持不同的業務單元,這將在工作負載中帶來大量的重覆。

  • 調度器具有一些可觀察性功能,但無法與主流工具集成。

  • 整體而言,調度器仍然需要日常例行檢查工作,例如調查核心Java進程異常退出。

  • 在不同的需求和場景下,調度器的配置設置缺乏有效的管理機制或工具。

核心技術思路

解決這些技術缺陷的核心思路包括:

  • 如何將Apache DolphinScheduler集成到當今主流的雲原生技術中;

  • 如何在減少人力資源的情況下部署DolphinScheduler,是否能實現完全自動化的集群安裝和部署模式;

  • 如何實現完全無伺服器的DolphinScheduler,並大幅降低配置管理的管理成本;

  • 如何標準化技術組件的實現規範;

  • 是否可以實現無人監管運行,並且系統具備自我修複能力;

  • 如何構建並將其集成到現有的可觀測性平臺中。

利用Kubernetes技術

作為雲原生系統技術的事實標準,Kubernetes已經給整個IT應用技術系統帶來了革命性的變化。Kubernetes主要基於服務註冊和發現、負載均衡、自動化軟體發佈和回滾、容器化隔離、軟體自愈和分散式配置管理等核心技術特性。

不僅如此,還可以整合 Cloud Native Computing Foundation(CNCF)的許多優秀項目至 ds on k8s 部署:

  • Apache DolphinScheduler的部署技術得到了改進。我們使用了Helm和Argo CD來大大簡化和實現一鍵部署。

  • 通過Argo CD實現了配置內容的GitOps管理機制,從而實現了現代DevOps的完整審計能力。

  • Kubernetes的水平Pod自動縮放技術大大簡化了應用擴展的操作難度。

  • Kubernetes的標準化健康探針技術使得調度器的所有技術組件都具備了強大的自愈能力。

  • Kubernetes和Argo CD的滾動發佈技術實現了DolphinScheduler工具的優雅簡單升級。

  • 使用Kube-Prometheus技術為DolphinScheduler帶來了標準化的可觀測性能力。

  • 強大的UI技術簡化了CMDB可視化管理、基於Kubernetes的組件配置管理、應用日誌管理等。

還可以向DolphinScheduler引入了更強大的工具,以獲取更豐富的雲原生特性:

  • 通過Kubernetes服務註冊發現和Ingress技術實現了更輕鬆的服務訪問;

  • 引入了Linkerd,將服務網格的功能引入DolphinScheduler,提高了所有API的管理和監控能力;

  • 將DolphinScheduler與Argo Workflows或標準的Kubernetes作業結合起來;

  • 引入對象存儲技術MinIO,將存儲非結構化數據的技術與DolphinScheduler統一起來。

雲原生平臺初始化遷移

部署步驟

  1. 從 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

  2. 使用以下命令來部署一個由 Kubernetes 管理的 DolphinScheduler 實例:

    kubectl create ns ds139
    helm install dolphinscheduler . -n ds139
    
    
  3. 有時,Apache DolphinScheduler 用戶需要集成 DataX、SeaTunnel、MySQL JDBC 驅動程式或 Oracle JDBC 驅動程式以進行 ETL 和資料庫連接。

我們可以下載必要的組件,構建新的 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

一般建議在生產環境中使用獨立的外部 PostgreSQL 作為 DolphinScheduler 的管理資料庫。

這樣,切換到外部資料庫後,即使在 Kubernetes 中完全刪除並重新部署 DolphinScheduler,也不需要重新創建 Apache DolphinScheduler 的應用數據(例如用戶定義的數據處理任務)。

這再次證明瞭高可用性和數據完整性。此外,建議為Apache DolphinScheduler 組件配置 PersistentVolume,因為如果 pod 重新啟動或升級,歷史 DolphinScheduler 應用日誌將會丟失。

與傳統模式下執行數百個 shell 命令相比,只需修改一個配置文件,並使用單行安裝命令,就可以自動安裝八個 Apache DolphinScheduler 組件,節省了大量人力成本和操作錯誤。

對於多個 DolphinScheduler 集群,這將大大降低人力成本,業務部門的等待時間將從幾天減少到不到一個小時,甚至可能十分鐘內完成。

基於Argo CD添加GitOps

Argo CD 是一個基於 Kubernetes 的聲明式 GitOps 持續交付工具,是 CNCF 的孵化項目,也是 GitOps 的最佳實踐工具。

GitOps 對 Apache DolphinScheduler 的實現帶來了以下優勢:

  • 集群軟體的圖形化和一鍵式安裝

  • Git 記錄了完整的發佈過程,實現一鍵回滾

  • 方便的 DolphinScheduler 工具日誌查看

一旦實施完成,我們可以看到由 Argo CD 自動部署的 Pod、ConfigMap、Secret、Service、Ingress 等資源,它還顯示了清單提交信息和用戶名,完全記錄了所有發佈事件信息。同時,還可以通過一鍵點擊回滾到歷史版本。

file

相關資源信息可以通過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 都部署在不同的主機上,例如,worker1 和 worker2 分別部署在不同的節點上。
file

一旦配置了 Ingress,我們就可以使用功能變數名稱在公司的內部網路中訪問 Apache DolphinScheduler 的 Web 用戶界面,讓我們以 DNS 子功能變數名稱 abc.com 為例:

http://ds139.abc.com/dolphinscheduler/ui/#/home,我們可以在Argo CD 中查看 Apache DolphinScheduler 的每個組件的內部日誌:

file

使用 Argo CD,修改主節點、工作節點、API 或警報等組件的副本數量非常方便。Apache DolphinScheduler 的Helm配置還保留了 CPU 和記憶體的設置信息。在 value.yaml 文件中修改副本的設置。

修改後,我們可以將其推送到公司的內部源代碼系統:

master:
  podManagementPolicy: "Parallel"
  replicas: "5"
worker:
  podManagementPolicy: "Parallel"
  replicas: "5"
alert:
  replicas: "3"
api:
  replicas: "3"

只需在 Argo CD 上點擊同步即可進行同步,所需的相應 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 技術為整個 DolphinScheduler 工具提供了圖形化、自動化、可追溯、可審計和強大的 DevOps、回滾和監控功能,而無需對 DolphinScheduler 進行任何代碼修改。

Apache DolphinScheduler 在 k8s 上的服務自愈

眾所周知,當代的IT環境總是處於不穩定狀態。換句話說,我們的技術系統將伺服器、操作系統和網路的各種故障視為集群中的常規事件。當最終用戶無法通過瀏覽器正常訪問 Apache DolphinScheduler 的任務管理頁面,或者 DolphinScheduler 無法運行常規的大數據任務時,已經為時已晚。

技術現狀

然而,在 Apache DolphinScheduler 轉向雲原生之前,它只能依靠日常監控來檢查主節點/工作節點/API等組件是否正常運行,通過 DolphinScheduler 管理UI,或者通過 jps 檢查Java進程是否存在。

當企業擁有數百個調度環境時,這不僅會花費大量時間,而且更重要的是,系統的可用性將面臨巨大風險。

值得註意的是,Kubernetes 技術本身可以自動重啟和恢復標準化應用程式的有狀態和部署類型,甚至 CRD 本身也可以自動重啟和恢復。

當應用程式失敗時,會記錄異常事件,並重新拉取應用程式以重新啟動應用程式,Kubernetes 將記錄 pod 重新啟動的次數,以便技術人員可以快速定位故障

除了標準化的自愈機制外,還有主動的健康監控方法。通過構建一個服務介面來主動探測正在運行 DolphinScheduler 的 pod,使用 livenessProbe 機制,當檢測次數超過失敗重試次數時,該機制可以自動重啟 pod。

此外,通過使用 readinessProbe,Kubernetes 集群可以在探測器捕獲異常時自動切斷對異常 pod 的流量,併在異常事件消失後自動恢復對 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 已經成為雲原生系統中監控工具的事實標準,將 Apache DolphinScheduler 的標準監控整合到 Prometheus 系統中對我們來說是最合理的選擇。

  • Kube-Prometheus 技術可以監控 Kubernetes 集群中的所有資源。
  • StatefulSet、命名空間和 Pod 是 DolphinScheduler 的三個主要資源特性。
  • 通過 Kube-Prometheus 技術,可以自動進行 CPU、記憶體、網路、IO、副本等方面的常規監控,無需額外的開發或配置。

我們在 Kubernetes 中使用 Kube-Prometheus operator 技術,在部署後自動監控 Apache DolphinScheduler 的每個組件的資源。

但請註意Kube-Prometheus 的版本需要與 Kubernetes 的主版本對應。

集成服務網格

作為數據服務提供商,Apache DolphinScheduler 通過服務網格技術實現了服務鏈接的可觀察性管理,並將其納入內部服務治理系統中。
不僅需要通用資源監控,還需要服務調用鏈的監控技術。通過服務網格技術,可以實現 Apache DolphinScheduler 的內部服務調用以及 DolphinScheduler API 的外部調用的可觀察性分析,優化 DolphinScheduler 產品的服務。

此外,作為數據工具的服務組件,Apache DolphinScheduler 可以通過服務網格工具無縫集成到企業的內部服務模式中。

使得具有 TLS 服務通信能力、客戶端服務通信重試機制和跨集群服務註冊發現等功能成為可能,而無需修改 DolphinScheduler 的代碼。通過服務網格技術,可以實現對 Apache DolphinScheduler 的 API 外部服務調用和內部調用的可觀察性分析,從而優化 Apache DolphinScheduler 產品服務。

我們使用了 Linkerd 作為服務網格產品進行集成,這也是 CNCF 出色的畢業項目之一。通過修改 Apache DolphinScheduler Helm 中 value.yaml 文件中的註釋,並重新部署,可以快速將網格代理 sidecar 註入到 DolphinScheduler 的 master、worker、API、alert 等組件中。

annotations:
  linkerd.io/inject: enabled

還可以觀察組件之間通信的服務質量,包括每秒請求的數量:

file

雲原生工作流調度

要成為真正的雲原生調度工具,Apache DolphinScheduler需要能夠調度雲原生作業流程。

調度的任務都是在固定的Pod中執行。在這種模式下,任務開發技術的隔離要求相對較高。

特別是在Python語言環境下,團隊中會存在不同版本的Python基礎和依賴包,甚至版本之間的差異可能會出現數百種組合。

依賴包的輕微差異就會導致Python程式運行錯誤。這也是阻止DolphinScheduler運行大量Python應用程式的障礙。

建議採取以下方法,以便DolphinScheduler能夠快速與Kubernetes作業系統集成,並具有強大的任務隔離和併發能力:

  • 使用標準的Kubernetes API系統進行作業提交。可以通過kubectl命令行或REST API直接提交任務。

  • 將kubectl命令文件上傳到DolphinScheduler,並通過DolphinScheduler的shell任務提交。

  • 使用Argo Workflows項目的Argo CLI命令或REST API命令進行提交。

無論是Kubernetes還是Argo Workflows,都需要添加watch功能,因為Kubernetes是一種非同步技術,需要等待任務完成。

在這裡,我們以Argo Workflows為例,我們可以在DolphinScheduler中創建一個新的shell任務或步驟,並將以下命令粘貼到其中。

結果,我們可以將常規的數據作業(例如資料庫SQL作業、Spark作業或Flink作業)和雲原生作業結合起來,執行更全面的作業流程。例如,這個作業是一個Hive SQL任務,用於導出Web應用的用戶點擊數據:

beeline -u "jdbc:hive2://192.168.1.1:10006" --outputformat=csv2 -e "select * from database.user-click" > user-click.csv 

這個示例作業是一個Python Tensorflow任務,用於通過訓練數據構建機器學習模型。

該作業通過HTTP方式運行。首先,我們運行該作業:
通過HTTP方式運行Python Tensorflow作業

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": {}
                   }
                }
               }'

然後我們可以檢查工作信息和狀態:

#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文件技術

分散式演算法是雲原生技術領域之一,比如谷歌的Kubeflow技術,它完美地結合了TensorFlow和Kubernetes。分散式演算法通常使用文件,而S3是存儲大型數據文件的事實標準,這些文件可以很容易地訪問。

當然,Apache DolphinScheduler還集成了MinIO技術,通過簡單的配置可以實現S3文件管理。

首先,通過修改Helm value.yaml文件中的configmap部分,將其指向一個MinIO伺服器。

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上傳的共用文件存儲在這個文件夾中。

總結

作為一款新一代的雲原生大數據工具,Apache DolphinScheduler 有望在將來與 Kubernetes 生態系統中更多優秀的工具和功能集成,以滿足多樣化的用戶群體和場景需求。

將來的規劃路線包括下邊:

  • 使用 sidecar 定期刪除 worker 作業日誌,實現輕鬆的運維管理

  • 與 Argo Workflows 更深入地集成,用戶可以通過 API、CLI 等在 Apache DolphinScheduler 中調用 Argo Workflows 進行單一作業、DAG 作業和定期作業

  • 使用 HPA(Horizontal Pod Autoscaling)自動調整 DolphinScheduler 的任何組件的規模,實現更具彈性的運行環境,並處理不確定的工作負載

  • 集成 Spark 操作器和 Flink 操作器,進行全面的雲原生分散式計算

  • 實現多雲和多集群的分散式作業調度,並加強無伺服器和 FAAS 類架構屬性。

通過引入雲原生技術和GitOps流程,Apache DolphinScheduler不僅提升了其部署和運維的效率,也增強了其在多樣化和高變性任務處理上的能力。

未來,隨著與Kubernetes生態系統中更多優秀工具和功能的集成,Apache DolphinScheduler預計將為廣泛的用戶群體和場景需求提供支持。

本文由 白鯨開源 提供發佈支持!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • JWT(JSON Web Token)是一種用於在網路應用之間傳遞信息的開放標準(RFC 7519)。它使用 JSON 對象在安全可靠的方式下傳遞信息,通常用於身份驗證和信息交換。 在Web API中,JWT通常用於對用戶進行身份驗證和授權。當用戶登錄成功後,伺服器會生成一個Token並返回給客戶端 ...
  • 目錄 目錄目錄基礎指令Linux命令基本格式文件操作文件格式文件許可權創建文件查看文件刪除文件移動文件複製文件編輯文件查找文件查找命令路徑vim文本編輯器一般指令模式(command mode)編輯模式(insert mode)指令列命令模式command-line mode目錄操作列印路徑查看目錄切 ...
  • 1、安裝Docker Centos7.6-centos7.9 # 配置主機名: hostnamectl set-hostname master1 && bash #關閉防火牆 systemctl stop firewalld && systemctl disable firewalld #關閉ipt ...
  • Linux 的重要性不用我多說了吧,大多數互聯網公司,伺服器都是採用的Linux操作系統 Linux是一個主要通過命令行來進行管理的操作系統。 只有熟練掌握Linux核心命令,在使用起來我們才會得心應手 這裡給大家整理了Linux一些核心命令,掌握這些核心命令,工作中應該游刃有餘了 一、腦圖 二、詳 ...
  • Part1:sleep 實驗要求與提示 可以參考 user/echo.c, user/grep.c 和 user/rm.c 文件 如果用戶忘記傳遞參數,sleep 應該列印一條錯誤消息 命令行參數傳遞時為字元串,可以使用 atoi 函數將字元串轉為數字 使用系統調用 sleep,有關實現 sleep ...
  • 深度解析GaussDB(DWS)+Flink如何增強湖倉增量數據在不同數據模型層之間的實時流動能力,如何為消息數據流提供高性能通用入庫能力,又如何構建極致的端到端實時數倉解決方案。 ...
  • 提要(廢話): 最近我將筆記本重裝了,為了保留之前的程式,我把相關的註冊表和環境備份了下來,重裝之後重新導入成功再現了部分軟體。如MySQL這樣的程式,都是預設安裝在C盤之中的,雖然C盤的程式文件我也做了備份並且重新拷貝到了新系統C盤裡,但MySQL無法啟動了,同時我更新了系統之後就把安裝源MSI文 ...
  • 在實際項目中,從Kafka到HDFS的數據是每天自動生成一個文件,按日期區分。而且Kafka在不斷生產數據,因此看看kettle是不是需要時刻運行?能不能按照每日自動生成數據文件? 為了測試實際項目中的海豚定時調度從Kafka到HDFS的Kettle任務情況,特地提前跑一下海豚定時調度這個任務,看看 ...
一周排行
    -Advertisement-
    Play Games
  • 概述:本文代碼示例演示瞭如何在WPF中使用LiveCharts庫創建動態條形圖。通過創建數據模型、ViewModel和在XAML中使用`CartesianChart`控制項,你可以輕鬆實現圖表的數據綁定和動態更新。我將通過清晰的步驟指南包括詳細的中文註釋,幫助你快速理解並應用這一功能。 先上效果: 在 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • 概述:本示例演示了在WPF應用程式中實現多語言支持的詳細步驟。通過資源字典和數據綁定,以及使用語言管理器類,應用程式能夠在運行時動態切換語言。這種方法使得多語言支持更加靈活,便於維護,同時提供清晰的代碼結構。 在WPF中實現多語言的一種常見方法是使用資源字典和數據綁定。以下是一個詳細的步驟和示例源代 ...
  • 描述(做一個簡單的記錄): 事件(event)的本質是一個委托;(聲明一個事件: public event TestDelegate eventTest;) 委托(delegate)可以理解為一個符合某種簽名的方法類型;比如:TestDelegate委托的返回數據類型為string,參數為 int和 ...
  • 1、AOT適合場景 Aot適合工具類型的項目使用,優點禁止反編 ,第一次啟動快,業務型項目或者反射多的項目不適合用AOT AOT更新記錄: 實實在在經過實踐的AOT ORM 5.1.4.117 +支持AOT 5.1.4.123 +支持CodeFirst和非同步方法 5.1.4.129-preview1 ...
  • 總說周知,UWP 是運行在沙盒裡面的,所有許可權都有嚴格限制,和沙盒外交互也需要特殊的通道,所以從根本杜絕了 UWP 毒瘤的存在。但是實際上 UWP 只是一個應用模型,本身是沒有什麼許可權管理的,許可權管理全靠 App Container 沙盒控制,如果我們脫離了這個沙盒,UWP 就會放飛自我了。那麼有沒... ...
  • 目錄條款17:讓介面容易被正確使用,不易被誤用(Make interfaces easy to use correctly and hard to use incorrectly)限制類型和值規定能做和不能做的事提供行為一致的介面條款19:設計class猶如設計type(Treat class de ...
  • title: 從零開始:Django項目的創建與配置指南 date: 2024/5/2 18:29:33 updated: 2024/5/2 18:29:33 categories: 後端開發 tags: Django WebDev Python ORM Security Deployment Op ...
  • 1、BOM對象 BOM:Broswer object model,即瀏覽器提供我們開發者在javascript用於操作瀏覽器的對象。 1.1、window對象 視窗方法 // BOM Browser object model 瀏覽器對象模型 // js中最大的一個對象.整個瀏覽器視窗出現的所有東西都 ...