Série de artigos
- Motor de armazenamento em tempo real e motor de cálculo em tempo real
- Prática do sistema Meituan Dianping Hadoop / Spark
- Tecnologia de consulta de Big Data da Meituan
Artigo Diretório
Este artigo está relacionado principalmente a recursos e serviços de dados na seção de produtos e serviços de dados .
O conteúdo deste artigo é o seguinte:
1. Cenários de aplicação
Contexto: Quero entender como esse negócio afeta todo o aplicativo Meituan.
"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.
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.
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.
A análise OLAP mencionada anteriormente é usada aqui. Quais são os métodos de análise OLAP? Existem cinco tipos mencionados aqui.
- 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)
- 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)
- Fatia: a mesma dimensão, apenas um valor é analisado. (Supondo que um cubo tenha três camadas, apenas uma camada é retida)
- Corte em cubos: a mesma dimensão, apenas alguns valores. (Supondo que um cubo tenha três camadas, apenas duas camadas permanecem)
- Rotação: transformação de linha e coluna.
Alguns sistemas comerciais de BI
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
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.
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.
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.
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.
A parte importante é o processamento interno do Coordenador.
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.
Qual é a aparência da árvore de sintaxe? Provavelmente gostaria
de fazer uma declaração no explain
banco 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.
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.
Aqui está a parte de otimização do SQL. pv é a tabela visualizada pelo usuário.
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.
Depois de otimizar o plano lógico, devemos considerar como implementar fisicamente o plano lógico.
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.
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.
O Presto também fará alguns programas de nível físico, como codegen, o principal recurso é o compilador de tempo de execução .
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.
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
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.
2.2.2 Druida e isolamento de gravação de streaming, a coluna de dimensão é invertida
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 WHERE
quando houver uma pluralidade de condições pudermos ser tomadas diretamente após a and
operação, a eficiência operacional se torna
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.
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)
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.
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.
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.
3.2 Consulta ADhoc unificada Um SQL
Principalmente para resolver os problemas de diferentes dialetos de vários motores. A
arquitetura reconstruída é mostrada na figura:
(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
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.
Esta é a comparação de desempenho após a transformação:
Aprender não é fácil, e elogio e cobrança.