Tecnologia de consulta de Big Data da Meituan

Série de artigos

  1. Motor de armazenamento em tempo real e motor de cálculo em tempo real
  2. Prática do sistema Meituan Dianping Hadoop / Spark
  3. Tecnologia de consulta de Big Data da Meituan


Este artigo está relacionado principalmente a recursos e serviços de dados na seção de produtos e serviços de dados .
Insira a descrição da imagem aqui
O conteúdo deste artigo é o seguinte:
Insira a descrição da imagem aqui

1. Cenários de aplicação

Contexto: Quero entender como esse negócio afeta todo o aplicativo Meituan.
Insira a descrição da imagem aqui
"Growth Hacker" mencionou um método de modelo pirata, que é essencialmente uma desmontagem em forma de funil e análise de conversão de tráfego. Contém as etapas desde a aquisição do usuário até a conversão e ativação do usuário e métodos de análise correspondentes.
Insira a descrição da imagem aqui
Mas apenas os métodos não são suficientes e deve haver suporte de dados correspondente. Como os dados são organizados? Está dividido em 5 partes.
Insira a descrição da imagem aquiInsira a descrição da imagem aqui
O que devemos fazer quando fazemos essas análises?

Depende do seguinte SQL.
Primeiro, olhe para FROM, tabela de pedidos associados, tabela de cidade e tabela de dimensão de cidade,
então olhe para WHERE, selecione o negócio de ônibus e pedidos de recompra entre 18 e 19 de agosto, então
olhe para GROUP BY e SUM, é basicamente claro Acima.
Insira a descrição da imagem aqui
A análise OLAP mencionada anteriormente é usada aqui. Quais são os métodos de análise OLAP? Existem cinco tipos mencionados aqui.

  1. Drilling (drill down): Aumente a dimensão e analise o problema com uma granularidade mais fina. (Suponha que um paralelepípedo retangular tenha uma camada e se expanda em três camadas)
  2. Rolling up (drill up): Reduza as dimensões e seja capaz de ver os problemas de uma perspectiva macro (relativa). (Supondo que um cubo tenha três camadas, compactadas em uma camada)
  3. Fatia: a mesma dimensão, apenas um valor é analisado. (Supondo que um cubo tenha três camadas, apenas uma camada é retida)
  4. Corte em cubos: a mesma dimensão, apenas alguns valores. (Supondo que um cubo tenha três camadas, apenas duas camadas permanecem)
  5. Rotação: transformação de linha e coluna.
    Insira a descrição da imagem aqui
    Alguns sistemas comerciais de BI
    Insira a descrição da imagem aqui

Dois, arquitetura do sistema

2.1. Revisão da Arquitetura do Sistema - Presto

Concentre-se em apresentar os bancos de dados amplamente usados ​​e representativos para ver como as instruções SQL distribuídas são executadas.

Primeiro, deixe-me apresentar as idéias de seleção de banco de dados da Meituan. Principalmente dividido nos três cenários a seguir: O
Insira a descrição da imagem aqui
Presto que apresentaremos no próximo estágio está principalmente na parte de consulta ad hoc. Vamos dar uma olhada na história evolutiva do Presto, se você estiver interessado.

Insira a descrição da imagem aqui
Em poucas palavras, o conceito de design é trocar confiabilidade por desempenho . O Spark e o Map Reduce de que falamos antes são colocados no processo de embaralhamento, de modo que, mesmo se um nó estiver inativo, ele pode ser construído rapidamente na base anterior. Execute, reutilize os dados anteriores tanto quanto possível. Mas Presto não considerou esta questão, seu posicionamento é relativo aos cenários de grande escala do Hive e Spark.

Então, se você não conseguir segurá-lo, irá falhar rapidamente. Você também pode associar dados de outros tipos de bancos de dados. Insira a descrição da imagem aqui
De uma perspectiva macro, a estrutura geral é mostrada na figura acima. O azul é o serviço do próprio Presto, e o frontal é um controle do tipo cliente, semelhante à linha de comando do MySQL. MetaStore basicamente armazena os metadados das tabelas e bibliotecas no HDFS. (Bonecas são proibidas)

Presto ainda é uma estrutura mestre-escravo, o Cordinator é o coordenador e o Trabalhador é o trabalhador.

Insira a descrição da imagem aqui
A estrutura detalhada é mostrada na figura:

O cliente envia um SQL, analisa, planeja, divide e programações no Coordenador e, em seguida, envia os módulos gerenciados por cada trabalhador. Depois que cada trabalhador obtém a tarefa, os dados são verificados do HDFS e calculados. Depois que cada trabalhador é agregado, ele passa um A interface de fluxo é retornada ao Cliente.

Insira a descrição da imagem aqui
A parte importante é o processamento interno do Coordenador.
Insira a descrição da imagem aqui
Como analisar a gramática? Na verdade, isso envolve o conhecimento dos princípios de compilação e gera árvores de sintaxe por meio de análise lexical, análise gramatical, etc.Insira a descrição da imagem aqui

Qual é a aparência da árvore de sintaxe? Provavelmente gostaria
Insira a descrição da imagem aqui
de fazer uma declaração no explainbanco de dados SQL e dirá como executar a seguir. De acordo com a árvore sintática obtida acima, um plano lógico do processo de execução é construído.
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Aqui está a abstração do acesso do Presto à fonte de dados. O próprio SQL é protegido na camada de leitura de dados. Isso requer alguma configuração para acessar a fonte de dados.
Insira a descrição da imagem aqui
Aqui está a parte de otimização do SQL. pv é a tabela visualizada pelo usuário.
Insira a descrição da imagem aqui
Normalmente, o processo de escrever um SQL é associar PV e usuário e, em seguida, selecionar as linhas elegíveis. Pode ser otimizado aqui? Em caso afirmativo, como otimizá-lo?

Quando há muitos dados, seria ótimo filtrarmos os dados de que precisamos antes da tabela de associação. No Presto, antes de associar, ao escanear a tabela, nem todos os dados são retirados, apenas o siteId e o userid são usados ​​para associação, o que se torna mais eficiente.

Como fazer essas otimizações? Primeiro, você definirá algumas regras e, em seguida, executará essas estratégias otimizadas repetidamente com base na estrutura em árvore desses planos lógicos, mas sempre que encontrar uma estrutura semelhante, você pode ajustar a árvore do plano lógico para tornar todo o SQL mais eficiente.
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Depois de otimizar o plano lógico, devemos considerar como implementar fisicamente o plano lógico.
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
A divisão é baseada principalmente na abstração do Optimizer. Depois que a segmentação for concluída, algum Shuffle e Group by e HashJoin será feito.

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
O Shuffle aqui não é vendido.

Pergunta: Se você não fizer um pedido durante o Shuffle, que restrições o SQL imporá? (Dica: ao entrar / agrupar)

Resposta: Ao associar ou mesclar, queremos
calcular os dados da mesma chave no mesmo nó, mas se ocorrer distorção de dados, a memória de um nó explodirá se houver muitos dados.

Em seguida, obtemos um plano de execução distribuído, que está programado para ser executado em cada nó separadamente. Esta é a lógica de execução detalhada dentro do Coordenador.

Abaixo está o agendamento do plano físico.

Insira a descrição da imagem aqui
O Presto também fará alguns programas de nível físico, como codegen, o principal recurso é o compilador de tempo de execução .
Insira a descrição da imagem aqui
Outra otimização é a camada de armazenamento parcial, índice de dados e otimização da estrutura de organização de dados. Derive estruturas de armazenamento baseadas em colunas (como ORC, parquet, etc.) da estrutura de armazenamento baseada em linhas.
Insira a descrição da imagem aqui

2.2. Tecnologia de expansão do sistema OLAP distribuído

Apresente algumas compensações ao implementar o design de arquitetura de alguns sistemas. Ele apresenta principalmente quatro sistemas: Kylin, Druid, Clickhouse e Doris.

2.2.1 Pré-agregação Kylin e Cube

Insira a descrição da imagem aqui
Existem versões comerciais e de código aberto. A característica específica é a pré-polimerização. O que isso significa?

Supondo que uma tabela de fatos tenha muitas dimensões, geralmente é necessário agregar de acordo com essas dimensões, e então Kylin a agregará antes de encontrá-la. Quando a encontrarmos, vá para Kylin e selecione-a. É comumente usado na análise de cubos de dados.
Insira a descrição da imagem aqui

2.2.2 Druida e isolamento de gravação de streaming, a coluna de dimensão é invertida

Insira a descrição da imagem aqui
O próprio Druid também é um armazenamento colunar, e o mais extremo é um índice invertido - um índice que armazena o valor de uma coluna com um bitmap.

Por exemplo, há dois valores na coluna anunciante, verificamos toda a coluna para obter um bitmap, {"bing.com": [0,0,0,1], "google.com": [1, 1, 1, 0] } O comprimento da matriz é o número de linhas na coluna. [0,0,0,1] correspondente a bing.com significa o valor de bing.com que aparece na quarta linha. Por que é 4? Porque a posição / índice de 1 na matriz é 4 (começando no índice 1). Também podemos ver facilmente que [1, 1, 1, 0] correspondente a google.com significa que google.com aparece nas linhas 1, 2 e 3.

Assim, quando nós WHEREquando houver uma pluralidade de condições pudermos ser tomadas diretamente após a andoperação, a eficiência operacional se torna

Insira a descrição da imagem aqui

2.2.3 Clickhouse e SIMD

É principalmente por meio do uso de hardware e memória para melhorar os recursos de computação no local, que podem fazer uso total da CPU.
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

2.2.4 Doris e nosso plano de integração

Doris é coesa e não tem grandes dependências externas. Compatível com protocolo MySQL. (Anteriormente chamado de Palo, o reverso do OLAP)
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Frontend pode ser considerado como Coordenador de expansão horizontal do Presto e Bankend pode ser considerado como Trabalhador de expansão horizontal mais algum armazenamento.
Insira a descrição da imagem aqui
Use o modo LSM-Tree. Resolvido o problema que eu espero ter um resultado mais rápido para consultas KV enquanto melhora a capacidade de rendimento geral ao gravar lotes grandes e rápidos.
Insira a descrição da imagem aqui

Três, caso de transformação

3.1 Presto on Yarn

Vincule o dimensionamento elástico do Presto, a programação de consulta e o YARN.
Insira a descrição da imagem aqui

3.2 Consulta ADhoc unificada Um SQL

Principalmente para resolver os problemas de diferentes dialetos de vários motores. A
Insira a descrição da imagem aqui
arquitetura reconstruída é mostrada na figura:
Insira a descrição da imagem aqui
(Há até um modelo de árvore de decisão de treinamento, e a extração de sentenças de julgamento de recursos é mais rápida nesse banco de dados e, em seguida, o dialeto do motor correspondente é gerado)

3.3 Construção OLAP unificada

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

3.4 Método de comparação de banco de dados

Comparando bancos de dados de uma perspectiva multidimensional, existem dois métodos que podem ajudá-lo a construir o conteúdo do banco de dados e a estrutura do SQL e, em seguida, testar a implementação do banco de dados com a estrutura. Insira a descrição da imagem aqui
Esta é a comparação de desempenho após a transformação:
Insira a descrição da imagem aqui

Aprender não é fácil, e elogio e cobrança.

Acho que você gosta

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