Serie de artículos
- Motor de almacenamiento en tiempo real y motor de cálculo en tiempo real
- Práctica del sistema Meituan Dianping Hadoop / Spark
- Tecnología Meituan Big Data Query
Directorio de artículos
Este artículo se relaciona principalmente con los recursos y servicios de datos en la sección de productos y servicios de datos .
El contenido de este artículo es el siguiente:
1. Escenarios de aplicación
Antecedentes: quiero entender cómo afecta este negocio a toda la aplicación Meituan.
"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.
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.
¿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.
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.
- 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)
- 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)
- Rebanada: la misma dimensión, solo se observa un valor. (Suponiendo que un cubo tiene tres capas, solo se retiene una capa)
- Dados: La misma dimensión, solo unos pocos valores. (Suponiendo que un cubo tiene tres capas, solo quedan dos capas)
- Rotación: transformación de filas y columnas.
Algunos sistemas de BI comerciales
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:
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.
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.
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.
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.
La parte importante es el procesamiento interno de Coordinador.
¿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.
¿Qué aspecto tiene el árbol de sintaxis? Probablemente le guste
hacer una declaración en la explain
base 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.
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.
Esta es la parte de optimización de SQL. pv es la tabla vista por el usuario.
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.
Después de optimizar el plan lógico, debemos considerar cómo implementar físicamente el plan lógico.
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.
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.
Presto también hará algunos programas de nivel físico, como codegen, la característica principal es el compilador en tiempo de ejecución .
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.
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
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.
2.2.2 Aislamiento de escritura de druida y transmisión, la columna de dimensión está invertida
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 WHERE
cuando hay una pluralidad de condiciones se pueden tomar directamente después de la and
operación, la eficiencia operativa se vuelve.
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.
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)
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.
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.
Tres, caso de transformación
3.1 Presto en hilo
Una el escalado elástico de Presto, la programación de consultas y YARN.
3.2 Consulta ADhoc unificada One SQL
Principalmente para resolver el problema de diferentes dialectos de múltiples motores. La
arquitectura reconstruida se muestra en la figura:
(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
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.
Esta es la comparación de rendimiento después de la transformación:
Aprender no es fácil, y elogiar y coleccionar.