1. Introducción a Dolphinscheduler
Apache DolphinScheduler
Es un DAG
sistema 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 DolphinScheduler
Diseñado para resolver dependencias complejas de tareas de big data y proporcionar aplicaciones con datos y OPS
relaciones en varias orquestaciones. Resuelva el problema de que la I+D de datos ETL
depende de la complejidad y no puede controlar el estado de salud de la tarea. DolphinScheduler
El 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.
2. Objetivos de este capítulo
K8S
CompleteDolphinscheduler
la implementación en función del entorno.- Utilice el almacenamiento de archivos local en lugar de
HDFS
yS3
- Aplicación simple basada en
K8S
el entorno (soporte y fuente de datos y orquestación de flujo de trabajo)Dolphinscheduler
Python3
MySQL
3. Condiciones previas
- Tener
Kubernetes 1.12+
un clúster (obligatorio), usarloKuboard v3
como herramienta de administración de clústeres (opcional)La operación específica se puede ver:
Notas de instalación de K8S (1) - instalación y configuración completas del nodo maestro
Notas de instalación de K8S (2) - varios servidores de red pública para crear clústeres PV
aprovisionamiento (uso de almacenamientoNFS
, la clase de almacenamiento esnfs-storage
)La operación específica se puede ver:
Build NFS Server and create NFS storage class
4. Instale el timón
helm
Documentación oficial, https://helm.sh/docs/intro/install/
4.1 Descargar la versión requerida
Ruta de descarga: https://github.com/helm/helm/releases
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
helm
Ubique 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 dolphinscheduler
versió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.8
la 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.yaml
los 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
5.3 Admite almacenamiento de archivos locales en lugar de HDFS y S3
Modifique values.yaml
los 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"
storageClassName
ystorage
Modifique al valor real según sea necesario, tenga en cuenta:storageClassName
el modo de acceso debe ser compatible:ReadWriteMany
.
5.4 Despliegue
helm dependency update .
helm install dolphinscheduler . -n dolphinscheduler
Efecto de despliegue:
kubectl get pod,svc,pvc -o wide -n dolphinscheduler
5.5 Acceder a la página de inicio
port-forward
reenvío de puertos:
kubectl port-forward --address 0.0.0.0 -n dolphinscheduler svc/dolphinscheduler-api 12345:12345
Explore otros métodos NodePort
o ingress
acceda usted mismo.
Visite la página de inicio: http://localhost:12345/dolphinscheduler/ui
El usuario predeterminado es admin
y la contraseña predeterminada esdolphinscheduler123
6. Admite Python3 y MySQL
6.1 construcción de imágenes dolphinscheduler-worker
Descargue MySQL
el paquete de controladores mysql-connector-java-8.0.16.jar
Estructura de directorios:
Cree uno nuevo Dockerfile
para agregar MySQL
el 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 .
Distribuya la nueva imagen construida.
6.2 construcción de imágenes dolphinscheduler-api
Cree uno nuevo Dockerfile
para agregar MySQL
el 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.yaml
el archivoPYTHON_HOME
a/usr/bin/python3
- O en
Kuboard
-dolphinscheduler
Espacio de nombres - Centro de configuración - Diccionario de configuración -dolphinscheduler-common
- Editar
6.4 Modificar la versión de la imagen en ejecución de dolphinscheduler-worker
6.5 Modificar dolphinscheduler-api para ejecutar la versión espejo
Siete, verificación de uso simple
7.1 Iniciar sesión
7.2 Crear un inquilino
7.3 Crear un proyecto
7.4 Crear una fuente de datos
7.5 Creación de un proyecto
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
}]