Plataforma de big data: recopilación y gobernanza de datos

Introducción a la recopilación de datos

ETL es básicamente un representante de la recopilación de datos, incluida la extracción de datos (Extraer), la transformación (Transformar) y la carga (Cargar). La fuente de datos es el flujo ascendente de toda la plataforma de big data, y la recopilación de datos es la canalización entre la fuente de datos y el almacén de datos. En el proceso de recopilación, los datos se gestionan de acuerdo con el escenario empresarial y se completa la limpieza de datos.

En el escenario de big data, las fuentes de datos son complejas y diversas, incluidas bases de datos comerciales, datos de registro, imágenes, videos y otros datos multimedia. La forma de recopilación de datos también debe ser más compleja y diversa, incluida la sincronización, en tiempo real, incremental, volumen completo, etc. Las herramientas comunes de recopilación de datos también son diversas y pueden satisfacer una variedad de necesidades comerciales.

Una arquitectura de carga de datos típica:
Plataforma de big data: recopilación y gobernanza de datos

Tres escenarios comunes de recopilación de datos:

  • Escenario 1: obtenga datos de fuentes de datos que admitan FTP, SFTP, HTTP y otros protocolos
  • Escenario 2: obtener datos de la base de datos empresarial y dar soporte al sistema empresarial después de la recopilación y el ingreso de datos
  • Escenario 3: la fuente de datos debe recopilar datos en tiempo real a través de colas de mensajes como Kafka

Requisitos del sistema de recopilación de datos:

  • Gestión de fuentes de datos y seguimiento del estado
  • Adquisición de datos multimodo y monitoreo de tareas como sincronización, tiempo real, completo, incremental, etc.
  • Gestión de metadatos, adquisición de datos complementarios y archivo de datos

Herramientas comunes de recopilación de datos

Sqoop

Sqoop es una herramienta de importación y exportación de datos de uso común entre bases de datos relacionales y HDFS, que traduce comandos de importación o exportación en programas MapReduce. Por lo tanto, a menudo se usa para transferir datos entre Hadoop y bases de datos tradicionales (Mysq |, Postgresq |, etc.).

Los datos se pueden importar desde la base de datos relacional al clúster de Hadoop a través de Hadoop MapReduce. El proceso de usar Sqoop para transferir grandes cantidades de datos estructurados o semiestructurados está completamente automatizado.

Diagrama de transmisión de datos de Sqoop:
Plataforma de big data: recopilación y gobernanza de datos

Proceso de importación de Sqoop:
Plataforma de big data: recopilación y gobernanza de datos

  • Obtenga la información de metadatos de la tabla de datos de origen
  • Enviar tareas de MapReduce basadas en parámetros
  • Cada fila de la tabla se utiliza como registro y los datos se importan según lo planeado.

** Proceso de exportación de Sqoop: ***
Plataforma de big data: recopilación y gobernanza de datos

  • Obtenga la información de metadatos de la tabla de datos de destino
  • Enviar tareas de MapReduce basadas en parámetros
  • Divida cada línea de datos en el archivo HDFS por caracteres específicos y expórtelos a la base de datos

Apache Flume

Apache Flume es esencialmente un sistema de recopilación de registros distribuido, confiable y de alta disponibilidad, que admite múltiples fuentes de datos y una configuración flexible. Flume puede recopilar, agregar y transmitir registros masivos.

El sistema Flume se divide en tres componentes: Fuente (responsable de leer las fuentes de datos), Sink (responsable de la salida de datos) y Canal (como canal de almacenamiento temporal de datos). Estos tres componentes formarán un Agente. Flume permite a los usuarios construir un flujo de datos complejo, como los datos que fluyen a través de múltiples agentes y finalmente aterrizan.

Diagrama de transmisión de datos de canal:
Plataforma de big data: recopilación y gobernanza de datos

Diagrama esquemático de transmisión de datos en Flume con múltiples fuentes de datos y múltiples agentes:
Plataforma de big data: recopilación y gobernanza de datos

Diagrama esquemático de la transmisión de datos bajo el multiagente Flume multi-Sink:
Plataforma de big data: recopilación y gobernanza de datos

Para conocer el contenido práctico de Flume, consulte:

DataX

Documentos oficiales:

DataX es la herramienta de sincronización fuera de línea de código abierto de Ali para fuentes de datos heterogéneas. Está comprometida a lograr funciones de sincronización de datos eficientes y estables entre varias fuentes de datos heterogéneas como bases de datos relacionales (MySQL, Oracle, etc.), HDFS, Hive, ODPS, HBase, FTP, etc. DataX convierte el enlace de sincronización de malla compleja en un enlace de sincronización de datos en estrella, que tiene una buena escalabilidad.

Cuadro comparativo del enlace de sincronización de malla y el enlace de sincronización de datos en estrella DataX:
Plataforma de big data: recopilación y gobernanza de datos

Diagrama esquemático de la arquitectura DataX:
Plataforma de big data: recopilación y gobernanza de datos


Recopilación de datos de Datax combate real

Documentos oficiales:

Vaya a la dirección de descarga en GitHub para descargar DataX, o extraiga el código fuente para compilar:

Cargue el paquete de instalación descargado en el servidor:

[root@hadoop ~]# cd /usr/local/src
[root@hadoop /usr/local/src]# ls |grep datax.tar.gz 
datax.tar.gz
[root@hadoop /usr/local/src]# 

Descomprima el paquete de instalación en un directorio adecuado:

[root@hadoop /usr/local/src]# tar -zxvf datax.tar.gz -C /usr/local
[root@hadoop /usr/local/src]# cd ../datax/
[root@hadoop /usr/local/datax]# ls
bin  conf  job  lib  plugin  script  tmp
[root@hadoop /usr/local/datax]# 

Ejecute el script de autocomprobación de DataX:

[root@hadoop /usr/local/datax]# python bin/datax.py job/job.json
...

任务启动时刻                    : 2020-11-13 11:21:01
任务结束时刻                    : 2020-11-13 11:21:11
任务总计耗时                    :                 10s
任务平均流量                    :          253.91KB/s
记录写入速度                    :          10000rec/s
读出记录总数                    :              100000
读写失败总数                    :                   0

Importar datos de archivos CSV a Hive

Después de que la detección no sea un problema, demostremos brevemente cómo importar los datos en el archivo CSV a Hive . Necesitamos usar hdfswriter y txtfilereader . Documentos oficiales:

Primero, cree una base de datos en Hive:

0: jdbc:hive2://localhost:10000> create database db01;
No rows affected (0.315 seconds)
0: jdbc:hive2://localhost:10000> use db01;

Luego crea una tabla:

create table log_dev2(
    id int,
    name string,
    create_time int,
    creator string,
    info string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
stored as orcfile;

Cuando se crean la biblioteca y la tabla, habrá archivos de directorio correspondientes en HDFS:

[root@hadoop ~]# hdfs dfs -ls /user/hive/warehouse/db01.db
Found 1 items
drwxr-xr-x   - root supergroup          0 2020-11-13 11:30 /user/hive/warehouse/db01.db/log_dev2
[root@hadoop ~]# 

Prepare los datos de la prueba:

[root@hadoop ~]# cat datax/db.csv
1,创建用户,1554099545,hdfs,创建用户 test
2,更新用户,1554099546,yarn,更新用户 test1
3,删除用户,1554099547,hdfs,删除用户 test2
4,更新用户,1554189515,yarn,更新用户 test3
5,删除用户,1554199525,hdfs,删除用户 test4
6,创建用户,1554299345,yarn,创建用户 test5

DataX define las tareas ETL a través de un archivo de configuración en formato json, y crea un archivo json: el vim csv2hive.jsoncontenido de la tarea ETL que queremos definir es el siguiente:

{
    "setting":{

    },
    "job":{
        "setting":{
            "speed":{
                "channel":2
            }
        },
        "content":[
            {
                "reader":{
                    "name":"txtfilereader",
                    "parameter":{
                        "path":[
                            "/root/datax/db.csv"
                        ],
                        "encoding":"UTF-8",
                        "column":[
                            {
                                "index":0,
                                "type":"long"
                            },
                            {
                                "index":1,
                                "type":"string"
                            },
                            {
                                "index":2,
                                "type":"long"
                            },
                            {
                                "index":3,
                                "type":"string"
                            },
                            {
                                "index":4,
                                "type":"string"
                            }
                        ],
                        "fieldDelimiter":","
                    }
                },
                "writer":{
                    "name":"hdfswriter",
                    "parameter":{
                        "defaultFS":"hdfs://192.168.243.161:8020",
                        "fileType":"orc",
                        "path":"/user/hive/warehouse/db01.db/log_dev2",
                        "fileName":"log_dev2.csv",
                        "column":[
                            {
                                "name":"id",
                                "type":"int"
                            },
                            {
                                "name":"name",
                                "type":"string"
                            },
                            {
                                "name":"create_time",
                                "type":"INT"
                            },
                            {
                                "name":"creator",
                                "type":"string"
                            },
                            {
                                "name":"info",
                                "type":"string"
                            }
                        ],
                        "writeMode":"append",
                        "fieldDelimiter":",",
                        "compress":"NONE"
                    }
                }
            }
        ]
    }
}
  1. datax usa json como archivo de configuración, el archivo puede ser un servidor http local o remoto
  2. La capa más externa del archivo de configuración JSON es uno job, jobincluyendo settingy contentdos partes, que se settingutilizan para jobconfigurar el conjunto y contentson la fuente y el propósito de los datos
  3. setting: Se usa para configurar el canal global | configuración, configuración de datos sucios, configuración de límite de velocidad, etc. En este ejemplo, solo se configura el canal número 1, lo que significa que se usa un solo hilo para realizar la transmisión de datos
  4. content
    • lector: configure de dónde leer los datos
      • name: El nombre del complemento debe coincidir con el nombre del complemento en el proyecto
      • parameter: Parámetros de entrada correspondientes al complemento
      • path: La ruta del archivo de datos de origen
      • encoding: Codificación de datos
      • fieldDelimiter: Separador de datos
      • column: La posición y el tipo de datos de los datos de origen después de estar separados por el separador
    • escritor: configurar dónde escribir datos
      • name: El nombre del complemento, que debe ser coherente con el nombre del complemento en el proyecto
      • parameter: Parámetros de entrada correspondientes al complemento
      • path: Ruta de destino
      • fileName: Prefijo del nombre del archivo de destino
      • writeMode: Cómo escribir en el directorio de destino

Ejecute nuestras tareas ETL definidas a través del script Python de DataX:

[root@hadoop ~]# python /usr/local/datax/bin/datax.py datax/csv2hive.json
...

任务启动时刻                    : 2020-11-15 11:10:20
任务结束时刻                    : 2020-11-15 11:10:32
任务总计耗时                    :                 12s
任务平均流量                    :               17B/s
记录写入速度                    :              0rec/s
读出记录总数                    :                   6
读写失败总数                    :                   0

Compruebe si el archivo de datos correspondiente ya existe en HDFS:

[root@hadoop ~]# hdfs dfs -ls /user/hive/warehouse/db01.db/log_dev2
Found 1 items
-rw-r--r--   3 root supergroup        825 2020-11-15 11:10 /user/hive/warehouse/db01.db/log_dev2/log_dev2.csv__f19a135d_6c22_4988_ae69_df39354acb1e
[root@hadoop ~]# 

Vaya a Hive para verificar que los datos importados cumplan con las expectativas:

0: jdbc:hive2://localhost:10000> use db01;
No rows affected (0.706 seconds)
0: jdbc:hive2://localhost:10000> show tables;
+-----------+
| tab_name  |
+-----------+
| log_dev2  |
+-----------+
1 row selected (0.205 seconds)
0: jdbc:hive2://localhost:10000> select * from log_dev2;
+--------------+----------------+-----------------------+-------------------+----------------+
| log_dev2.id  | log_dev2.name  | log_dev2.create_time  | log_dev2.creator  | log_dev2.info  |
+--------------+----------------+-----------------------+-------------------+----------------+
| 1            | 创建用户         | 1554099545         | hdfs              | 创建用户 test      |
| 2            | 更新用户         | 1554099546         | yarn              | 更新用户 test1     |
| 3            | 删除用户         | 1554099547         | hdfs              | 删除用户 test2     |
| 4            | 更新用户         | 1554189515         | yarn              | 更新用户 test3     |
| 5            | 删除用户         | 1554199525         | hdfs              | 删除用户 test4     |
| 6            | 创建用户         | 1554299345         | yarn              | 创建用户 test5     |
+--------------+----------------+-----------------------+-------------------+----------------+
6 rows selected (1.016 seconds)
0: jdbc:hive2://localhost:10000> 

Importar datos de MySQL a Hive

A continuación, demostremos la importación de datos MySQL en Hive. Para lograr esta función, necesitamos usar mysqlreader para leer datos de MySQL.Los documentos oficiales son los siguientes:

Primero, ejecute el siguiente SQL para construir algunos datos de prueba:

CREATE DATABASE datax_test;

USE `datax_test`;

CREATE TABLE `dev_log` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `create_time` int(11) DEFAULT NULL,
  `creator` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `info` varchar(2000) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1069 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

insert  into `dev_log`(`id`,`name`,`create_time`,`creator`,`info`) values 
(1,'创建用户',1554099545,'hdfs','创建用户 test'),
(2,'更新用户',1554099546,'yarn','更新用户 test1'),
(3,'删除用户',1554099547,'hdfs','删除用户 test2'),
(4,'更新用户',1554189515,'yarn','更新用户 test3'),
(5,'删除用户',1554199525,'hdfs','删除用户 test4'),
(6,'创建用户',1554299345,'yarn','创建用户 test5');

Luego db01cree otra tabla en la base de datos de Hive :

create table log_dev(
    id int,
    name string,
    create_time int,
    creator string,
    info string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
stored as textfile;

Cree el archivo de configuración de la tarea ETL:

[root@hadoop ~]# vim datax/mysql2hive.json

El contenido del archivo es el siguiente:

{
    "job":{
        "setting":{
            "speed":{
                "channel":3
            },
            "errorLimit":{
                "record":0,
                "percentage":0.02
            }
        },
        "content":[
            {
                "reader":{
                    "name":"mysqlreader",
                    "parameter":{
                        "username":"root",
                        "password":"123456a.",
                        "column":[
                            "id",
                            "name",
                            "create_time",
                            "creator",
                            "info"
                        ],
                        "where":"creator='${creator}' and create_time>${create_time}",
                        "connection":[
                            {
                                "table":[
                                    "dev_log"
                                ],
                                "jdbcUrl":[
                                    "jdbc:mysql://192.168.1.11:3306/datax_test?serverTimezone=Asia/Shanghai"
                                ]
                            }
                        ]
                    }
                },
                "writer":{
                    "name":"hdfswriter",
                    "parameter":{
                        "defaultFS":"hdfs://192.168.243.161:8020",
                        "fileType":"text",
                        "path":"/user/hive/warehouse/db01.db/log_dev",
                        "fileName":"log_dev3.csv",
                        "column":[
                            {
                                "name":"id",
                                "type":"int"
                            },
                            {
                                "name":"name",
                                "type":"string"
                            },
                            {
                                "name":"create_time",
                                "type":"INT"
                            },
                            {
                                "name":"creator",
                                "type":"string"
                            },
                            {
                                "name":"info",
                                "type":"string"
                            }
                        ],
                        "writeMode":"append",
                        "fieldDelimiter":",",
                        "compress":"GZIP"
                    }
                }
            }
        ]
    }
}
  • mysqlreader admite wherecondiciones entrantes para filtrar los datos que deben leerse. Se pueden pasar parámetros específicos cuando se ejecuta el script datax. Podemos lograr soporte de sincronización incremental a través de este método de sustitución de variables

El paquete de controladores predeterminado de mysqlreader es 5.x. Dado que mi versión de MySQL es 8.x, necesito reemplazar el paquete de controladores en mysqlreader:

[root@hadoop ~]# cp /usr/local/src/mysql-connector-java-8.0.21.jar /usr/local/datax/plugin/reader/mysqlreader/libs/
[root@hadoop ~]# rm -rf /usr/local/datax/plugin/reader/mysqlreader/libs/mysql-connector-java-5.1.34.jar 

Luego ejecute la tarea ETL:

[root@hadoop ~]# python /usr/local/datax/bin/datax.py datax/mysql2hive.json -p "-Dcreator=yarn -Dcreate_time=1554099547"
...

任务启动时刻                    : 2020-11-15 11:38:14
任务结束时刻                    : 2020-11-15 11:38:25
任务总计耗时                    :                 11s
任务平均流量                    :                5B/s
记录写入速度                    :              0rec/s
读出记录总数                    :                   2
读写失败总数                    :                   0

Compruebe si el archivo de datos correspondiente ya existe en HDFS:

[root@hadoop ~]# hdfs dfs -ls /user/hive/warehouse/db01.db/log_dev
Found 1 items
-rw-r--r--   3 root supergroup         84 2020-11-15 11:38 /user/hive/warehouse/db01.db/log_dev/log_dev3.csv__d142f3ee_126e_4056_af49_b56e45dec1ef.gz
[root@hadoop ~]# 

Vaya a Hive para verificar que los datos importados cumplan con las expectativas:

0: jdbc:hive2://localhost:10000> select * from log_dev;
+-------------+---------------+----------------------+------------------+---------------+
| log_dev.id  | log_dev.name  | log_dev.create_time  | log_dev.creator  | log_dev.info  |
+-------------+---------------+----------------------+------------------+---------------+
| 4           | 更新用户        | 1554189515          | yarn             | 更新用户 test3  |
| 6           | 创建用户        | 1554299345          | yarn             | 创建用户 test5  |
+-------------+---------------+----------------------+------------------+---------------+
2 rows selected (0.131 seconds)
0: jdbc:hive2://localhost:10000> 

Introducción a la gobernanza de datos

Problemas que surgen después de recopilar datos en el almacén:

  • En comparación con la era del big data del almacenamiento de datos tradicional, los datos son más diversos, más complejos y la cantidad de datos es mayor
  • Inconsistencia de datos en todas partes, dificultad para mejorar la calidad de los datos y combinación de modelos de datos difícil de completar
  • Múltiples herramientas de recolección y múltiples métodos de almacenamiento hacen que el almacén de datos o el lago de datos se conviertan gradualmente en un pantano de datos

Problemas a resolver en la gobernanza de datos:

  • Independientemente de los datos: los usuarios no saben qué datos tienen y no conocen la relación entre los datos y la empresa.
  • Datos incontrolables: sin un estándar de datos unificado, los datos no se pueden integrar y unificar
  • Datos indeseables: el usuario no puede obtener fácilmente los datos o los datos obtenidos no están disponibles
  • Los datos no se pueden conectar: ​​la relación entre los datos no se refleja y el valor profundo de los datos no se puede reflejar

Los objetivos de la gobernanza de datos:

  • Establecer estándares de datos unificados y especificaciones de datos para garantizar la calidad de los datos.
  • Desarrollar procedimientos de gestión de datos para controlar todo el ciclo de vida de los datos.
  • Forme una herramienta de plataforma para que la utilicen los usuarios

Dato de governancia:

  • La gobernanza de datos incluye la gestión de metadatos, la gestión de la calidad de los datos, la gestión de las relaciones de sangre de los datos, etc.
  • La gobernanza de datos se encuentra en la recopilación de datos, la limpieza de datos, el cálculo de datos y otros enlaces
  • La gobernanza de datos no es una tecnología, sino un proceso, colaboración y gestión

Gestión de metadatos:

  • Información del esquema, como la estructura de la tabla de la base de datos de los datos de gestión
  • Espacio de almacenamiento de datos, registros de lectura y escritura, atribución de permisos y otra información estadística diversa

Gestión de relaciones de sangre de datos:

  • Relación sanguínea y ciclo de vida entre datos.
  • Los datos de la tabla B se recopilan de la tabla A, por lo que las tablas B y A tienen relación sanguínea
  • Información de atributos comerciales de datos y modelo de datos comerciales

Breve descripción de los pasos del gobierno de datos:

  • Unifique las especificaciones de datos y las definiciones de datos, abra modelos comerciales y modelos técnicos
  • Mejore la calidad de los datos y realice la gestión del ciclo de vida de los datos
  • Extraer el valor de los datos para ayudar al personal de la empresa a utilizar los datos de forma cómoda y flexible.

Gobernanza de datos y sistemas periféricos:

  • ODS, DWD, DM y otros niveles de metadatos se incorporan a la plataforma de gobierno de datos para una gestión centralizada.
  • Los metadatos generados en el proceso de recopilación y procesamiento de datos se incorporan a la plataforma de gobierno de datos y se establece la relación de consanguinidad.
  • Proporcionar una interfaz de servicio de gestión de datos y notificar oportunamente los cambios en el modelo de datos en sentido ascendente y descendente.

Gobernanza de datos de Apache Atlas

Herramientas comunes de gobernanza de datos:

  • Apache Atlas : proyecto de código abierto de gobernanza de datos promovido por Hortonworks
  • Metacat : componentes de descubrimiento de datos y gestión de metadatos de código abierto de Netflix
  • Navigator : solución de gestión de datos proporcionada por Cloudera
  • WhereHows : una solución de gestión de datos utilizada internamente por LinkedIn y código abierto

Apache Altas:

  • Clasificación de datos: capture, defina y anote metadatos automáticamente y clasifique datos orientados al negocio
  • Auditoría centralizada: capture la información de acceso de todos los pasos, aplicaciones e interacciones de datos
  • Búsqueda y relación de sangre: basada en la clasificación y auditoría de la relación entre los datos relacionados y los datos, y se muestra a través de la visualización.

Diagrama de arquitectura de Apache Altas:
Plataforma de big data: recopilación y gobernanza de datos

  • Sistema de tipos: entidad extraída de los objetos de metadatos que se van a gestionar, compuesta de tipos
  • Ingesta \ Exportar: una herramienta para la recopilación y exportación automática de metadatos. La exportación se puede activar como un evento para que los usuarios puedan responder a tiempo
  • Motor de gráficos: muestra la relación entre los datos a través de la base de datos de gráficos y el motor de cálculo de gráficos

Captura de metadatos:

  • Gancho: los ganchos de varios componentes capturan datos automáticamente para su almacenamiento
  • Entidad: cada sistema integrado activa eventos para escribir durante la operación
  • Mientras obtiene metadatos, obtenga la relación entre los datos y construya una relación de sangre

Supongo que te gusta

Origin blog.51cto.com/zero01/2551050
Recomendado
Clasificación