Todos los productos
Search
Centro de documentos

E-MapReduce:FAQ

Última actualización: Sep 04, 2026

Este tema proporciona respuestas a algunas preguntas frecuentes sobre ClickHouse.

¿Cómo creo un usuario de ClickHouse?

Puede crear un usuario de ClickHouse desde la consola de E-MapReduce (EMR) o mediante el cliente de ClickHouse.

  • Consola de EMR

    En la pestaña Configure de la página del servicio ClickHouse en la consola de E-MapReduce, haga clic en la pestaña server-users. Agregue un elemento de configuración. Establezca el parámetro como users.<YourUserName>.password, users.<YourUserName>.password_sha256_hex o users.<YourUserName>.password_double_sha1_hex, y especifique un valor personalizado. Guarde el elemento de configuración y reinicie el servicio para crear el usuario.

    Reemplace <YourUserName> con el nombre del usuario de ClickHouse que desea crear.

    Nota

    Para obtener más información, consulte Manage configuration items para agregar un parámetro de componente y Restart a service para reiniciar un servicio.

  • Cliente de ClickHouse

    1. En la pestaña Configure de la página del servicio ClickHouse en la consola de E-MapReduce, haga clic en la pestaña server-users. Agregue un elemento de configuración con el parámetro establecido en users.default.access_management y el valor establecido en 1. Guarde la configuración y reinicie el servicio. A continuación, conéctese al clúster de ClickHouse como usuario predeterminado.

    2. Inicie sesión en el clúster de ClickHouse de EMR mediante SSH. Para obtener más información, consulte Log on to a cluster.

    3. Ejecute el siguiente comando para iniciar el cliente de ClickHouse:

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

      Este ejemplo inicia sesión en el nodo core-1-1. Si tiene varios nodos core, puede iniciar sesión en cualquiera de ellos.

    4. Ejecute la siguiente sentencia para crear un usuario de ClickHouse:

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

      En este ejemplo, el nombre del usuario es user_test y la contraseña es 123456. Puede especificar el nombre y la contraseña según sus requisitos empresariales.

      Sintaxis utilizada para crear un usuario de 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. Ejecute la siguiente sentencia para consultar los usuarios existentes:

      SHOW USERS;

      Se devuelve la información sobre los usuarios existentes.

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

¿Qué hago si se produce una pérdida de datos?

  • Descripción del problema: Se escriben un total de A entradas de datos en ClickHouse, pero solo se leen B entradas. B es menor que A.

  • Causa: En la mayoría de los casos, los datos no faltan en ClickHouse. Sin embargo, se almacenan como mínimo dos réplicas en cada shard. El motor *MergeTree se utiliza para las tablas locales. Si usa una tabla distribuida para leer datos, la cantidad de entradas de datos leídas puede ser menor que la cantidad de entradas escritas.

    Los datos se distribuyen a cada nodo independientemente de si se escriben mediante una tabla distribuida o directamente en tablas locales. Cuando lee datos mediante una tabla distribuida, cada shard usa una conexión de forma predeterminada. En este caso, el número de conexiones es menor que el número de nodos. Como resultado, no se pueden leer los datos de algunos nodos. Sentencias de ejemplo:

    CREATE TABLE db.table_local
    (
      ...
    )
    Engine = MergeTree()
    
    CREATE TABLE db.table_distributed
    (
      ...
    )
    Engine = Distributed(cluster_emr, db, table_local, rand());
  • Soluciones

    Solución

    Operación

    (Recomendada) Solución 1

    Elimine la tabla db.table_local y cree una tabla replicada. Utilice la tabla replicada creada como tabla local.

    (No recomendada) Solución 2

    En la pestaña Configure de la página del servicio ClickHouse en la consola de E-MapReduce, haga clic en la pestaña server-users. Haga clic en Add Configuration Item y agregue el parámetro profiles.<YOUR_PROFILE_NAME>.max_parallel_replicas. Establezca su valor como mínimo igual al número de réplicas en cada shard. Luego, asegúrese de que el parámetro users.<YOUR_USER_NAME>.profile esté establecido en <YOUR_PROFILE_NAME>.

    Nota

    Reemplace <YOUR_PROFILE_NAME> y <YOUR_USER_NAME> con sus nombres reales. Para obtener más información sobre estos parámetros, consulte Access Control and Account Management.

¿Qué hago si aparece el mensaje de error "Memory limit (for total) exceeded"?

  • Causa: El uso de memoria excede la memoria total disponible para el servidor.

  • Solución: En la pestaña Configure de la página del servicio ClickHouse en la consola de E-MapReduce, haga clic en la pestaña server-config. Haga clic en Add Configuration Item y agregue el parámetro max_server_memory_usage. El valor máximo para este parámetro es Physical memory of the machine * max_server_memory_usage_to_ram_ratio.

    Nota

    El valor predeterminado del parámetro max_server_memory_usage_to_ram_ratio en ClickHouse es 0.9. Para cambiar el valor de este parámetro, agregue el elemento de configuración max_server_memory_usage_to_ram_ratio y especifique el valor según sus requisitos empresariales.

¿Qué hago si aparece el mensaje de error "Memory limit (for query) exceeded"?

  • Causa: El uso de memoria excede la memoria máxima disponible para una sola consulta.

  • Soluciones

    Escenario

    Operación

    Configuración global

    En la pestaña Configure de la página del servicio ClickHouse en la consola de E-MapReduce, haga clic en la pestaña server-config. Haga clic en Add Configuration Item y agregue el parámetro profiles.<YOUR_PROFILE_NAME>.max_memory_usage. Luego, asegúrese de que el parámetro users.<YOUR_USER_NAME>.profile esté establecido en <YOUR_PROFILE_NAME>.

    Nota

    Reemplace <YOUR_PROFILE_NAME> y <YOUR_USER_NAME> con sus nombres reales. Para obtener más información sobre estos parámetros, consulte Access Control and Account Management.

    Para el cliente de ClickHouse

    En la pestaña Configure de la página del servicio ClickHouse en la consola de E-MapReduce, haga clic en la pestaña client-config. Haga clic en Add Configuration Item y agregue el parámetro max_memory_usage.

    Para una sesión

    Ejecute el comando SET max_memory_usage=xxxx. Esta configuración surte efecto durante la duración de la sesión.

    Para una consulta

    Agregue la configuración de max_memory_usage a una sentencia SQL. La configuración surte efecto solo para la consulta actual.

    Ejemplo: SELECT column FROM table SETTINGS max_memory_usage=xxxx.

¿Qué hago si aparece el mensaje de error "Memory limit (for user) exceeded"?

  • Causa: El uso de memoria excede la memoria máxima disponible para un solo usuario.

  • Soluciones

    Escenario

    Operación

    Configuración global

    En la pestaña Configure de la página del servicio ClickHouse en la consola de E-MapReduce, haga clic en la pestaña server-users. Haga clic en Add Configuration Item y agregue el parámetro profiles.<YOUR_PROFILE_NAME>.max_memory_usage_for_user. Luego, asegúrese de que el parámetro users.<YOUR_USER_NAME>.profile esté establecido en <YOUR_PROFILE_NAME>.

    Nota

    Reemplace <YOUR_PROFILE_NAME> y <YOUR_USER_NAME> con sus nombres reales. Para obtener más información sobre estos parámetros, consulte Access Control and Account Management.

    Para el cliente de ClickHouse

    En la pestaña Configure de la página del servicio ClickHouse en la consola de E-MapReduce, haga clic en la pestaña client-config. Haga clic en Add Configuration Item y agregue el parámetro max_memory_usage_for_user.

    Para una sesión

    Ejecute el comando SET max_memory_usage_for_user=xxxx. Esta configuración surte efecto durante la duración de la sesión.

    Para una consulta

    Agregue la configuración de max_memory_usage_for_user a una sentencia SQL. La configuración surte efecto solo para la consulta actual.

    Ejemplo: SELECT column FROM table SETTINGS max_memory_usage_for_user=xxxx.

¿Cómo se distribuyen los componentes del servicio ClickHouse en un clúster OLAP?

El servicio ClickHouse contiene los siguientes componentes: ClickHouseRuntime, ClickHouseServer y ClickHouseKeeper.

  • En los clústeres OLAP de EMR V3.X, el componente ClickHouseKeeper no está instalado, el componente ClickHouseRuntime se instala en todos los tipos de nodos y el componente ClickHouseServer se instala solo en los nodos core.

  • En los clústeres OLAP de EMR V5.X, el componente ClickHouseRuntime se instala en todos los tipos de nodos y el componente ClickHouseServer se instala solo en los nodos core. El componente ClickHouseKeeper se instala en el primer nodo core o en los tres primeros nodos core y no admite el escalado horizontal. Por ejemplo, si configura dos nodos core al crear un clúster OLAP, el componente ClickHouseKeeper se instala en el primer nodo core. Si agrega dos nodos core más al clúster, la cantidad de nodos core donde se instala el componente ClickHouseKeeper permanece sin cambios.

¿Por qué disminuye gradualmente la velocidad de importación de datos?

En ClickHouse, la mayoría de las tablas están relacionadas con MergeTree, como las tablas ReplicatedMergeTree y ReplacingMergeTree.

Cuando se escriben datos en una tabla MergeTree, estos se ordenan en la memoria y luego se vacían al disco. En este caso, se genera una parte de datos en el disco. Las partes de datos en el disco se fusionan continuamente mediante hilos en segundo plano. De esta manera, las partes pequeñas de datos se combinan en una parte grande. En la fase inicial de importación de datos a una tabla MergeTree, es posible que los hilos en segundo plano no encuentren partes de datos para fusionar. Todos los recursos se utilizan para recibir datos y luego escribirlos en el disco. Por lo tanto, la velocidad de importación de datos es alta. Después de un tiempo, los hilos en segundo plano pueden fusionar más partes de datos. Como resultado, algunos recursos se destinan a esta tarea. Cuantos más datos se escriban en el disco, más recursos de cómputo se requieren para fusionar las partes. La cantidad de recursos utilizados para fusionar datos aumenta hasta alcanzar un equilibrio entre la importación y la fusión. En consecuencia, la velocidad de importación de datos disminuye.

¿Cómo actualizo el servicio ClickHouse?

La versión del servicio ClickHouse varía según la versión del clúster de EMR. Si desea actualizar el servicio ClickHouse, debe actualizar el clúster de EMR.

¿Por qué necesito definir un clúster lógico en ClickHouse?

En ClickHouse, el término "clúster" se refiere a un clúster lógico definido en la configuración. Puede ejecutar el comando select * from system.clusters para ver los clústeres lógicos definidos actualmente.

Cada clúster lógico contiene varias máquinas. Puede configurar un clúster lógico para establecer las relaciones entre diferentes máquinas, como relaciones de sharding y replicación. También puede usar distintos clústeres lógicos en diferentes escenarios empresariales.

De forma predeterminada, se configura un clúster lógico que contiene todos los nodos de un clúster físico de EMR ClickHouse.

¿Qué son los shards y las réplicas en ClickHouse?

En ClickHouse, un nodo puede ser réplica de uno o más nodos. Los datos de las tablas que usan el motor Replicated*MergeTree en los nodos son idénticos.

En ClickHouse, un shard consta de uno o más nodos. Los nodos dentro del shard son réplicas entre sí.

¿Cómo pruebo el rendimiento de ClickHouse?

En la mayoría de los casos, puede utilizar Star Schema Benchmark (SSB) para probar el rendimiento de ClickHouse. Para obtener más información, consulte Star Schema Benchmark. Para obtener información sobre otros casos de prueba, consulte Tutoriales y conjuntos de datos de ejemplo y clickhouse-benchmark.

¿Puedo cambiar el número de shards y réplicas después de crear un clúster?

Por ejemplo, cuando crea un clúster, el número de shards es A y el número de réplicas es B. Una vez creado el clúster, desea cambiar el número de shards a C y el número de réplicas a D. ClickHouse permite modificar estas cantidades. Para hacerlo, realice las siguientes operaciones: En la pestaña Configure de la página del servicio ClickHouse en la consola de EMR, haga clic en la pestaña server-metrika. En dicha pestaña, busque el parámetro clickhouse_remote_servers y modifique el número de shards y réplicas en la configuración del parámetro.

Sin embargo, para evitar errores, se recomienda no cambiar directamente el número de shards y réplicas. Por ejemplo, si ya existen datos en el clúster, los cambios podrían provocar errores en los datos. Se recomienda agregar un clúster lógico y configurar el número de shards y réplicas según sus requisitos empresariales. De esta manera, conserva las configuraciones originales de shards y réplicas.

¿Qué configuraciones debo establecer al usar HDFS en EMR ClickHouse?

Para obtener más información, consulte HDFS.

¿Cuáles son las diferencias entre EMR ClickHouse y ApsaraDB for ClickHouse?

  • El ID de producto de un clúster de E-MapReduce ClickHouse comienza con c-, por ejemplo, c-3c8697f91408****. El ID de producto de un clúster de ApsaraDB for ClickHouse comienza con cc-, por ejemplo, cc-bp16qwvp7hy8i****.

  • EMR ClickHouse es semigestionado. Puede iniciar sesión en una instancia de Elastic Compute Service (ECS) para realizar operaciones de O&M. ApsaraDB for ClickHouse es totalmente gestionado. No puede iniciar sesión en una instancia de ECS para realizar operaciones de O&M.

¿Se puede usar ClickHouse para consultar tablas de Hive que usan DLF para el almacenamiento de metadatos?

No, ClickHouse no se puede utilizar para consultar tablas de Hive que usan Data Lake Formation (DLF) para el almacenamiento de metadatos. ClickHouse solo sirve para consultar tablas de Hive que usan MySQL o ApsaraDB RDS para dicho almacenamiento. Por lo tanto, se recomienda no usar ClickHouse para consultar tablas de Hive.

A continuación se presentan sugerencias basadas en sus requisitos empresariales:

  • Si desea importar datos de Hive a ClickHouse, se recomienda utilizar Apache Spark o Apache Seatunnel.

  • Si desea analizar datos de Hive, se recomienda usar un motor como StarRocks, Trino o Impala.

¿Cómo reduzco el volumen de datos en la tabla system.zookeeper_log?

La tabla system.zookeeper_log en ClickHouse registra detalles de las interacciones entre ClickHouse y ZooKeeper. Esta tabla no está relacionada con los registros del servicio ZooKeeper. Ajustar el nivel de registro del servicio ZooKeeper no afecta el volumen de datos en la tabla system.zookeeper_log.

Causa del problema

El volumen de datos en la tabla system.zookeeper_log puede crecer rápidamente debido a las siguientes razones:

  • Nivel de registro de ZooKeeper establecido en INFO: En el nivel INFO, ClickHouse registra todos los detalles de interacción con ZooKeeper, lo que genera una gran cantidad de datos de registro.

  • Falta de estrategia de limpieza automática: Si no se configura una directiva de TTL para la tabla, los datos de registro se acumulan indefinidamente.

  • Operaciones de metadatos de alta frecuencia: Operaciones como la creación o eliminación frecuente de tablas, la sincronización de réplicas y el escalado del clúster generan un gran número de registros de interacción con ZooKeeper.

Solución

Establezca una directiva de TTL (Time to Live) para la tabla system.zookeeper_log para limpiar automáticamente los datos antiguos.

Importante

No agregue el parámetro zookeeper_log.ttl en los elementos de configuración de server-config en la consola de EMR. Utilice una sentencia SQL para establecer la directiva de TTL.

Ejecute la siguiente sentencia SQL para establecer una directiva de TTL que elimine automáticamente los datos de registro con más de 7 días de antigüedad:

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

Ajuste el periodo de retención según sus requisitos empresariales. Por ejemplo, para conservar los datos durante 14 días:

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