Notas de aplicación de K8S: implementación de Dolphinscheduler y aplicaciones simples (1)

1. Introducción a Dolphinscheduler

Apache DolphinSchedulerEs un DAGsistema de código abierto de programación de tareas de flujo de trabajo visual distribuido y fácilmente escalable. Aplicable a escenarios de nivel empresarial, proporciona una solución para visualizar tareas operativas, flujos de trabajo y procesos de procesamiento de datos a lo largo del ciclo de vida.

Apache DolphinSchedulerDiseñado para resolver dependencias complejas de tareas de big data y proporcionar aplicaciones con datos y OPSrelaciones en varias orquestaciones. Resuelva el problema de que la I+D de datos ETLdepende de la complejidad y no puede controlar el estado de salud de la tarea. DolphinSchedulerEl ensamblaje de tareas en DAG(Directed Acyclic Graph,DAG)forma de transmisión puede monitorear el estado de ejecución de las tareas de manera oportuna y admite operaciones como reintento, falla de recuperación de nodos específicos, suspensión, recuperación y terminación de tareas.

inserte la descripción de la imagen aquí

2. Objetivos de este capítulo

  • K8SComplete Dolphinschedulerla implementación en función del entorno.
  • Utilice el almacenamiento de archivos local en lugar de HDFSyS3
  • Aplicación simple basada en K8Sel entorno (soporte y fuente de datos y orquestación de flujo de trabajo)DolphinschedulerPython3MySQL

3. Condiciones previas

4. Instale el timón

helmDocumentación oficial, https://helm.sh/docs/intro/install/

4.1 Descargar la versión requerida

Ruta de descarga: https://github.com/helm/helm/releases

inserte la descripción de la imagen aquí

La versión de mi elección de opciones es:helm-v3.12.2-linux-amd64

4.2 Subir al servidor y descomprimir

tar -zxvf helm-v3.12.2-linux-amd64.tar.gz

4.3 Mover al directorio ejecutable

helmUbique los archivos binarios en el directorio extraído y muévalos al destino deseado

mv linux-amd64/helm /usr/local/bin/helm

4.4 Instalar desde script

Instalar secuencia de comandos:

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh

Cinco, instale dolphinscheduler

5.1 Descargar y descomprimir

Descargue el paquete del código fuente apache-dolphinscheduler--src.tar.gz, descargue la dirección .

Lanzar una dolphinschedulerversión denominada ( release), la referencia oficial es la siguiente:

tar -zxvf apache-dolphinscheduler-<version>-src.tar.gz
cd apache-dolphinscheduler-<version>-src/deploy/kubernetes/dolphinscheduler
helm repo add bitnami https://charts.bitnami.com/bitnami
helm dependency update .
helm install dolphinscheduler . --set image.tag=<version>

Elegí 3.1.8la versión, y el comando de ejecución específico es el siguiente:

tar -zxvf apache-dolphinscheduler-3.1.8-src.tar.gz
cd apache-dolphinscheduler-3.1.8-src/deploy/kubernetes/dolphinscheduler

5.2 Cambiar la dirección de solicitud de recursos RAW

La dirección de solicitud original es: https://raw.githubusercontent.com/ , es posible que la conexión nacional no esté disponible, cambie la dirección de aceleración de recursos RAW: https://raw.gitmirror.com

Modifique Chart.yamllos siguientes elementos de configuración en el archivo:

vi Chart.yaml
#原地址
#repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami
#资源加速地址
repository: https://raw.gitmirror.com/bitnami/charts/archive-full-index/bitnami

inserte la descripción de la imagen aquí

5.3 Admite almacenamiento de archivos locales en lugar de HDFS y S3

Modifique values.yamllos siguientes elementos de configuración en el archivo:

common:
  configmap:
    RESOURCE_STORAGE_TYPE: "NONE"
    RESOURCE_UPLOAD_PATH: "/dolphinscheduler"
    FS_DEFAULT_FS: "file:///"
  fsFileResourcePersistence:
    enabled: true
    accessModes:
    - "ReadWriteMany"
    storageClassName: "-"
    storage: "20Gi"

storageClassNamey storageModifique al valor real según sea necesario, tenga en cuenta: storageClassNameel modo de acceso debe ser compatible: ReadWriteMany.

inserte la descripción de la imagen aquí

5.4 Despliegue

helm dependency update .
helm install dolphinscheduler . -n dolphinscheduler

Efecto de despliegue:

kubectl get pod,svc,pvc -o wide -n dolphinscheduler

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

5.5 Acceder a la página de inicio

port-forwardreenvío de puertos:

kubectl port-forward --address 0.0.0.0 -n dolphinscheduler svc/dolphinscheduler-api 12345:12345

Explore otros métodos NodePorto ingressacceda usted mismo.

Visite la página de inicio: http://localhost:12345/dolphinscheduler/ui

El usuario predeterminado es adminy la contraseña predeterminada esdolphinscheduler123

6. Admite Python3 y MySQL

6.1 construcción de imágenes dolphinscheduler-worker

Descargue MySQLel paquete de controladores mysql-connector-java-8.0.16.jar

Estructura de directorios:
inserte la descripción de la imagen aquí

Cree uno nuevo Dockerfilepara agregar MySQLel paquete del controlador e instalarlo Python 3:

FROM dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-worker:3.1.8
# 添加mysql驱动
COPY ./mysql-connector-java-8.0.16.jar /opt/dolphinscheduler/libs
# 添加自定义requirements.txt
COPY ./requirements.txt /tmp
RUN apt-get update && \
    apt-get install -y --no-install-recommends python3-pip && \
	pip3 install --no-cache-dir -r /tmp/requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ && \
    rm -rf /var/lib/apt/lists/*

requirements.txt

Flask_Cors==3.0.10
pandas==1.4.2
PyMySQL==1.0.2
SQLAlchemy==1.4.32
xlwt==1.3.0
xlsxwriter==3.0.3
gunicorn
greenlet
eventlet
gevent
pypinyin
openpyxl

Cree una nueva imagen que contenga:

docker build -t apache/dolphinscheduler-worker:python3-mysql .

inserte la descripción de la imagen aquí

Distribuya la nueva imagen construida.

6.2 construcción de imágenes dolphinscheduler-api

Cree uno nuevo Dockerfilepara agregar MySQLel paquete del controlador e instalarlo Python 3:

FROM dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-api:3.1.8
# 添加mysql驱动

Cree una nueva imagen que contenga:

docker build -t apache/dolphinscheduler-api:support-mysql .

Distribuya la nueva imagen construida.

6.3 Modificar PYTHON_HOME

  • Modificar values.yamlel archivo PYTHON_HOMEa/usr/bin/python3
  • O en Kuboard- dolphinschedulerEspacio de nombres - Centro de configuración - Diccionario de configuración - dolphinscheduler-common- Editar
    inserte la descripción de la imagen aquí

6.4 Modificar la versión de la imagen en ejecución de dolphinscheduler-worker

inserte la descripción de la imagen aquí

6.5 Modificar dolphinscheduler-api para ejecutar la versión espejo

inserte la descripción de la imagen aquí

Siete, verificación de uso simple

7.1 Iniciar sesión

inserte la descripción de la imagen aquí

7.2 Crear un inquilino

inserte la descripción de la imagen aquí

7.3 Crear un proyecto

inserte la descripción de la imagen aquí

7.4 Crear una fuente de datos

inserte la descripción de la imagen aquí

7.5 Creación de un proyecto

inserte la descripción de la imagen aquí

7.6 Crear un flujo de trabajo

[{
    
    
	"processDefinition": {
    
    
		"id": 1,
		"code": 10577001612288,
		"name": "测试",
		"version": 1,
		"releaseState": "OFFLINE",
		"projectCode": 10576969989760,
		"description": "",
		"globalParams": "[]",
		"globalParamList": [],
		"globalParamMap": {
    
    },
		"createTime": "2023-08-15 09:33:45",
		"updateTime": "2023-08-15 09:33:45",
		"flag": "YES",
		"userId": 1,
		"userName": null,
		"projectName": null,
		"locations": "[{\"taskCode\":10576976496512,\"x\":175,\"y\":216},{\"taskCode\":10576980784256,\"x\":498,\"y\":216},{\"taskCode\":10576997351040,\"x\":834,\"y\":216}]",
		"scheduleReleaseState": null,
		"timeout": 0,
		"tenantId": -1,
		"tenantCode": null,
		"modifyBy": null,
		"warningGroupId": 0,
		"executionType": "PARALLEL"
	},
	"processTaskRelationList": [{
    
    
		"id": 1,
		"name": "",
		"processDefinitionVersion": 1,
		"projectCode": 10576969989760,
		"processDefinitionCode": 10577001612288,
		"preTaskCode": 0,
		"preTaskVersion": 0,
		"postTaskCode": 10576976496512,
		"postTaskVersion": 1,
		"conditionType": "NONE",
		"conditionParams": {
    
    },
		"createTime": "2023-08-15 09:33:45",
		"updateTime": "2023-08-15 09:33:45",
		"operator": 1,
		"operateTime": "2023-08-15 09:33:45"
	}, {
    
    
		"id": 2,
		"name": "",
		"processDefinitionVersion": 1,
		"projectCode": 10576969989760,
		"processDefinitionCode": 10577001612288,
		"preTaskCode": 10576976496512,
		"preTaskVersion": 1,
		"postTaskCode": 10576980784256,
		"postTaskVersion": 1,
		"conditionType": "NONE",
		"conditionParams": {
    
    },
		"createTime": "2023-08-15 09:33:45",
		"updateTime": "2023-08-15 09:33:45",
		"operator": 1,
		"operateTime": "2023-08-15 09:33:45"
	}, {
    
    
		"id": 3,
		"name": "",
		"processDefinitionVersion": 1,
		"projectCode": 10576969989760,
		"processDefinitionCode": 10577001612288,
		"preTaskCode": 10576980784256,
		"preTaskVersion": 1,
		"postTaskCode": 10576997351040,
		"postTaskVersion": 1,
		"conditionType": "NONE",
		"conditionParams": {
    
    },
		"createTime": "2023-08-15 09:33:45",
		"updateTime": "2023-08-15 09:33:45",
		"operator": 1,
		"operateTime": "2023-08-15 09:33:45"
	}],
	"taskDefinitionList": [{
    
    
		"id": 1,
		"code": 10576976496512,
		"name": "sql",
		"version": 1,
		"description": "",
		"projectCode": 10576969989760,
		"userId": 1,
		"taskType": "SQL",
		"taskParams": {
    
    
			"localParams": [],
			"resourceList": [],
			"type": "MYSQL",
			"datasource": 1,
			"sql": "show tables",
			"sqlType": "0",
			"preStatements": [],
			"postStatements": [],
			"segmentSeparator": "",
			"displayRows": 10
		},
		"taskParamList": [],
		"taskParamMap": null,
		"flag": "YES",
		"taskPriority": "MEDIUM",
		"userName": null,
		"projectName": null,
		"workerGroup": "default",
		"environmentCode": -1,
		"failRetryTimes": 0,
		"failRetryInterval": 1,
		"timeoutFlag": "CLOSE",
		"timeoutNotifyStrategy": null,
		"timeout": 0,
		"delayTime": 0,
		"resourceIds": "",
		"createTime": "2023-08-15 09:33:45",
		"updateTime": "2023-08-15 09:33:45",
		"modifyBy": null,
		"taskGroupId": 0,
		"taskGroupPriority": 0,
		"cpuQuota": -1,
		"memoryMax": -1,
		"taskExecuteType": "BATCH",
		"operator": 1,
		"operateTime": "2023-08-15 09:33:45"
	}, {
    
    
		"id": 2,
		"code": 10576980784256,
		"name": "shell",
		"version": 1,
		"description": "",
		"projectCode": 10576969989760,
		"userId": 1,
		"taskType": "SHELL",
		"taskParams": {
    
    
			"localParams": [],
			"rawScript": "echo \"hello shell\"",
			"resourceList": []
		},
		"taskParamList": [],
		"taskParamMap": null,
		"flag": "YES",
		"taskPriority": "MEDIUM",
		"userName": null,
		"projectName": null,
		"workerGroup": "default",
		"environmentCode": -1,
		"failRetryTimes": 0,
		"failRetryInterval": 1,
		"timeoutFlag": "CLOSE",
		"timeoutNotifyStrategy": null,
		"timeout": 0,
		"delayTime": 0,
		"resourceIds": "",
		"createTime": "2023-08-15 09:33:45",
		"updateTime": "2023-08-15 09:33:45",
		"modifyBy": null,
		"taskGroupId": 0,
		"taskGroupPriority": 0,
		"cpuQuota": -1,
		"memoryMax": -1,
		"taskExecuteType": "BATCH",
		"operator": 1,
		"operateTime": "2023-08-15 09:33:45"
	}, {
    
    
		"id": 3,
		"code": 10576997351040,
		"name": "python",
		"version": 1,
		"description": "",
		"projectCode": 10576969989760,
		"userId": 1,
		"taskType": "PYTHON",
		"taskParams": {
    
    
			"localParams": [],
			"rawScript": "print(\"hello python\")",
			"resourceList": []
		},
		"taskParamList": [],
		"taskParamMap": null,
		"flag": "YES",
		"taskPriority": "MEDIUM",
		"userName": null,
		"projectName": null,
		"workerGroup": "default",
		"environmentCode": -1,
		"failRetryTimes": 0,
		"failRetryInterval": 1,
		"timeoutFlag": "CLOSE",
		"timeoutNotifyStrategy": null,
		"timeout": 0,
		"delayTime": 0,
		"resourceIds": "",
		"createTime": "2023-08-15 09:33:45",
		"updateTime": "2023-08-15 09:33:45",
		"modifyBy": null,
		"taskGroupId": 0,
		"taskGroupPriority": 0,
		"cpuQuota": -1,
		"memoryMax": -1,
		"taskExecuteType": "BATCH",
		"operator": 1,
		"operateTime": "2023-08-15 09:33:45"
	}],
	"schedule": null
}]

inserte la descripción de la imagen aquí

7.7 Conexión en línea

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/ctwy291314/article/details/132273930
Recomendado
Clasificación