Datax3.0+DataX-Web crea un sistema ETL visual distribuido

1. Introducción a DataX

DataX es la versión de código abierto de la integración de datos de Alibaba Cloud DataWorks, que se utiliza principalmente para realizar la sincronización sin conexión entre datos. DataX se compromete a lograr una sincronización de datos estable y eficiente entre varias fuentes de datos heterogéneas (es decir, diferentes bases de datos), incluidas las bases de datos relacionales (MySQL, Oracle, etc.), HDFS, Hive, ODPS, HBase, FTP, etc.

Para resolver el problema de sincronización de las fuentes de datos heterogéneas, DataX convierte el enlace de sincronización de malla compleja en un enlace de datos en forma de estrella, y DataX es responsable de conectar varias fuentes de datos como un portador de transmisión intermedio; cuando se necesita una nueva fuente de datos accedido, solo necesita conectar esta fuente de datos a DataX, y puede sincronizar con la fuente de datos existente como datos continuos.

1. Diseño del marco DataX3.0

DataX adopta la arquitectura Framework + Plugin, que abstrae la lectura y escritura de fuentes de datos llamadas complementos Reader/Writer en todo el marco de sincronización.

2. Arquitectura central DataX3.0

DataX completa un solo trabajo de sincronización de datos, al que llamamos trabajo. Después de que DataX recibe un trabajo, comenzará un proceso para completar todo el proceso de sincronización del trabajo. El módulo de trabajo de DataX es el nodo de gestión central de un solo trabajo y realiza funciones como la limpieza de datos, la segmentación de subtareas y la gestión de grupos de tareas.

Una vez que se inicia el trabajo de DataX, lo dividirá en varias tareas pequeñas (subtareas) de acuerdo con las estrategias de segmentación de diferentes fuentes para facilitar la ejecución simultánea.

Luego, el trabajo de DataX llamará al módulo Programador para volver a ensamblar las tareas divididas en un grupo de tareas (grupo de tareas) de acuerdo con la cantidad configurada de tareas simultáneas.

Cada tarea es iniciada por el grupo de tareas. Después de iniciar la tarea, el subproceso Lector --> Canal --> Escritor se iniciará de forma fija para completar la sincronización de la tarea.

Después de que se inicie el trabajo de DataX, el trabajo monitoreará el grupo de tareas. Después de que se completen todos los grupos de tareas, el trabajo se cerrará con éxito (el valor no es 0 cuando se cierra de manera anormal)

3. Proceso de programación de DataX

Primero, el módulo de trabajo de DataX se dividirá en varias tareas de acuerdo con la subbase de datos y la subtabla, y luego calculará cuántos grupos de tareas deben asignarse de acuerdo con la cantidad de usuarios simultáneos configurados; Ejecutar tarea (tarea).

En segundo lugar, use DataX para lograr la sincronización de datos

Por ejemplo, para generar una plantilla para la sincronización de MySQL a MySQL:

#输出mysql配置模版
[root@192 bin]# python /usr/local/datax/bin/datax.py -r mysqlreader -w mysqlwriter > /usr/local/datax/job/mysql2mysql.json
 
#根据模板编写 mysql2mysql.json文件
{
    "job": {
        "content": [
            {
                "reader": {
                    "name": "mysqlreader", 
                    "parameter": {
                        "column": ["id","name"], #"*"表示所有字段
                        "connection": [
                            {
                                "jdbcUrl": ["jdbc:mysql://x.x.x.210:3306/mytest"], 
                                "table": ["user"]
                            }
                        ], 
                        "password": "root", 
                        "username": "root" 
                    }
                }, 
                "writer": {
                    "name": "mysqlwriter", 
                    "parameter": {
                        "column": ["id","name"], 
                        "connection": [
                            {
                                "jdbcUrl": "jdbc:mysql://192.168.88.192:3306/mytest", 
                                "table": ["user"]
                            }
                        ], 
                        "password": "root", 
                        "username": "root", 
                        "writeMode": "insert"
                    }
                }
            }
        ], 
        "setting": {
            "speed": {
                "channel": "6"
            }
        }
    }
}

verificar:

[root@192 job]# python /usr/local/datax/bin/datax.py mysql2mysql.json
 
 
2022-04-24 17:39:03.445 [job-0] INFO  JobContainer - 
任务启动时刻                    : 2022-04-24 17:38:49
任务结束时刻                    : 2022-04-24 17:39:03
任务总计耗时                    :                 14s
任务平均流量                    :                0B/s
记录写入速度                    :              0rec/s
读出记录总数                    :                   3
读写失败总数                    :                   0
 

3. Instalación e implementación de DataX-WEB

1.DataX-WEB

https://github.com/WeiYe-Jing/datax-web

2. Descomprima el paquete de instalación

En el directorio de instalación seleccionado, descomprima el paquete de instalación

[raíz@192 ~]# tar -zxvf datax-web-2.1.2.tar.gz -C /usr/local/dataxweb

3. Inicie sesión en msyql para construir la base de datos

Prepárese para la próxima instalación e implementación con un solo clic. La biblioteca que construí aquí es dataxweb (simplemente defínala usted mismo y manténgala consistente)

mysql> crear base de datos dataxweb;

4. Ejecute el script de instalación con un solo clic

Ingrese al directorio descomprimido y busque el archivo install.sh debajo del directorio bin.Si elige la instalación interactiva, ejecútelo directamente

[root@192 dataxweb]# cd bin/
[root@192 bin]# pwd
/usr/local/dataxweb/bin
[root@192 bin]# ./install.sh 

Luego sigue las indicaciones. La inicialización de la base de datos está incluida.Si el comando mysql está instalado en su servicio, aparecerá el siguiente recordatorio durante la ejecución del script de instalación:

Scan out mysql command, so begin to initalize the database
Do you want to initalize database with sql: [{INSTALL_PATH}/bin/db/datax-web.sql]? (Y/N)y
Please input the db host(default: 127.0.0.1): 
Please input the db port(default: 3306): 
Please input the db username(default: root): 
Please input the db password(default: ): root
Please input the db name(default: dataxweb)

Ingrese la dirección de la base de datos, el número de puerto, el nombre de usuario, la contraseña y el nombre de la base de datos cuando se le solicite. En la mayoría de los casos, la inicialización se puede completar rápidamente.

Si el comando mysql no está instalado en el servicio, puede usar el script /bin/db/datax-web.sql en el directorio para ejecutarlo manualmente y modificar los archivos de configuración relevantes después de completarlo.

vi modules/datax-admin/conf/bootstrap.properties
 
#Database
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USERNAME=root
DB_PASSWORD=root
DB_DATABASE=dataxweb

Puede configurar el valor correspondiente según la situación específica.

En el modo interactivo, se le pedirá al usuario que confirme la descompresión del paquete comprimido de cada módulo y la invocación del script de configuración de configuración. Puede verificar si la instalación es exitosa de acuerdo con las indicaciones. Si la instalación no es exitosa , puede volver a intentarlo; si no desea utilizar el modo interactivo, salte a Después del proceso de confirmación, ejecute el siguiente comando para instalar

./bin/install.sh --fuerza

5. Otra configuración

  • servicio de correo

En el directorio del proyecto: modules/datax-admin/bin/env.properties configurar el servicio de correo (saltable)MAIL_USERNAME="" MAIL_PASSWORD=""

Este archivo incluye algunos parámetros de configuración predeterminados, como: server.port, verifique el archivo para obtener más detalles.

  • Especifique la ruta de PYTHON_PATH

vim modules/datax-executor/bin/env.properties
 
### 执行datax的python脚本地址
PYTHON_PATH=/usr/local/datax/bin/datax.py
 
### 保持和datax-admin服务的端口一致;默认是9527,如果没改datax-admin的端口,可以忽略
DATAX_ADMIN_PORT=

Este archivo incluye algunos parámetros de configuración predeterminados, como: executor.port, json.path, data.path, etc. Consulte el archivo para obtener más información.

6. Iniciar el servicio

6.1 Inicie todos los servicios con un clic

[root@192 dataxweb]# cd /usr/local/dataxweb/
[root@192 dataxweb]# ./bin/start-all.sh 

Es posible que algunos módulos no se inicien o se queden atascados en el medio, y puede detener la ejecución repetida.Si necesita cambiar el número de puerto de servicio de un módulo, entonces:

vi ./modules/{module_name}/bin/env.properties

Busque el elemento de configuración SERVER_PORT y cambie su valor. Por supuesto, también puede iniciar un servicio de un solo módulo:

./bin/start.sh -m {module_name}
 module_name可以为datax-admin或datax-executor

6.2 Detener todos los servicios con un clic

[root@192 dataxweb]# cd /usr/local/dataxweb/
[root@192 dataxweb]# ./bin/stop-all.sh

Por supuesto, también puede detener un servicio de módulo individualmente:

./bin/stop.sh -m {nombre_módulo}

6.3 Ver Servicios

Utilice el comando JPS en el entorno Linux para ver si aparecen los procesos DataXAdminApplication y DataXExecutorApplication, si existen, significa que el proyecto se está ejecutando correctamente.

Si el proyecto no se inicia, verifique el registro de inicio:

modules/datax-admin/bin/console.out
或者
modules/datax-executor/bin/console.out

4. Operación de DataX-WEB

1. Interfaz frontal

Una vez completada la implementación, ingrese http://ip:port/index.html en el navegador para acceder a la interfaz principal correspondiente (ip es la ip del servidor donde se implementa datax-admin y port es el puerto en ejecución 9527 especificado para datax-admin)

Ingrese el nombre de usuario admin contraseña 123456 para acceder directamente al sistema

2.datax-web API

Después de la implementación exitosa de datax-web, puede obtener información sobre el contenido relacionado con la API de datax-web, URL: http://ip:port/doc.html

Registro de ejecución de DataX-WEB

Una vez completada la implementación, en módulos/proyecto/datos/aplicaciones correspondientes (el usuario también puede especificar el registro por sí mismo y modificar la dirección de ruta de registro en application.yml), el usuario puede realizar un seguimiento del inicio real del proyecto de acuerdo con este Iniciar sesión

Si el ejecutor se inicia más rápido que el administrador, el ejecutor no podrá conectarse y el registro informará un error de "conexión rechazada". Generalmente, el administrador se inicia primero, luego se inicia el ejecutor y la conexión se volverá a conectar después de 30 segundos Si tiene éxito, ignore esta excepción.

6. Práctica de DataX-WEB

1. Ver el actuador

Compruebe si la interfaz web ha registrado correctamente los ejecutores, y los ejecutores se pueden renombrar según sea necesario.

2. Crea un proyecto

3. Estrategia de enrutamiento

Cuando se implementa un grupo de actuadores, se proporcionan ricas estrategias de enrutamiento, que incluyen:

FIRST(第一个):固定选择第一个机器;
LAST(最后一个):固定选择最后一个机器;
ROUND(轮询):依次分配任务;
RANDOM(随机):随机选择在线的机器;
CONSISTENT_HASH(一致性HASH):每个任务按照Hash算法固定选择某一台机器,且所有任务均匀散列在不同机器上。
LEAST_FREQUENTLY_USED(最不经常使用):使用频率最低的机器优先被选举;
LEAST_RECENTLY_USED(最近最久未使用):最久为使用的机器优先被选举;
FAILOVER(故障转移):按照顺序依次进行心跳检测,第一个心跳检测成功的机器选定为目标执行器并发起调度;
BUSYOVER(忙碌转移):按照顺序依次进行空闲检测,第一个空闲检测成功的机器选定为目标执行器并发起调度;

Estrategia de procesamiento de bloqueo: la estrategia de procesamiento cuando la programación es demasiado intensiva para que el ejecutor la procese

  • Serie independiente: después de que la solicitud de programación ingresa al ejecutor independiente, la solicitud de programación ingresa a la cola FIFO y se ejecuta en modo serie;

  • Descartar la programación posterior: después de que la solicitud de programación ingrese al ejecutor independiente, se encuentra que el ejecutor tiene tareas de programación en ejecución, y la solicitud se descartará y se marcará como fallida;

  • Anular antes de programar: después de que la solicitud de programación ingrese al ejecutor independiente, si encuentra que hay una tarea de programación en ejecución en el ejecutor, finalizará la tarea de programación en ejecución y borrará la cola, y luego ejecutará la tarea de programación local;

Para adiciones incrementales, se recomienda configurar la política de bloqueo para descartar la programación posterior o la publicación en serie independiente.

Al configurar la serie de una sola máquina, debe prestar atención a configurar el número de reintentos razonablemente (el número de reintentos fallidos * cada tiempo de ejecución < el período de programación de la tarea). Si el número de reintentos se establece demasiado, los datos se repetirá. Por ejemplo, la tarea se ejecuta una vez cada 30 segundos. , cada tiempo de ejecución toma 20 segundos, configurado para reintentar tres veces, si la tarea falla, el primer período de tiempo de reintento es 1577755680-1577756680, la tarea de reintento no es terminado, la nueva tarea se abre de nuevo, el período de tiempo de la nueva tarea será Sí 1577755680-1577758680

4. Tipo de tarea

Seleccione la tarea DataX primero. Después de configurar las tareas detalladas, puede modificarla como se muestra en la figura a continuación. Otros se pueden completar según sea necesario.

5. Configuración de la fuente de datos

Configure los parámetros según las diferentes fuentes de datos.

6. Creación de tareas

construir lector

El mapeo no se genera de acuerdo con la operación anterior, use directamente la administración de tareas -> agregue la configuración manual

{
  "job": {
    "content": [
      {
        "reader": {
          "name": "mysqlreader",
          "parameter": {
            "username": "root",
            "password": "root",
            "column": [
              "*"
            ],
            "where": " save_time >= FROM_UNIXTIME(${lastTime}) and save_time < FROM_UNIXTIME(${currentTime})",
            "splitPk": "id",
            "connection": [
              {
                "table": [
                  "uc_op_amazon_api_store_download"
                ],
                "jdbcUrl": [
                  "jdbc:mysql://x.x.x.210:3306/test_system"
                ]
              }
            ]
          }
        },
        "writer": {
          "name": "mysqlwriter",
          "parameter": {
            "writeMode": "insert",
            "username": "root",
            "password": "root",
            "column": [
              "*"
            ],
            "connection": [
              {
                "jdbcUrl": "jdbc:mysql://192.168.88.192:3306/mytest?useUnicode=true&characterEncoding=utf8",
                "table": [
                  "uc_op_amazon_api_store_download"
                ]
              }
            ]
          }
        }
      }
    ],
    "setting": {
      "speed": {
        "channel": 6
      }
    }
  }
}
-DstartId='%s' -DendId='%s'
 
# 表名
uc_op_business_reports
 
#主键
id

#id自增配置条件

Supongo que te gusta

Origin blog.csdn.net/ytp552200ytp/article/details/126364162
Recomendado
Clasificación