Tecnología Meituan Big Data Query

Serie de artículos

  1. Motor de almacenamiento en tiempo real y motor de cálculo en tiempo real
  2. Práctica del sistema Meituan Dianping Hadoop / Spark
  3. Tecnología Meituan Big Data Query


Este artículo se relaciona principalmente con los recursos y servicios de datos en la sección de productos y servicios de datos .
Inserte la descripción de la imagen aquí
El contenido de este artículo es el siguiente:
Inserte la descripción de la imagen aquí

1. Escenarios de aplicación

Antecedentes: quiero entender cómo afecta este negocio a toda la aplicación Meituan.
Inserte la descripción de la imagen aquí
"Growth Hacker" mencionó un método de modelo pirata, que es esencialmente un desmontaje en forma de embudo y un análisis de la conversión del tráfico. Contiene los pasos desde la adquisición de usuarios hasta la conversión y activación de usuarios y los métodos de análisis correspondientes.
Inserte la descripción de la imagen aquí
Pero solo los métodos no son suficientes, y debe haber el soporte de datos correspondiente. ¿Cómo se organizan los datos? Este se divide en 5 partes.
Inserte la descripción de la imagen aquíInserte la descripción de la imagen aquí
¿Qué debemos hacer cuando hacemos estos análisis?

Depende del siguiente SQL.
Primero, mire DESDE, tabla de pedidos asociados, tabla de ciudades y tabla de dimensiones de la ciudad,
luego mire DÓNDE, seleccione el negocio de autobuses y los pedidos de recompra entre el 18 y el 19 de agosto, luego
mire GROUP BY y SUM, básicamente está claro Arriba.
Inserte la descripción de la imagen aquí
Aquí se utiliza el análisis OLAP mencionado anteriormente. ¿Cuáles son los métodos para el análisis OLAP? Aquí se mencionan cinco tipos.

  1. Perforación (profundización): aumente la dimensión y analice el problema con una granularidad más fina. (Suponga que un paralelepípedo rectangular tiene una capa y se expande en tres capas)
  2. Enrollar (perforar): reducir las dimensiones y ser capaz de ver los problemas desde una perspectiva macro (relativa). (Suponiendo que un cubo tiene tres capas, comprimidas en una capa)
  3. Rebanada: la misma dimensión, solo se observa un valor. (Suponiendo que un cubo tiene tres capas, solo se retiene una capa)
  4. Dados: La misma dimensión, solo unos pocos valores. (Suponiendo que un cubo tiene tres capas, solo quedan dos capas)
  5. Rotación: transformación de filas y columnas.
    Inserte la descripción de la imagen aquí
    Algunos sistemas de BI comerciales
    Inserte la descripción de la imagen aquí

Dos, arquitectura del sistema

2.1. Revisión de la arquitectura del sistema-Presto

Concéntrese en presentar las bases de datos representativas y ampliamente utilizadas para ver cómo se ejecutan las sentencias SQL distribuidas.

Primero, permítanme presentarles las ideas de selección de bases de datos de Meituan. Principalmente dividido en los siguientes tres escenarios:
Inserte la descripción de la imagen aquí
Presto que presentaremos en la siguiente etapa se encuentra principalmente en la parte de consultas ad hoc. Echemos un vistazo a la historia evolutiva de Presto, si está interesado.

Inserte la descripción de la imagen aquí
El concepto de diseño en pocas palabras es intercambiar confiabilidad por rendimiento . Spark y Map Reduce de los que hablamos antes se colocan en el proceso de reproducción aleatoria, de modo que incluso si un nodo está inactivo, se puede construir rápidamente sobre la base anterior. Ejecutar, reutilizar los datos anteriores tanto como sea posible. Pero Presto no consideró este tema, su posicionamiento es relativo a los escenarios a gran escala de Hive y Spark.

Entonces, si no puedes aguantar, fallarás rápido. También puede asociar datos de otros tipos de bases de datos. Inserte la descripción de la imagen aquí
Luego, desde una perspectiva macro, la estructura general es como se muestra arriba. El azul es el servicio de Presto en sí, y el frente es un control de tipo cliente, similar a la línea de comandos de MySQL. MetaStore básicamente almacena los metadatos de las tablas y bibliotecas en HDFS. (Las muñecas están prohibidas)

Presto sigue siendo una estructura de amo-esclavo, Cordinator es el coordinador y Worker es el trabajador.

Inserte la descripción de la imagen aquí
La estructura detallada se muestra en la figura:

El cliente envía un SQL, analiza, planifica, divide y programa en el Coordinador, y luego envía los módulos administrados por cada trabajador. Una vez que cada trabajador obtiene la tarea, los datos se escanean desde HDFS y luego se calculan. Después de agregar cada trabajador, pasa un La interfaz de transmisión se devuelve al cliente.

Inserte la descripción de la imagen aquí
La parte importante es el procesamiento interno de Coordinador.
Inserte la descripción de la imagen aquí
¿Cómo analizar la gramática? En realidad, esto implica el conocimiento de los principios de compilación y genera árboles de sintaxis a través del análisis léxico, análisis gramatical, etc.Inserte la descripción de la imagen aquí

¿Qué aspecto tiene el árbol de sintaxis? Probablemente le guste
Inserte la descripción de la imagen aquí
hacer una declaración en la explainbase de datos SQL le dirá cómo realizar a continuación. Según el árbol de sintaxis obtenido anteriormente, se construye un plan lógico del proceso de ejecución.
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Aquí está la abstracción del acceso de Presto a la fuente de datos. El SQL en sí está protegido en la capa de lectura de datos. Esto requiere alguna configuración para acceder a la fuente de datos.
Inserte la descripción de la imagen aquí
Esta es la parte de optimización de SQL. pv es la tabla vista por el usuario.
Inserte la descripción de la imagen aquí
Normalmente, el proceso de escribir un SQL consiste en asociar pv y usuario, y luego seleccionar filas elegibles. ¿Se puede optimizar aquí? Si es así, ¿cómo optimizarlo?

Cuando hay muchos datos, sería genial si filtramos los datos que necesitamos antes de la tabla de asociación. En Presto, antes de asociar, al escanear la tabla, no se sacan todos los datos, solo se usan el siteId y el userid para la asociación, lo que se vuelve más eficiente.

¿Cómo lograr estas optimizaciones? Primero, definirá algunas reglas y luego ejecutará estas estrategias optimizadas una y otra vez basándose en la estructura de árbol de estos planes lógicos, pero siempre que encuentre una estructura similar, podrá ajustar el árbol del plan lógico para hacer que todo el SQL sea más eficiente.
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Después de optimizar el plan lógico, debemos considerar cómo implementar físicamente el plan lógico.
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
La división se basa principalmente en la abstracción de Optimizer. Luego, una vez finalizada la segmentación, se realizarán algunos Shuffle y Group by y HashJoin.

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
El Shuffle aquí no se vende.

Pregunta: Si no realiza un pedido durante Shuffle, ¿qué restricciones impondrá SQL? (Sugerencia: al unirse / groupby)

Respuesta: Al asociar o fusionar, queremos
calcular los datos de la misma clave en el mismo nodo, pero si se produce un sesgo de datos, la memoria de un nodo explotará si hay demasiados datos.

Luego obtenemos un plan de ejecución distribuido, que está programado para ejecutarse en cada nodo por separado. Esta es la lógica de ejecución detallada dentro de Coordinator.

A continuación se muestra la programación del plan físico.

Inserte la descripción de la imagen aquí
Presto también hará algunos programas de nivel físico, como codegen, la característica principal es el compilador en tiempo de ejecución .
Inserte la descripción de la imagen aquí
Otra optimización es la capa de almacenamiento parcial, el índice de datos y la optimización de la estructura de organización de datos. Obtenga estructuras de almacenamiento basadas en columnas (como ORC, parquet, etc.) a partir de la estructura de almacenamiento basada en filas.
Inserte la descripción de la imagen aquí

2.2. Tecnología de expansión del sistema OLAP distribuido

Introduzca algunas compensaciones al implementar el diseño de arquitectura de algunos sistemas. Presenta principalmente cuatro sistemas: Kylin, Druid, Clickhouse y Doris.

2.2.1 Preagregación de Kylin y Cube

Inserte la descripción de la imagen aquí
Hay versiones comerciales y de código abierto. La característica específica es la prepolimerización. Qué significa eso?

Suponiendo que una tabla de hechos tiene muchas dimensiones, a menudo es necesario agregar según estas dimensiones, y luego Kylin agregará antes de que la encontremos.Cuando la encontremos, vaya a Kylin y selecciónela. Se utiliza comúnmente en el análisis de cubos de datos.
Inserte la descripción de la imagen aquí

2.2.2 Aislamiento de escritura de druida y transmisión, la columna de dimensión está invertida

Inserte la descripción de la imagen aquí
Druid en sí mismo es también un almacenamiento en columnas, y el más extremo es un índice invertido, un índice que almacena el valor de una columna con un mapa de bits.

Por ejemplo, hay dos valores en la columna anunciante, escaneamos toda la columna para obtener un mapa de bits, {"bing.com": [0,0,0,1], "google.com": [1, 1, 1, 0] }. La longitud de la matriz es el número de filas en la columna. [0,0,0,1] correspondiente a bing.com significa el valor de bing.com que aparece en la cuarta fila. ¿Por qué es 4? Porque la posición / índice de 1 en la matriz es 4 (comenzando en el índice 1). También podemos ver fácilmente que [1, 1, 1, 0] correspondiente a google.com significa que google.com aparece en las líneas 1, 2 y 3.

Así, cuando WHEREcuando hay una pluralidad de condiciones se pueden tomar directamente después de la andoperación, la eficiencia operativa se vuelve.

Inserte la descripción de la imagen aquí

2.2.3 Clickhouse y SIMD

Es principalmente mediante el uso de hardware y memoria para mejorar las capacidades de computación en el sitio, que pueden hacer un uso completo de la CPU.
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

2.2.4 Doris y nuestro plan de integración

Doris es cohesiva y no tiene grandes dependencias externas. Compatible con el protocolo MySQL. (Anteriormente llamado Palo, el reverso de OLAP)
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Frontend puede considerarse como el Coordinador de expansión horizontal de Presto, y Bankend puede considerarse como Trabajador de expansión horizontal más algo de almacenamiento.
Inserte la descripción de la imagen aquí
Utilice el modo LSM-Tree. Resolvió el problema de que espero tener un resultado más rápido para las consultas KV al tiempo que mejora la capacidad de rendimiento general al escribir lotes grandes y rápidos.
Inserte la descripción de la imagen aquí

Tres, caso de transformación

3.1 Presto en hilo

Una el escalado elástico de Presto, la programación de consultas y YARN.
Inserte la descripción de la imagen aquí

3.2 Consulta ADhoc unificada One SQL

Principalmente para resolver el problema de diferentes dialectos de múltiples motores. La
Inserte la descripción de la imagen aquí
arquitectura reconstruida se muestra en la figura:
Inserte la descripción de la imagen aquí
(Incluso hay un modelo de árbol de decisión de entrenamiento, y la extracción de sentencias de juicio de características es más rápida en esa base de datos, y luego se genera el dialecto del motor correspondiente)

3.3 Construcción OLAP unificada

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

3.4 Método de comparación de bases de datos

Al comparar bases de datos desde una perspectiva multidimensional, existen dos métodos que pueden ayudarlo a construir el contenido de la base de datos y la estructura de SQL, y luego probar la implementación de la base de datos con la estructura. Inserte la descripción de la imagen aquí
Esta es la comparación de rendimiento después de la transformación:
Inserte la descripción de la imagen aquí

Aprender no es fácil, y elogiar y coleccionar.

Supongo que te gusta

Origin blog.csdn.net/qq_36366757/article/details/109374543
Recomendado
Clasificación