すべてのプロダクト
Search
ドキュメントセンター

E-MapReduce:よくある質問

最終更新日:Jun 21, 2026

本トピックでは、ClickHouse に関するよくあるご質問とその回答を紹介します。

ClickHouse ユーザーの作成方法

E-MapReduce (EMR) コンソールで、または ClickHouse クライアントを使用して ClickHouse ユーザーを作成できます。

  • EMR コンソール

    EMR コンソールの ClickHouse サービスページで Configure タブの [server-users] タブをクリックします。設定項目を追加します。パラメーターを [users.<YourUserName>.password]、[users.<YourUserName>.password_sha256_hex]、または [users.<YourUserName>.password_double_sha1_hex] のいずれかに設定し、カスタム値を指定します。設定項目を保存してサービスを再起動すると、ユーザーが作成されます。

    <YourUserName> を、作成する ClickHouse ユーザーの名前に置き換えます。

    説明

    コンポーネントパラメーターの追加方法については「設定項目の管理」を、サービスの再起動方法については「サービスの再起動」をご参照ください。

  • ClickHouse クライアント

    1. EMR コンソールの ClickHouse サービスページで Configure タブの [server-users] タブをクリックします。パラメーターを users.default.access_management に、値を [1] に設定した項目を追加します。設定を保存し、サービスを再起動します。その後、デフォルトユーザーとして ClickHouse クラスターに接続します。

    2. SSH モードで EMR ClickHouse クラスターにログインします。詳細については、「クラスターへのログイン」をご参照ください。

    3. 次のコマンドを実行して、ClickHouse クライアントを起動します。

      clickhouse-client -h core-1-1 -m
      説明

      この例では、core-1-1 ノードにログインします。複数のコアノードがある場合は、そのいずれか 1 つにログインできます。

    4. 次のステートメントを実行して ClickHouse ユーザーを作成します。

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

      この例では、ユーザー名は user_test、パスワードは 123456 です。ビジネス要件に基づいて名前とパスワードを指定できます。

      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. 次のステートメントを実行して既存のユーザーをクエリします。

      SHOW USERS;

      既存のユーザーに関する情報が表示されます。

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

データ損失への対処

  • 問題の説明:合計 A 件のデータエントリが ClickHouse に書き込まれましたが、読み取られたデータエントリは B 件のみです。B は A より小さいです。

  • 原因:ほとんどの場合、ClickHouse でデータが欠落することはありません。ただし、各シャードには少なくとも 2 つのレプリカが保存されます。ローカルテーブルには *MergeTree エンジンが使用されます。分散テーブルを使用してデータを読み取る場合、読み取られるデータエントリの数が書き込まれるデータエントリの数より少なくなることがあります。

    分散テーブルを使用して書き込むか、ローカルテーブルに直接書き込むかにかかわらず、データは各ノードに分散されます。分散テーブルを使用してデータを読み取る場合、デフォルトで各シャードは 1 つの接続を使用します。この場合、接続数はノード数より少なくなります。その結果、一部のノードのデータが読み取れなくなります。サンプルステートメント:

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

    解決策

    操作

    (推奨) 解決策 1

    db.table_local テーブルを削除し、レプリケーションテーブルを作成します。作成したレプリケーションテーブルをローカルテーブルとして使用します。

    (非推奨) 解決策 2

    EMR コンソールの ClickHouse サービスページで Configure タブの [server-users] タブをクリックします。Add Configuration Item をクリックし、profiles.<YOUR_PROFILE_NAME>.max_parallel_replicas パラメーターを追加します。その値を少なくとも各シャードのレプリカ数に設定します。次に、users.<YOUR_USER_NAME>.profile パラメーターが <YOUR_PROFILE_NAME> に設定されていることを確認します。

    説明

    <YOUR_PROFILE_NAME><YOUR_USER_NAME> を実際の名前で置き換えてください。これらのパラメーターの詳細については、「アクセス制御とアカウント管理」をご参照ください。

「Memory limit (for total) exceeded」 エラーへの対処

  • 原因:メモリ使用量が、サーバーで利用可能な合計メモリを超えています。

  • 解決策:EMR コンソールの ClickHouse サービスページで Configure タブの [server-config] タブをクリックします。Add Configuration Item をクリックし、max_server_memory_usage パラメーターを追加します。このパラメーターの最大値は、マシンの物理メモリ * max_server_memory_usage_to_ram_ratio です。

    説明

    ClickHouse の max_server_memory_usage_to_ram_ratio パラメーターのデフォルト値は 0.9 です。このパラメーターの値を変更するには、max_server_memory_usage_to_ram_ratio 設定項目を追加し、ビジネス要件に基づいて値を指定します。

「Memory limit (for query) exceeded」 エラーへの対処

  • 原因:メモリ使用量が、単一クエリで利用可能な最大メモリを超えています。

  • 解決策

    シナリオ

    操作

    グローバル設定

    EMR コンソールの ClickHouse サービスページで Configure タブの [server-config] タブをクリックします。Add Configuration Item をクリックし、profiles.<YOUR_PROFILE_NAME>.max_memory_usage パラメーターを追加します。次に、users.<YOUR_USER_NAME>.profile パラメーターが <YOUR_PROFILE_NAME> に設定されていることを確認します。

    説明

    <YOUR_PROFILE_NAME><YOUR_USER_NAME> を実際の名前で置き換えてください。これらのパラメーターの詳細については、「アクセス制御とアカウント管理」をご参照ください。

    ClickHouse クライアントの場合

    EMR コンソールの ClickHouse サービスページで Configure タブの [client-config] タブをクリックします。Add Configuration Item をクリックし、max_memory_usage パラメーターを追加します。

    セッションの場合

    SET max_memory_usage=xxxx コマンドを実行します。この設定は、セッションの期間中有効です。

    クエリの場合

    SQL ステートメントに max_memory_usage の設定を追加します。この設定は、現在のクエリに対してのみ有効です。

    例:SELECT column FROM table SETTINGS max_memory_usage=xxxx

「Memory limit (for user) exceeded」 エラーへの対処

  • 原因:メモリ使用量が、単一ユーザーで利用可能な最大メモリを超えています。

  • 解決策

    シナリオ

    操作

    グローバル設定

    EMR コンソールの ClickHouse サービスページで Configure タबの [server-users] タブをクリックします。Add Configuration Item をクリックし、profiles.<YOUR_PROFILE_NAME>.max_memory_usage_for_user パラメーターを追加します。次に、users.<YOUR_USER_NAME>.profile パラメーターが <YOUR_PROFILE_NAME> に設定されていることを確認します。

    説明

    <YOUR_PROFILE_NAME><YOUR_USER_NAME> を実際の名前で置き換えてください。これらのパラメーターの詳細については、「アクセス制御とアカウント管理」をご参照ください。

    ClickHouse クライアントの場合

    EMR コンソールの ClickHouse サービスページで Configure タブの [client-config] タブをクリックします。Add Configuration Item をクリックし、max_memory_usage_for_user パラメーターを追加します。

    セッションの場合

    SET max_memory_usage_for_user=xxxx コマンドを実行します。この設定は、セッションの期間中有効です。

    クエリの場合

    SQL ステートメントに max_memory_usage_for_user の設定を追加します。この設定は、現在のクエリに対してのみ有効です。

    例:SELECT column FROM table SETTINGS max_memory_usage_for_user=xxxx

ClickHouse サービスのコンポーネントは、OLAP クラスターにどのように分散されていますか?

ClickHouse サービスには、ClickHouseRuntime、ClickHouseServer、ClickHouseKeeper のコンポーネントが含まれています。

  • EMR V3.X の OLAP クラスターでは、ClickHouseKeeper コンポーネントはインストールされず、ClickHouseRuntime コンポーネントはすべてのタイプのノードにインストールされ、ClickHouseServer コンポーネントはコアノードにのみインストールされます。

  • EMR V5.X の OLAP クラスターでは、ClickHouseRuntime コンポーネントはすべてのタイプのノードにインストールされ、ClickHouseServer コンポーネントはコアノードにのみインストールされます。ClickHouseKeeper コンポーネントは、最初のコアノードまたは最初の 3 つのコアノードにインストールされ、スケールアウトはサポートしていません。たとえば、OLAP クラスターを作成するときに 2 つのコアノードを設定した場合、ClickHouseKeeper コンポーネントは最初のコアノードにインストールされます。クラスターにさらに 2 つのコアノードを追加しても、ClickHouseKeeper コンポーネントがインストールされているコアノードの数は変わりません。

データインポート速度が徐々に低下する理由

ClickHouse では、ほとんどのテーブルは、ReplicatedMergeTree や ReplacingMergeTree テーブルなど、MergeTree 関連のテーブルです。

MergeTree テーブルにデータが書き込まれると、データはメモリ内でソートされてからディスクにフラッシュされます。この場合、ディスク上にデータパートが生成されます。ディスク上のデータパートは、バックグラウンドスレッドによって継続的にマージされます。これにより、小さなデータパートが大きなデータパートにマージされます。MergeTree テーブルへのデータインポートの初期段階では、バックグラウンドスレッドはマージできるデータパートを見つけられない場合があります。すべてのリソースがデータの受信に使用され、その後データがディスクにフラッシュされます。したがって、データインポート速度は高速です。しばらくすると、バックグラウンドスレッドでマージできるデータパートが増えます。その結果、一部のリソースがデータパートのマージに使用されるようになります。ディスクにフラッシュされるデータが多いほど、データパートをマージするためにより多くのコンピューティングリソースが必要になります。データパートのマージに使用されるリソースの量は、データインポートとデータマージの間のバランスが取れるまで増加します。その結果、データインポート速度が低下します。

ClickHouse サービスのアップグレード方法

ClickHouse サービスのバージョンは、EMR クラスターのバージョンによって異なります。ClickHouse サービスをアップグレードする場合は、EMR クラスターをアップグレードする必要があります。

ClickHouse で論理クラスターを定義する理由

ClickHouse では、「クラスター」という用語は、設定で定義されている論理クラスターを指します。select * from system.clusters コマンドを実行して、現在定義されている論理クラスターを表示できます。

各論理クラスターには複数のマシンが含まれています。論理クラスターを設定して、シャーディングやレプリケーションの関係など、異なるマシン間の関係を定義できます。また、さまざまなビジネスシナリオで異なる論理クラスターを使用することもできます。

デフォルトでは、物理的な EMR ClickHouse クラスター内のすべてのノードを含む論理クラスターが設定されています。

ClickHouse におけるシャードとレプリカ

ClickHouse では、ノードは 1 つ以上のノードのレプリカになることができます。ノード上の Replicated*MergeTree エンジンを使用するテーブルのデータは同じです。

ClickHouse では、シャードは 1 つ以上のノードで構成されます。シャード内のノードは互いにレプリカです。

ClickHouse のパフォーマンスのテスト方法

ほとんどの場合、Star Schema Benchmark (SSB) を使用して ClickHouse のパフォーマンスをテストできます。詳細については、「Star Schema Benchmark」をご参照ください。その他のテストケースについては、「Tutorials and Example Datasets」および「clickhouse-benchmark」をご参照ください。

クラスター作成後のシャードとレプリカの数の変更

たとえば、クラスターを作成するとき、シャードの数が A でレプリカの数が B であるとします。クラスターが作成された後、シャードの数を C に、レプリカの数を D に変更したいとします。ClickHouse では、シャードとレプリカの数を変更できます。シャードとレプリカの数を変更するには、EMR コンソールの ClickHouse サービスページで [Configure] タブの [server-metrika] タブをクリックします。[server-metrika] タブで、clickhouse_remote_servers パラメーターを見つけ、パラメーターの設定内容でシャードの数とレプリカの数を変更します。

ただし、エラーを防ぐために、シャードとレプリカの数を直接変更しないことを推奨します。たとえば、クラスターにデータが既に存在する場合、変更によってデータエラーが発生する可能性があります。論理クラスターを追加し、ビジネス要件に基づいてシャードとレプリカの数を設定することを推奨します。これにより、シャードとレプリカの元の設定を保持できます。

EMR ClickHouse で HDFS を使用する場合の設定

詳細については、「HDFS」をご参照ください。

EMR ClickHouse と ApsaraDB for ClickHouse の違い

  • E-MapReduce ClickHouse クラスターのプロダクト ID は c- で始まります (例:c-3c8697f91408****)。ApsaraDB for ClickHouse クラスターのクラスター ID は cc- で始まります (例:cc-bp16qwvp7hy8i****)。

  • EMR ClickHouse はセミマネージドです。Elastic Compute Service (ECS) インスタンスにログインして運用保守オペレーションを実行できます。ApsaraDB for ClickHouse はフルマネージドです。ECS インスタンスにログインして運用保守オペレーションを実行することはできません。

DLF をメタデータストレージとして使用する Hive テーブルのクエリ

いいえ、ClickHouse を使用して、メタデータストレージに Data Lake Formation (DLF) を使用する Hive テーブルをクエリすることはできません。ClickHouse は、メタデータストレージに MySQL または ApsaraDB RDS を使用する Hive テーブルのみをクエリできます。そのため、ClickHouse を使用した Hive テーブルのクエリは推奨されません。

ビジネス要件に応じて、以下の方法を推奨します。

  • Hive から ClickHouse にデータをインポートする場合は、Apache Spark または Apache Seatunnel の使用を推奨します。

  • Hive データを分析する場合は、StarRocks、Trino、Impala などのエンジンの使用を推奨します。

system.zookeeper_log テーブルのデータ量の削減方法

ClickHouse の system.zookeeper_log テーブルは、ClickHouse と ZooKeeper との間のやり取りの詳細なログを記録します。このテーブルは ZooKeeper サービスのログとは無関係です。ZooKeeper サービスのログレベルを調整しても、system.zookeeper_log テーブルのデータ量には影響しません。

問題の原因

system.zookeeper_log テーブルのデータ量は、次の理由により急速に増加する可能性があります。

  • ZooKeeper のログレベルが INFO に設定されている:INFO レベルでは、ClickHouse は ZooKeeper とのすべてのやり取りの詳細を記録するため、大量のログデータが生成されます。

  • 自動クリーンアップ戦略がない:テーブルに TTL ポリシーが設定されていない場合、ログデータは無期限に蓄積されます。

  • 高頻度のメタデータ操作:頻繁なテーブルの作成や削除、レプリカの同期、クラスターのスケーリングなどの操作は、多数の ZooKeeper とのやり取りのログを生成します。

ソリューション

system.zookeeper_log テーブルに TTL (Time to Live) ポリシーを設定して、古いデータを自動的にクリーンアップします。

重要

zookeeper_log.ttl パラメーターは、EMR コンソールの [server-config] 設定項目には追加せず、代わりに SQL ステートメントを使用して TTL ポリシーを設定してください。

次の SQL ステートメントを実行して、7 日より古いログデータを自動的に削除する TTL ポリシーを設定します。

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

ビジネス要件に基づいて保持期間を調整します。たとえば、データを 14 日間保持する場合:

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