Todos os produtos
Search
Central de documentação

E-MapReduce:FAQ

Última atualização: Jun 27, 2026

Este tópico responde a perguntas frequentes sobre o ClickHouse.

Como criar um usuário do ClickHouse?

Crie um usuário do ClickHouse no console do E-MapReduce (EMR) ou pelo cliente ClickHouse.

  • Console do EMR

    Na aba Configure da página de serviço do ClickHouse no console do E-MapReduce, clique em server-users. Adicione um item de configuração. Defina o parâmetro como users.<YourUserName>.password, users.<YourUserName>.password_sha256_hex ou users.<YourUserName>.password_double_sha1_hex e especifique um valor personalizado. Salve o item de configuração e reinicie o serviço para criar o usuário.

    Substitua <YourUserName> pelo nome do usuário do ClickHouse que você deseja criar.

    Nota

    Para obter mais informações, consulte Gerenciar itens de configuração para adicionar um parâmetro de componente e Reiniciar um serviço para reiniciar um serviço.

  • Cliente ClickHouse

    1. Na aba Configure da página de serviço do ClickHouse no console do E-MapReduce, clique em server-users. Adicione um item de configuração com o parâmetro definido como users.default.access_management e o valor definido como 1. Salve a configuração e reinicie o serviço. Em seguida, conecte-se ao cluster ClickHouse como o usuário padrão.

    2. Faça login no cluster EMR ClickHouse via SSH. Para obter mais informações, consulte Fazer login em um cluster.

    3. Execute o comando a seguir para iniciar o cliente ClickHouse:

      clickhouse-client -h core-1-1 -m
      Nota

      Este exemplo faz login no nó core-1-1. Se houver vários nós principais, faça login em qualquer um deles.

    4. Execute a instrução a seguir para criar um usuário do ClickHouse:

      CREATE USER IF NOT EXISTS user_test ON CLUSTER new_cluster_emr IDENTIFIED WITH plaintext_password BY '123456';
      Nota

      Neste exemplo, o nome do usuário é user_test e a senha é 123456. Especifique o nome e a senha conforme suas necessidades de negócios.

      Sintaxe para criar um usuário do ClickHouse:

      CREATE USER [IF NOT EXISTS | OR REPLACE] name1 [ON CLUSTER cluster_name1]
              [, name2 [ON CLUSTER cluster_name2] ...]
          [NOT IDENTIFIED | IDENTIFIED {[WITH {no_password | plaintext_password | sha256_password | sha256_hash | double_sha1_password | double_sha1_hash}] BY {'password' | 'hash'}} | {WITH ldap SERVER 'server_name'} | {WITH kerberos [REALM 'realm']}]
          [HOST {LOCAL | NAME 'name' | REGEXP 'name_regexp' | IP 'address' | LIKE 'pattern'} [,...] | ANY | NONE]
          [DEFAULT ROLE role [,...]]
          [GRANTEES {user | role | ANY | NONE} [,...] [EXCEPT {user | role} [,...]]]
          [SETTINGS variable [= value] [MIN [=] min_value] [MAX [=] max_value] [READONLY | WRITABLE] | PROFILE 'profile_name'] [,...];
    5. Execute a instrução a seguir para consultar os usuários existentes:

      SHOW USERS;

      As informações sobre os usuários existentes são retornadas.

      ┌─name──────┐
      │ default          │
      │ user_test        │
      │ user_test2       │
      └─────────┘

O que fazer se ocorrer perda de dados?

  • Descrição do problema: Um total de A entradas de dados foi gravado no ClickHouse, mas apenas B entradas foram lidas. B é menor que A.

  • Causa: Na maioria dos casos, não há perda real de dados no ClickHouse. No entanto, como cada shard armazena pelo menos duas réplicas e o mecanismo *MergeTree é usado para tabelas locais, a leitura via tabela distribuída pode retornar menos entradas do que foram gravadas.

    Os dados são distribuídos para cada nó independentemente da gravação ocorrer por meio de uma tabela distribuída ou diretamente nas tabelas locais. Ao ler dados usando uma tabela distribuída, cada shard utiliza uma conexão por padrão. Nesse cenário, o número de conexões é inferior ao número de nós, impedindo a leitura dos dados em alguns nós. Exemplo de instruções:

    CREATE TABLE db.table_local
    (
      ...
    )
    Engine = MergeTree()
    
    CREATE TABLE db.table_distributed
    (
      ...
    )
    Engine = Distributed(cluster_emr, db, table_local, rand());
  • Soluções

    Solução

    Operação

    (Recomendado) Solução 1

    Exclua a tabela db.table_local e crie uma tabela replicada. Utilize a tabela replicada criada como tabela local.

    (Não recomendado) Solução 2

    Na aba Configure da página de serviço do ClickHouse no console do E-MapReduce, clique em server-users. Clique em Add Configuration Item e adicione o parâmetro profiles.<YOUR_PROFILE_NAME>.max_parallel_replicas. Defina seu valor como, no mínimo, o número de réplicas em cada shard. Em seguida, garanta que o parâmetro users.<YOUR_USER_NAME>.profile esteja definido como <YOUR_PROFILE_NAME>.

    Nota

    Substitua <YOUR_PROFILE_NAME> e <YOUR_USER_NAME> pelos valores reais. Para obter mais informações sobre esses parâmetros, consulte Controle de acesso e gerenciamento de contas.

O que fazer se a mensagem de erro "Memory limit (for total) exceeded" aparecer?

  • Causa: O uso de memória excede a memória total disponível para o servidor.

  • Solução: Na aba Configure da página de serviço do ClickHouse no console do E-MapReduce, clique em server-config. Clique em Add Configuration Item e adicione o parâmetro max_server_memory_usage. O valor máximo para este parâmetro é Memória física da máquina * max_server_memory_usage_to_ram_ratio.

    Nota

    O valor padrão do parâmetro max_server_memory_usage_to_ram_ratio no ClickHouse é 0,9. Para alterar esse valor, adicione o item de configuração max_server_memory_usage_to_ram_ratio e especifique o valor conforme suas necessidades de negócios.

O que fazer se a mensagem de erro "Memory limit (for query) exceeded" aparecer?

  • Causa: O uso de memória excede o limite máximo disponível para uma única consulta.

  • Soluções

    Cenário

    Operação

    Configuração global

    Na aba Configure da página de serviço do ClickHouse no console do E-MapReduce, clique em server-config. Clique em Add Configuration Item e adicione o parâmetro profiles.<YOUR_PROFILE_NAME>.max_memory_usage. Em seguida, garanta que o parâmetro users.<YOUR_USER_NAME>.profile esteja definido como <YOUR_PROFILE_NAME>.

    Nota

    Substitua <YOUR_PROFILE_NAME> e <YOUR_USER_NAME> pelos valores reais. Para obter mais informações sobre esses parâmetros, consulte Controle de acesso e gerenciamento de contas.

    Para o cliente ClickHouse

    Na aba Configure da página de serviço do ClickHouse no console do E-MapReduce, clique em client-config. Clique em Add Configuration Item e adicione o parâmetro max_memory_usage.

    Para uma sessão

    Execute o comando SET max_memory_usage=xxxx. Essa configuração tem efeito durante toda a sessão.

    Para uma consulta

    Adicione a configuração max_memory_usage a uma instrução SQL. A configuração terá efeito apenas na consulta atual.

    Exemplo: SELECT column FROM table SETTINGS max_memory_usage=xxxx.

O que fazer se a mensagem de erro "Memory limit (for user) exceeded" aparecer?

  • Causa: O uso de memória excede o limite máximo disponível para um único usuário.

  • Soluções

    Cenário

    Operação

    Configuração global

    Na aba Configure da página de serviço do ClickHouse no console do E-MapReduce, clique em server-users. Clique em Add Configuration Item e adicione o parâmetro profiles.<YOUR_PROFILE_NAME>.max_memory_usage_for_user. Em seguida, garanta que o parâmetro users.<YOUR_USER_NAME>.profile esteja definido como <YOUR_PROFILE_NAME>.

    Nota

    Substitua <YOUR_PROFILE_NAME> e <YOUR_USER_NAME> pelos valores reais. Para obter mais informações sobre esses parâmetros, consulte Controle de acesso e gerenciamento de contas.

    Para o cliente ClickHouse

    Na aba Configure da página de serviço do ClickHouse no console do E-MapReduce, clique em client-config. Clique em Add Configuration Item e adicione o parâmetro max_memory_usage_for_user.

    Para uma sessão

    Execute o comando SET max_memory_usage_for_user=xxxx. Essa configuração tem efeito durante toda a sessão.

    Para uma consulta

    Adicione a configuração max_memory_usage_for_user a uma instrução SQL. A configuração terá efeito apenas na consulta atual.

    Exemplo: SELECT column FROM table SETTINGS max_memory_usage_for_user=xxxx.

Como os componentes do serviço ClickHouse são distribuídos em um cluster OLAP?

O serviço ClickHouse contém os seguintes componentes: ClickHouseRuntime, ClickHouseServer e ClickHouseKeeper.

  • Em clusters OLAP do EMR V3.X, o componente ClickHouseKeeper não é instalado, o componente ClickHouseRuntime é instalado em todos os tipos de nós e o componente ClickHouseServer é instalado apenas nos nós principais.

  • Em clusters OLAP do EMR V5.X, o componente ClickHouseRuntime é instalado em todos os tipos de nós e o componente ClickHouseServer é instalado apenas nos nós principais. O componente ClickHouseKeeper é instalado no primeiro nó principal ou nos três primeiros nós principais e não suporta expansão horizontal. Por exemplo, se você configurar dois nós principais ao criar um cluster OLAP, o componente ClickHouseKeeper será instalado no primeiro nó principal. Se adicionar mais dois nós principais ao cluster posteriormente, o número de nós com o componente ClickHouseKeeper instalado permanecerá inalterado.

Por que a velocidade de importação de dados diminui gradualmente?

No ClickHouse, a maioria das tabelas está relacionada ao MergeTree, como as tabelas ReplicatedMergeTree e ReplacingMergeTree.

Quando dados são gravados em uma tabela MergeTree, eles são ordenados na memória e depois liberados para o disco, gerando uma parte de dados. As partes no disco são continuamente mescladas por threads em segundo plano, consolidando partes menores em partes maiores. Na fase inicial de importação para uma tabela MergeTree, as threads em segundo plano podem não encontrar partes para mesclar, dedicando todos os recursos ao recebimento e gravação de dados no disco, o que resulta em alta velocidade de importação. Após algum tempo, surgem mais partes passíveis de mesclagem, consumindo parte dos recursos. Quanto maior o volume de dados liberado no disco, mais recursos computacionais são necessários para a mesclagem. Esse consumo aumenta até atingir um equilíbrio entre a importação e a mesclagem de dados, causando a redução na velocidade de importação.

Como atualizar o serviço ClickHouse?

A versão do serviço ClickHouse varia conforme a versão do cluster EMR. Para atualizar o serviço ClickHouse, atualize o cluster EMR.

Por que é necessário definir um cluster lógico no ClickHouse?

No ClickHouse, o termo "cluster" refere-se a um cluster lógico definido na configuração. Execute o comando select * from system.clusters para visualizar os clusters lógicos definidos atualmente.

Cada cluster lógico contém várias máquinas. Configure um cluster lógico para estabelecer relacionamentos entre diferentes máquinas, como relações de sharding e replicação. Também é possível utilizar clusters lógicos distintos para diferentes cenários de negócios.

Por padrão, um cluster lógico contendo todos os nós de um cluster físico EMR ClickHouse já vem configurado.

O que são shards e réplicas no ClickHouse?

No ClickHouse, um nó pode atuar como réplica de um ou mais nós. Os dados das tabelas que utilizam o mecanismo Replicated*MergeTree nesses nós são idênticos.

Um shard consiste em um ou mais nós, onde os nós dentro do mesmo shard funcionam como réplicas uns dos outros.

Como testar o desempenho do ClickHouse?

Geralmente, utilize o Star Schema Benchmark (SSB) para testar o desempenho do ClickHouse. Para obter mais informações, consulte Star Schema Benchmark. Para outros casos de teste, consulte Tutoriais e conjuntos de dados de exemplo e clickhouse-benchmark.

É possível alterar o número de shards e réplicas após a criação de um cluster?

Suponha que, ao criar um cluster, o número de shards seja A e o de réplicas seja B. Posteriormente, você deseja alterar esses valores para C shards e D réplicas. O ClickHouse permite essa modificação. Para ajustar essas quantidades, siga estes passos: Na aba Configure da página de serviço do ClickHouse no console do EMR, clique em server-metrika. Localize o parâmetro clickhouse_remote_servers e altere os números de shards e réplicas nas configurações desse parâmetro.

No entanto, para evitar erros, recomenda-se não alterar diretamente o número de shards e réplicas. Se já existirem dados no cluster, tais alterações podem causar inconsistências. Uma abordagem mais segura é adicionar um novo cluster lógico e configurar as quantidades de shards e réplicas conforme suas necessidades, preservando assim as configurações originais.

Quais configurações devo definir ao usar o HDFS no EMR ClickHouse?

Para obter mais informações, consulte HDFS.

Quais são as diferenças entre o EMR ClickHouse e o ApsaraDB for ClickHouse?

  • O ID do produto de um cluster E-MapReduce ClickHouse começa com c-, como c-3c8697f91408****. Já o ID do produto de um cluster ApsaraDB for ClickHouse inicia com cc-, como cc-bp16qwvp7hy8i****.

  • O EMR ClickHouse é semigerenciado, permitindo login em instâncias do Elastic Compute Service (ECS) para operações de O&M. O ApsaraDB for ClickHouse é totalmente gerenciado, não permitindo login em instâncias ECS para tarefas de O&M.

O ClickHouse pode consultar tabelas Hive que usam o DLF para armazenamento de metadados?

Não, o ClickHouse não suporta consultas a tabelas Hive que utilizam o Data Lake Formation (DLF) para armazenamento de metadados. Ele consulta apenas tabelas Hive que usam MySQL ou ApsaraDB RDS para essa finalidade. Portanto, evite usar o ClickHouse para consultar tabelas Hive.

Veja abaixo algumas sugestões baseadas nas suas necessidades de negócios:

  • Para importar dados do Hive para o ClickHouse, utilize o Apache Spark ou o Apache Seatunnel.

  • Para analisar dados do Hive, opte por mecanismos como StarRocks, Trino ou Impala.

Como reduzir o volume de dados na tabela system.zookeeper_log?

A tabela system.zookeeper_log no ClickHouse registra logs detalhados das interações entre o ClickHouse e o ZooKeeper. Essa tabela é independente dos logs de serviço do ZooKeeper. Ajustar o nível de log do serviço ZooKeeper não afeta o volume de dados na tabela system.zookeeper_log.

Causa do problema

O volume de dados na tabela system.zookeeper_log pode crescer rapidamente devido aos seguintes motivos:

  • Nível de log do ZooKeeper definido como INFO: No nível INFO, o ClickHouse registra todos os detalhes de interação com o ZooKeeper, gerando um grande volume de dados de log.

  • Ausência de estratégia de limpeza automática: Sem uma política de TTL configurada para a tabela, os dados de log acumulam-se indefinidamente.

  • Operações de metadados de alta frequência: Operações como criação ou exclusão frequente de tabelas, sincronização de réplicas e dimensionamento de cluster geram muitos logs de interação com o ZooKeeper.

Solução

Defina uma política de TTL (Time to Live) para a tabela system.zookeeper_log para limpar automaticamente dados antigos.

Importante

Não adicione o parâmetro zookeeper_log.ttl nos itens de configuração server-config no console do EMR. Em vez disso, use uma instrução SQL para definir a política de TTL.

Execute a seguinte instrução SQL para definir uma política de TTL que exclui automaticamente dados de log com mais de 7 dias:

ALTER TABLE system.zookeeper_log MODIFY TTL event_date + INTERVAL 7 DAY;

Ajuste o período de retenção conforme suas necessidades de negócios. Por exemplo, para reter dados por 14 dias:

ALTER TABLE system.zookeeper_log MODIFY TTL event_date + INTERVAL 14 DAY;