這篇 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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...