Spark lee datos de MySQL

1. ¿Qué es ELT?

Los ingenieros de datos, en la mayoría de los casos, han estado expuestos a ETL, es decir, extraer, transformar y cargar. Con el aumento de más y más capacidades de la plataforma informática, muchas veces, los ingenieros de datos realizan operaciones de datos de acuerdo con ELT. Es decir, en De acuerdo con Extraer, Cargar y Transformar, la ventaja es que la conversión de datos puede depender de una poderosa plataforma informática, y las herramientas de sincronización de datos solo necesitan prestar más atención a la extracción y adición de datos, que es más simple y rápida de mejorar la eficiencia para los desarrolladores.

2. Por qué elegir Spark

a) En el proceso de creciente sincronización de datos comerciales, muchas herramientas ETL tradicionales se ejecutan en una máquina independiente. La construcción de un sistema de sincronización de datos con capacidades de procesamiento de datos a gran escala se ha convertido en un vínculo indispensable en un sistema de análisis de big data. Dado que Spark puede ejecutarse en plataformas distribuidas y ha logrado un buen soporte para el acceso a varias bases de datos, es una buena opción usar Spark para desarrollar herramientas de sincronización de datos;

b) Spark DataFrame proporciona una API de operación rica y puede realizar directamente operaciones SQL basadas en el DataFrame, y algunas conversiones de datos simples se pueden realizar en el proceso EL;

c) El programa Spark es fácil de implementar, solo use el comando spark-submit para enviar el código.

2.1, Spark ETL sin T

Esta práctica no lleva a cabo un combate real de transformación (Transform), solo combate real de operación EL simple, para poder usar Spark de manera competente para sincronizar datos entre múltiples fuentes de datos heterogéneas.

 

2.3 、 Lectura de Java Spark en MySQL

 


public class MysqlReader {

    public Dataset<Row> reader(SparkSession sparkSession){

        Dataset<Row> rowDataset = sparkSession.read()

                                  .format("jdbc")

                                  .option("url", url)

                                  .option("dbtable", tableName)

                                  .option("user", userName)

                                  .option("password", passwd)

                                  .option("driver", "com.mysql.cj.jdbc.Driver").load();

        return rowDataset;

    }

}

El código anterior tiene un inconveniente: cuando la cantidad de datos de la tabla es grande, debido a que es una sesión que lee todos los datos de mysql a la vez, existe el riesgo de leer datos oom. Por tanto, puede haber la siguiente segunda lectura:

Dataset<Row> rowDataset = sparkSession.read()
                .format("jdbc")
                .option("url", url)
                .option("dbtable", tableName)
                .option("user", userName)
                .option("password", passwd)
                .option("driver", "com.mysql.cj.jdbc.Driver")
                .option("partitionColumn", columnName)
                .option("lowerBound", 1)
                .option("upperBound", 1000)
                .option("fetchsize", 1000)
                .option("numPartitions", 3)
                .load();

Al mirar el documento oficial, puede encontrar que el elemento de configuración de partitionColumn y numPartitions, lowerBound y upperBound deben aparecer al mismo tiempo. entre ellos

PartitionColumn: Indica el campo que se filtrará de acuerdo con las condiciones al leer los datos. Generalmente, se selecciona la clave primaria o el campo de índice en el formato de int, datatime y timestamp;

numPartitions: Significa que al leer, se dividirá en varias particiones para leer, y finalmente los datos que se quieren leer se leerán en varias particiones de Spark;

lowerBound: significa que al leer, todos aquellos menores a 1 deben estar en la primera partición;

upperBound : Significa que al leer, los que exceden 1000 deben estar en la última partición;

fetchsize: Indica el número máximo de elementos devueltos por lectura durante la lectura, lo que puede controlar eficazmente la velocidad de lectura de datos de mysql, no demasiado rápido, demasiado rápido bloqueará mysql;

La siguiente figura muestra el significado de los números 1, 1000, 3 en el código anterior cuando se lee realmente, 1000/3 = 333, por lo que en el registro, 334 y 667 se utilizan como reglas de almacenamiento para las tres particiones de datos.

 

Supongo que te gusta

Origin blog.csdn.net/Aaron_ch/article/details/112056275
Recomendado
Clasificación