1. Apresentação de Doris
O Apache Doris é um banco de dados analítico em tempo real e de alto desempenho baseado na arquitetura MPP. É bem conhecido por seus recursos extremamente rápidos e fáceis de usar. Ele só precisa de um tempo de resposta de menos de um segundo para retornar resultados de consulta em dados massivos. Ele pode não apenas oferecer suporte a alta simultaneidade. O cenário de consulta de ponto também pode oferecer suporte a cenários de análise complexos com alto rendimento. Com base nisso, o Apache Doris pode atender melhor a cenários de uso, como análise de relatório, consulta ad hoc, construção de data warehouse unificado, aceleração de consulta de federação de data lake, etc. análise, análise de pedidos e outras aplicações.
O Apache Doris nasceu no projeto Palo do negócio de relatórios de publicidade do Baidu. Foi oficialmente de código aberto em 2017. Em julho de 2018, o Baidu o doou à Apache Foundation para incubação. Posteriormente, sob a orientação dos mentores do Apache, membros do comitê de gerenciamento de projetos de incubadoras incubadas e operadas. Atualmente, a comunidade Apache Doris reúne mais de 400 colaboradores de centenas de empresas em diferentes setores, e o número de colaboradores ativos por mês ultrapassa 100. Em junho de 2022, Apache Doris formou-se com sucesso na Apache Incubator e tornou-se oficialmente o Apache Top-Level Project (TLP).
O Apache Doris agora tem uma ampla variedade de grupos de usuários na China e em todo o mundo. Até agora, o Apache Doris foi usado no ambiente de produção de mais de 2.000 empresas em todo o mundo. Entre as 50 principais empresas de Internet em capitalização de mercado ou avaliação, Mais de 80% deles usam Apache Doris há muito tempo, incluindo Baidu, Meituan, Xiaomi, JD.com, ByteDance, Tencent, Netease, Kuaishou, Weibo, Shell, etc. Ao mesmo tempo, também possui aplicações ricas em algumas indústrias tradicionais, como finanças, energia, manufatura e telecomunicações.
2. Cenários de uso
Conforme mostrado na figura abaixo, após várias integrações e processamentos de dados, as fontes de dados geralmente são armazenadas no data warehouse Doris em tempo real e nos lake warehouses off-line (em Hive, Iceberg, Hudi). O Apache Doris é amplamente usado nos cenários a seguir.
-
análise de relatório
-
Kanban em tempo real (Painéis)
-
Relatórios para Analistas e Gerentes Internos
-
Análise de relatório de alta simultaneidade orientada ao usuário ou ao cliente (Customer Facing
Analytics). Por exemplo, a análise de site para proprietários de sites e relatórios de publicidade para anunciantes geralmente exigem dezenas de milhares de QPS simultaneamente
, e a latência de consulta requer resposta em nível de milissegundos. A conhecida empresa de comércio eletrônico JD.com usa o Apache Doris em relatórios de publicidade, grava 10 bilhões de linhas de dados todos os dias, faz consultas simultaneamente com dezenas de milhares de QPS e o atraso da consulta do percentil 99 é de 150 ms. -
Consulta Ad-hoc: Análise de autoatendimento para analistas.O modo de consulta não é fixo e requer alto rendimento. A Xiaomi construiu uma plataforma de análise de crescimento (Growing Analytics, GA) com base em Doris, usando dados de comportamento do usuário para analisar o crescimento dos negócios. O atraso médio da consulta é de 10 segundos e o atraso da consulta do 95º percentil está dentro de 30 segundos. O volume diário de consultas SQL é dezenas de milhares tiram.
-
Construção unificada de data warehouse: uma plataforma atende às necessidades de construção unificada de data warehouse e simplifica a pesada pilha de software de big data. O data warehouse unificado de Haidilao baseado em Doris substituiu a
antiga arquitetura composta por Spark, Hive, Kudu, Hbase e Phoenix, e a arquitetura foi bastante simplificada. -
Consulta federada de data lake: análise federada de dados localizados em Hive, Iceberg e Hudi por meio do método de aparência, e o desempenho da consulta é bastante aprimorado sob a premissa de evitar a cópia de dados.
3. Visão geral técnica
A arquitetura geral do Doris é mostrada na figura abaixo. A arquitetura do Doris é muito simples, com apenas dois tipos de processos
- Frontend (FE) é o principal responsável pelo acesso das solicitações do usuário, planejamento de análise de consultas, gerenciamento de metadados e gerenciamento de nós.
- Backend (BE) é o principal responsável pelo armazenamento de dados e execução dos planos de consulta.
Esses dois tipos de processos são escaláveis horizontalmente e um único cluster pode suportar centenas de máquinas e dezenas de petabytes de capacidade de armazenamento. E esses dois tipos de processos garantem alta disponibilidade de serviços e alta confiabilidade de dados por meio de protocolos de consistência. Esse projeto de arquitetura altamente integrado reduz consideravelmente o custo de operação e manutenção de um sistema distribuído.
Em termos de interface, Doris adota o protocolo MySQL, é altamente compatível com a sintaxe MySQL, oferece suporte a SQL padrão, os usuários podem acessar Doris por meio de várias ferramentas de cliente e oferece suporte à conexão contínua com ferramentas de BI.
Em termos de mecanismo de armazenamento, Doris adota armazenamento colunar, codifica, compacta e lê dados por coluna, o que pode atingir uma taxa de compactação muito alta e, ao mesmo tempo, reduzir a digitalização de uma grande quantidade de dados irrelevantes, de modo a tornar mais uso eficaz dos recursos de E/S e CPU.
Doris também suporta uma estrutura de índice mais rica para reduzir a varredura de dados:
- Índice de chave composta classificado, você pode especificar até três colunas para formar uma chave de classificação composta. Por meio desse índice, os dados podem ser cortados de forma eficaz, de modo a oferecer melhor suporte a cenários de relatório de alta simultaneidade
- Índice de ordem Z: usando o índice de ordem Z, você pode executar consultas de intervalo com eficiência em qualquer combinação de campos no modelo de dados
- Min/Max: Consultas de equivalência e intervalo para filtragem eficiente de tipos numéricos
- Filtro Bloom: A filtragem equivalente e o corte de colunas de alta cardinalidade são muito eficazes
- Inverter índice: capacidade de recuperar rapidamente qualquer campo
Em termos de modelos de armazenamento, o Doris suporta uma variedade de modelos de armazenamento otimizados para diferentes cenários:
- Modelo de chave agregada: a coluna de valor da mesma chave é mesclada e o desempenho é bastante aprimorado por meio da agregação inicial
- Modelo de chave exclusiva: a chave é única, os dados da mesma chave são substituídos e a atualização dos dados no nível da linha é realizada
- Modelo de chave duplicada: modelo de dados detalhado, satisfazendo o armazenamento detalhado de tabelas de fatos
Doris também suporta visualizações materializadas fortemente consistentes.A atualização e seleção de visualizações materializadas são realizadas automaticamente no sistema sem seleção manual pelos usuários, reduzindo assim muito o custo de manutenção de visualizações materializadas.
Em termos de mecanismo de consulta, Doris adota o modelo MPP, que executa em paralelo entre os nós e dentro dos nós, e também suporta o Shuffle Join distribuído de várias tabelas grandes, para que possa lidar melhor com consultas complexas.
O mecanismo de consulta Doris é um mecanismo de consulta vetorizado. Todas as estruturas de memória podem ser dispostas em colunas, o que pode reduzir bastante as chamadas de funções virtuais, melhorar a taxa de acertos do cache e usar instruções SIMD com eficiência. No cenário de agregação de tabela ampla, o desempenho é de 5 a 10 vezes maior que o do mecanismo não vetorizado.
Doris adota a tecnologia Adaptive Query Execution, que pode ajustar dinamicamente o plano de execução de acordo com as estatísticas de tempo de execução. Por exemplo, a tecnologia Runtime Filter pode gerar filtro em tempo de execução e empurrá-lo para o lado do Probe, e pode penetrar automaticamente no filtro para o nó Scan inferior em o lado do Probe. Isso reduz muito a quantidade de dados do Probe e acelera o desempenho da junção. O filtro de tempo de execução de Doris oferece suporte ao filtro In/Min/Max/Bloom.
Em termos de otimizadores, Doris usa uma estratégia de otimização combinando CBO e RBO. RBO suporta dobramento constante, reescrita de subconsulta, pushdown de predicado, etc. CBO suporta Join Reorder. No momento, o CBO ainda está em processo de otimização contínua, concentrando-se principalmente na coleta e derivação de informações estatísticas mais precisas e na estimativa de modelo de custo mais precisa.
4. Baixar Doris
Doris é executado em um ambiente Linux. CentOS 7.x ou Ubuntu 16.04 ou superior é recomendado. Ao mesmo tempo, você precisa instalar o ambiente de execução Java (a versão mínima do JDK é 8). Para verificar a versão do Java que você instalou , execute o seguinte comando:
java -version
Em seguida, baixe a versão binária da versão estável 1.2.5 da Doris e descompacte-a.
wget https://apache-doris-releases.oss-accelerate.aliyuncs.com/apache-doris-1.2.5-bin-x86_64.tar.xz
A operação é mostrada na figura abaixo
Use o seguinte comando para descompactar
tar xvf apache-doris-1.2.5-bin-x86_64.tar.xz
A operação é como mostrado na figura abaixo
5. Configurar Doris
Configurar FEs
Entramos no diretório apache-doris-1.2.5-bin-x86_64/fe
cd apache-doris-1.2.5-bin-x86_64/fe/
A operação é mostrada na figura abaixo.
Modifique o arquivo de configuração do FE conf/fe.conf. Aqui nós modificamos principalmente dois parâmetros: priority_networks e meta_dir. Se você precisar de configurações mais otimizadas, consulte as instruções de configuração do parâmetro FE para ajustes.
- Adicionar parâmetro priority_networks
priority_networks= 192.168.50.186/24
Use o seguinte comando para adicionar:
vim conf/fe.conf #编辑
:wq #保存退出
Perceber:
Este parâmetro deve ser configurado durante a instalação, especialmente quando uma máquina possui vários endereços IP, precisamos especificar um endereço IP exclusivo para FE.
Aqui o IP do nó local é 192.168.50.186, então podemos configurar como 192.168.50.186/24 por máscara.
- Adicionar diretório de metadados
meta_dir=/data/doris-meta
Primeiro, a máquina local escolhe criá-lo no diretório de dados, usando o seguinte comando:
mkdir -p /data/doris-meta #创建元数据目录
cd /data/doris-meta #进入已经创建好目录进行验证
pwd #查看目录结构
A operação é mostrada na figura abaixo:
Em seguida, entre no diretório fe e adicione meta_dir= /data/doris-meta no arquivo fe.conf correspondente. O comando específico da operação é o seguinte:
cd /data/apache-doris-1.2.5-bin-x86_64/fe/
vim conf/fe.conf #编辑
:wq #保存退出
A operação é mostrada na figura abaixo:
Nota:
Você não pode configurar aqui, o padrão é doris-meta no diretório de instalação do Doris FE,
Para configurar o diretório de metadados separadamente, você precisa criar o diretório especificado com antecedência
Iniciar FE
Execute o seguinte comando no diretório de instalação do FE para concluir a inicialização do FE.
./bin/start_fe.sh --daemon
Veja o status de execução do FE
Você pode verificar se Doris foi iniciado com sucesso com o seguinte comando
curl http://192.168.50.186:8030/api/bootstrap
Aqui o IP e a porta são IP do FE e http_port (8030 por padrão), se você executá-lo no nó FE, basta executar o comando acima diretamente.
Se houver "msg":"success" no resultado retornado, isso significa que a inicialização foi bem-sucedida.
Você também pode verificar através da interface do usuário da Web fornecida por Doris FE, digite o endereço no navegador
http:// fe_ip:8030
Você pode ver a seguinte interface, indicando que a inicialização do FE foi bem-sucedida
Nota:
Aqui usamos a raiz de usuário padrão interna do Doris para fazer login, e a senha está vazia.
Esta é uma interface de gerenciamento do Doris, apenas usuários com direitos administrativos podem fazer login e usuários comuns não podem fazer login.
Conectar ao FE
Vamos conectar Doris FE através do cliente MySQL e baixar o cliente MySQL sem instalação
Descompacte o cliente MySQL recém-baixado e você poderá encontrar a ferramenta de linha de comando mysql no diretório bin/. Em seguida, execute o seguinte comando para se conectar a Doris.
mysql -uroot -P9030 -h192.168.50.186
O funcionamento é conforme a figura abaixo:
Nota:
- O usuário raiz usado aqui é o usuário padrão integrado de doris e também é um usuário superadministrador. Para obter permissões de usuário específicas, consulte gerenciamento de permissão
- -P : Aqui está a porta de consulta que conectamos a Doris, a porta padrão é 9030, que corresponde à query_port em fe.conf
- -h : Aqui está o endereço IP do FE ao qual nos conectamos, se o seu cliente e o FE estiverem instalados no mesmo nó, você pode usar 127.0.0.1.
Execute o seguinte comando para visualizar o status de execução do FE
show frontends\G;
Então você pode ver resultados semelhantes aos seguintes:
Se as três colunas de IsMaster, Join e Alive forem todas verdadeiras, isso significa que o nó é normal.
Conexão criptografada FE
Doris suporta conexões criptografadas baseadas em SSL. Atualmente suporta os protocolos TLS1.2 e TLS1.3. Você pode habilitar o modo SSL de Doris através da seguinte configuração: Modifique o arquivo de configuração FE conf/fe.conf e adicione enable_ssl = true.
Em seguida, conecte-se a Doris por meio do cliente mysql, o mysql suporta cinco modos SSL:
1.mysql -uroot -P9030 -h127.0.0.1 é o mesmo que mysql --ssl-mode=PREFERRED -uroot -P9030 -h127.0.0.1, ambos tentam estabelecer uma conexão SSL criptografada no início, se falhar, tente usar a conexão Normal.
2.mysql --ssl-mode=DISABLE -uroot -P9030 -h127.0.0.1, não use conexão criptografada SSL, use conexão normal diretamente.
3.mysql --ssl-mode=REQUIRED -uroot -P9030 -h127.0.0.1, força o uso de conexões SSL criptografadas.
4.mysql --ssl-mode=VERIFY_CA --ssl-ca=ca.pem -uroot -P9030 -h127.0.0.1, força o uso de conexão criptografada SSL e verifica se a identidade do servidor é válida especificando o certificado CA.
5. mysql --ssl-mode=VERIFY_CA --ssl-ca=ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem -uroot -P9030 -h127.0.0. 1. Imponha o uso de conexões criptografadas SSL e autenticação bidirecional.
Nota: O parâmetro --ssl-mode foi introduzido na versão mysql5.7.11, consulte aqui para a versão do cliente mysql inferior a esta versão.
Doris precisa de um arquivo de certificado de chave para verificar a conexão SSL criptografada. O arquivo de certificado de chave padrão está localizado em Doris/fe/mysql_ssl_default_certificate/. Para a geração do arquivo de certificado de chave, consulte a configuração do certificado de chave.
parar nó FE
A parada de Doris FE pode ser feita pelo seguinte comando
./bin/stop_fe.sh
Configurar BE
Entramos no diretório apache-doris-1.2.5-bin-x86_64/be
cd /data/apache-doris-1.2.5-bin-x86_64/be
Modifique o arquivo de configuração do BE conf/be.conf. Aqui nós modificamos principalmente dois parâmetros: priority_networks e storage_root. Se você precisar de configurações mais otimizadas, consulte as instruções de configuração do parâmetro BE para ajustes.
- Adicionar parâmetro priority_networks
priority_networks=192.168.50.186/24
Use o seguinte comando:
vim conf/be.conf #编辑
:wq #保存退出
A operação é conforme a figura abaixo
. Nota:
Devemos configurar este parâmetro durante a instalação, especialmente quando uma máquina possui vários endereços IP, precisamos especificar um endereço IP exclusivo para o BE.
- Configurar o diretório de armazenamento de dados BE
storage_root_path=/data/data_dir
Use o seguinte comando:
mkdir -p /data/data_dir
vim conf/be.conf #编辑
:wq #保存退出
A operação é mostrada na figura abaixo
Perceber:
O diretório padrão está sob o diretório de armazenamento do diretório de instalação do BE.
O diretório de armazenamento para a configuração do BE deve ser criado primeiro
- Configure a variável de ambiente JAVA_HOME
Nota: Este servidor já foi configurado. Se você precisar de um tutorial de configuração, consulte o artigo de instalação do JDK
do autor . Visto que a versão 1.2 suporta funções Java UDF, BE depende do ambiente Java. Portanto, para pré-configurarJAVA_HOME
variáveis de ambiente, você também podestart_be.sh
adicionar na primeira linha do script de inicializaçãoexport JAVA_HOME=your_java_home_path
para adicionar variáveis de ambiente. - Instalar a função Java UDF
Instalar a função Java UDF Como a função Java UDF é suportada a partir da versão 1.2, você precisa baixar o pacote JAR da função Java UDF do site oficial e colocá-lo no diretório lib do BE, caso contrário, pode falhar ao iniciar.
Iniciar SER
Execute o seguinte comando no diretório de instalação do BE para concluir a inicialização do BE.
./bin/start_be.sh --daemon
Nota: Se solicitado na inicialização, defina vm.max_map_count como 2000000 na raiz usando 'sysctl -w vm.max_map_count=2000000' e defina o número máximo de descritores de arquivos abertos como 65536 usando 'ulimit -n 65536'. Por favor, execute o comando da seguinte forma:
sysctl -w vm.max_map_count=2000000
ulimit -n 65536
Por exemplo, se sua CPU não suporta AVX2, você precisa reconstruir o Doris BE com: USE_AVX2=0 sh Execute o comando para baixar: wget https://apache-doris-releases.oss-accelerate.aliyuncs.com/ apachedoris-1.2.5-bin-x86_64-noavx2.tar.xz baixe a versão noavx2 , lembre-se de verificar se sua cpu suporta instruções AVX2 com antecedência [HY000][1105] errCode = 2, detailMessage = Não há scanNode Backend disponível... e 1 erro de relatórios duplicados será relatado . Neste momento, você precisa adicionar nós BE ao cluster; lembre-se que a linha de comando pode ser operada e conectada normalmente neste momento.
Adicionar nós BE ao cluster
Após conectar-se ao FE por meio do cliente MySQL, execute o seguinte SQL para adicionar o BE ao cluster
ALTER SYSTEM ADD BACKEND "192.168.50.186:9050";
explicação do comando
ALTER SYSTEM ADD BACKEND "be_host_ip:heartbeat_service_port";
be_host_ip: Este é o endereço IP do seu BE, que corresponde ao seu priority_networks em be.conf.
heartbeat_service_port: Esta é a porta de relatório de heartbeat do seu BE, que corresponde ao seu heartbeat_service_port em be.conf. O padrão é 9050.
Exibir o status de execução do BE
Você pode executar o seguinte comando na linha de comando do MySQL para verificar o status de execução do BE.
SHOW BACKENDS\G
O resultado é o seguinte:
*************************** 1. row ***************************
BackendId: 10003
Cluster: default_cluster
IP: 192.168.50.186
HeartbeatPort: 9050
BePort: 9060
HttpPort: 8040
BrpcPort: 8060
LastStartTime: 2023-06-26 15:58:19
LastHeartbeat: 2023-06-26 15:58:38
Alive: true
SystemDecommissioned: false
ClusterDecommissioned: false
TabletNum: 0
DataUsedCapacity: 0.000
AvailCapacity: 458.121 GB
TotalCapacity: 491.151 GB
UsedPct: 6.73 %
MaxDiskUsedPct: 6.73 %
RemoteUsedCapacity: 0.000
Tag: {
"location" : "default"}
ErrMsg:
Version: doris-1.2.5-rc01-Unknown
Status: {
"lastSuccessReportTabletsTime":"2023-06-26 15:58:27","lastStreamLoadTime":-1,"isQueryDisabled"
:false,"isLoadDisabled":false}
HeartbeatFailureCounter: 0
NodeRole: mix
1 row in set (0.10 sec)
1 carreira na série (0,10 seg)
Observação: neste momento, você pode usar o navicat para selecionar ferramentas como mysql para se conectar para gerenciar operações
- Alive : true indica que o nó está rodando normalmente
Pare o nó BE
Parar Doris BE pode ser feito com o seguinte comando
./bin/stop_be.sh
Criar tabela de dados
- criar um banco de dados
create database demo;
- Criar tabela de dados
use demo;
CREATE TABLE IF NOT EXISTS demo.example_tbl
(
`user_id` LARGEINT NOT NULL COMMENT "用户id",
`date` DATE NOT NULL COMMENT "数据灌入日期时间",
`city` VARCHAR(20) COMMENT "用户所在城市",
`age` SMALLINT COMMENT "用户年龄",
`sex` TINYINT COMMENT "用户性别",
`last_visit_date` DATETIME REPLACE DEFAULT "1970-01-01 00:00:00" COMMENT "用户最后一次访问时间",
`cost` BIGINT SUM DEFAULT "0" COMMENT "用户总消费",
`max_dwell_time` INT MAX DEFAULT "0" COMMENT "用户最大停留时间",
`min_dwell_time` INT MIN DEFAULT "99999" COMMENT "用户最小停留时间"
)
AGGREGATE KEY(`user_id`, `date`, `city`, `age`, `sex`)
DISTRIBUTED BY HASH(`user_id`) BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 1"
);
Neste momento, você pode adicionar os dados correspondentes à tabela, e a conexão navicat é mostrada na figura abaixo:
Alterar senha do banco de dados
Use o seguinte comando para modificar a senha do banco de dados:
ALTER USER root IDENTIFIED BY "12345";
Ele foi modificado e não pode fazer login. A senha é 12345. Digite a senha para fazer login com sucesso
A construção deste filme acabou, e a próxima parte construirá um modo de cluster com base nisso, o que é realmente muito simples.