1. Antecedentes de la demanda
Debido al escenario del proyecto, es necesario 定时T+1
增量
sincronizar los datos de la tabla a, la tabla b y la tabla c en la base de datos A (MySQL) con la base de datos B (MySQL). Permítanme explicar aquí que no es la copia de seguridad maestro-esclavo de la base de datos, o la sincronización de datos ordinaria. Después de una investigación técnica, se descubrió que Kettle es bastante adecuado por las siguientes razones:
- Kettle (extracción, limpieza, conversión, carga de datos) está escrito en Java y puede ejecutarse en Windows, Linux y Unix. Una herramienta ETL profesional que admite múltiples fuentes de datos y múltiples middleware;
- La interfaz visual admite la interfaz de diseño de GUI gráfica, la diversidad de componentes y admite arrastrar y soltar componentes, sin escribir código adicional;
- Los diagramas de flujo de Kettle son esencialmente archivos de configuración, como archivos .ktr/.kjb. La ventaja de este diseño es que después de dibujar el diagrama de flujo de conversión, podemos copiarlo directamente para ejecutarlo en otro entorno, como: dibujar el diagrama de flujo en una computadora con Windows y copiarlo para ejecutarlo en un sistema Liunx .
- Es gratuito, tiene muchos componentes y admite código abierto. Generalmente, no hay problema en el procesamiento de la sincronización de datos T+1. Si la concurrencia es alta, el rendimiento en tiempo real es alto y el volumen de datos es grande, se recomienda usar Flink.
2. Cómo usar
1. Descarga el paquete de instalación
Dirección del sitio web oficial: https://sourceforge.net/projects/pentaho/files/Data%20Integration/
2. Método de inicio
Windows haga clic en Spoon.bat para comenzar
Aparece la siguiente imagen para indicar que se está iniciando, 如果一直没有反应,使用管理员身份运行
.
La interfaz principal es la siguiente:
3. Conéctese a la base de datos MySQL
1. Prepare el paquete jar del controlador de conexión MySQL
Dado que Kettle en sí no tiene ningún paquete de controlador de base de datos, primero debemos preparar el paquete de controlador y la versión es la mejor opción 5.1.49
. Después de descargar el paquete jar, cópielo en el directorio lib (Windows y Linux son lo mismo). Si se ha iniciado Kettle, debe apagarse y reiniciarse; de lo contrario, el paquete de controladores no se cargará.
2. Crea una fuente de datos
Haga clic a su vez: Conversión --> Árbol de objetos principal --> Conexión de base de datos --> Haga clic en Nuevo --> Prueba
La misma operación que la anterior, cree dos orígenes de datos: la base de datos de origen y la base de datos de destino; el objetivo es sincronizar los datos de la tabla en la base de datos de origen con la base de datos de destino
3. Proceso de conversión de configuración
① Únase al nodo de entrada: conversión --> entrada --> entrada de tabla
② Haga doble clic en el nodo de entrada para abrir la página de configuración, ingrese la información
Aquí, debido a que estoy 定时T+1
增量
sincronizando datos, agregué una condición de sincronización WHERE gmt_create >= CURDATE()
para indicar que el tiempo de creación de datos es mayor que el día actual antes de realizar la consulta.
Haga clic en vista previa, hay exactamente una pieza de datos
③Agregar nodo de conversión: Conversión --> Insertar/Actualizar --> Mantenga presionada la tecla shift para establecer una conexión
④ Haga doble clic en el nodo Insertar/Actualizar para abrir la página de configuración
⑤ Haga clic para ejecutar la prueba
4. Copie el archivo ktr para ejecutarlo regularmente en Liunx
En Linux, el archivo ktr se ejecuta usando el script pan.sh de Kettle con el siguiente comando:
sh /home/admin/kettle/data-integration/pan.sh -file=/home/admin/kettle/ktr/table_transfer.ktr -norep
.
Para ejecutar este script regularmente, planeo usar la función corntab que viene con Linux para establecer el tiempo.
En primer lugar, escribí un script de shell llamado cornSql.sh, que se usa para guardar el comando de ejecución de ktr, el contenido es el siguiente:
#!/bin/bash
export KETTLE_HOME=/home/admin/kettle/data-integration
export JAVA_HOME=/usr/java/jdk1.8.0_131
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin:${KETTLE_HOME}
export JRE_HOME=${JAVA_HOME}/jre
TIME=$(date "+%Y%m%d")
sh /home/admin/kettle/data-integration/pan.sh -file=/home/admin/kettle/ktr/table_transfer.ktr -norep >>/home/admin/kettle/log/transfer-"$TIME".log
En segundo lugar, copie el script ktr en el directorio especificado, es decir, el directorio /home/admin/kettle/ktr, ingrese el comando para abrir crontab -e
la interfaz de comandos e ingrese 0 1 * * * /home/admin/kettle/cornSql.sh
el comando.Esta oración significa ejecutar el script cornSql.sh regularmente a la 1 am todos los días .
Para verificar si la configuración de temporización es efectiva, puede usar crontab -l -u root
el comando .Si el comando de temporización recién se imprime, prueba que la configuración es efectiva.
Finalmente, al día siguiente, compruebe si se ha generado el archivo de registro de ejecución, en el directorio /home/admin/kettle/log, aquí imprimo la fecha de ejecución diaria, como se muestra a continuación: