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

E-MapReduce:よくある質問

最終更新日:Mar 27, 2026

このドキュメントでは、E-MapReduce (EMR) の ClickHouse についてよくある質問に回答します。

ClickHouse ユーザーの作成方法

EMR コンソールまたは clickhouse-client CLI を使用して、ClickHouse ユーザーを作成します。

EMR コンソール

  1. EMR コンソールで、ClickHouse サービスページに移動し、[設定] タブをクリックします。

  2. [server-users] タブをクリックし、[設定項目の追加] をクリックします。

  3. 以下のいずれかのキーで設定項目を追加し、その値をパスワードに設定します。<YourUserName> を作成するユーザー名に置き換えます。

    キー 認証方法
    users.<YourUserName>.password プレーンテキストパスワード
    users.<YourUserName>.password_sha256_hex SHA-256 ハッシュ
    users.<YourUserName>.password_double_sha1_hex Double SHA-1 ハッシュ
  4. 設定を保存し、ClickHouse サービスを再起動します。

詳細については、「サービスのパラメーターを管理する」および「サービスを再起動する」をご参照ください。

clickhouse-client CLI

  1. デフォルトユーザーアカウントのアクセス管理を有効化します。EMR コンソールで、[構成] > [server-users] > [構成項目の追加] に移動し、値 1users.default.access_management を追加します。構成を保存して、ClickHouse サービスを再起動します。

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

  3. ClickHouse クライアントを起動します。

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

    core-1-1 を、ログインしたコアノードの名前に置き換えます。

  4. ユーザーを作成します。

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

    user_test をユーザー名に、123456 をパスワードに置き換えます。CREATE USER の完全な構文は次のとおりです。

    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;

    出力には、作成したユーザーを含むすべての既存ユーザーが一覧表示されます。

データ損失が発生した場合の対処方法

症状: ClickHouse に A 行を書き込みましたが、読み取れる行が A 行未満です。

原因: データが失われたわけではなく、分散テーブルの読み取りルーティングの問題である可能性が高いです。デフォルトでは、分散テーブルはシャードごとに1つの接続を使用します。シャードに複数のレプリカがある場合、シャードごとに1つのノードのみがクエリされるため、他のノードのデータは返されません。

データは、分散テーブルを使用して書き込まれるか、ローカルテーブルに直接書き込まれるかに関わらず、各ノードに分散されます。例:

CREATE TABLE db.table_local (...) Engine = MergeTree()

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

ソリューション:

ソリューション 操作 注意事項
(推奨)ローカルテーブルをレプリケートされたテーブルとして再作成する db.table_local を削除し、ReplicatedMergeTree エンジンを使用して再作成します。 すべてのレプリカが同期された状態を維持でき、シャード内の任意のノードがデータの完全なコピーを提供できます。
(非推奨)並列レプリカ数を増やす EMR コンソールで、[設定] > [server-users] > [設定項目の追加] に進み、profiles.<your_profile_name>.max_parallel_replicas を、シャードあたりのレプリカ数以上となる値で追加します。users.<your_clickhouse-client_name>.profile<your_profile_name> と一致していることを確認してください。 読み取りの並列性は向上しますが、根本的なデータ分散の問題は解決しません。詳細については、「ユーザー権限の設定」をご参照ください。

「Memory limit (for total) exceeded」エラーが発生した場合の対処方法

原因: サーバーの合計メモリ使用量が、max_server_memory_usage で設定された制限を超過しました。上限は次のように計算されます。

max_server_memory_usage = Physical server memory x max_server_memory_usage_to_ram_ratio

max_server_memory_usage_to_ram_ratio のデフォルト値は 0.9 です。

解決策:EMR コンソールで、[設定] > [server-config] > [設定項目の追加] に移動し、max_server_memory_usage 設定項目により高い値を指定します。比率自体を変更するには、max_server_memory_usage_to_ram_ratio 設定項目を追加します。

「Memory limit (for query) exceeded」エラーが発生した場合の対処方法

原因: 単一クエリがクエリごとのメモリ制限 (max_memory_usage) を超過しました。

ソリューション: 状況に合わせて max_memory_usage を構成します。

スコープ 設定方法
グローバル (すべてのクエリ) EMR コンソールで、[設定] > [server-config] > [設定項目の追加] に移動し、profiles.<your_profile_name>.max_memory_usage を追加します。users.<your_clickhouse-client_name>.profile<your_profile_name> と一致することを確認してください。
ClickHouse クライアント EMR コンソールで、[設定] > [client-config] > [設定項目の追加] に移動し、max_memory_usage を追加します。
現在のセッション SET max_memory_usage=<value> を実行します。セッションの期間中、有効になります。
単一クエリ SQL に設定を追加します: SELECT column FROM table SETTINGS max_memory_usage=<value>

設定項目の詳細については、「ユーザー権限を設定する」をご参照ください。

「Memory limit (for user) exceeded」エラーが発生した場合の対処方法

原因: 単一ユーザーが使用する合計メモリが、ユーザーごとの制限 (max_memory_usage_for_user) を超過しました。

ソリューション: 状況に合わせて max_memory_usage_for_user を構成します。

適用範囲 設定方法
グローバル(全ユーザー) EMR コンソールで、[設定] > [server-users] > [設定項目の追加] をクリックし、profiles.<your_profile_name>.max_memory_usage_for_user を追加します。また、users.<your_clickhouse-client_name>.profile の値が <your_profile_name> と一致していることを確認してください。
ClickHouse クライアント EMR コンソールで、[設定] > [client-config] > [設定項目の追加] をクリックし、max_memory_usage_for_user を追加します。
現在の会話 SET max_memory_usage_for_user=<value> を実行します。この設定は、会話の持続時間中のみ有効です。
単一クエリ SQL 文に設定を付与します:SELECT column FROM table SETTINGS max_memory_usage_for_user=<value>

設定項目についての詳細については、「ユーザーの権限を設定する」をご参照ください。

OLAP クラスターにおける ClickHouse コンポーネントの分散方法

ClickHouse サービスには、ClickHouseRuntimeClickHouseServer、および ClickHouseKeeper の3つのコンポーネントが含まれています。

これらの分散は、EMR クラスターのバージョンによって異なります。

コンポーネント EMR V3.X EMR V5.X
ClickHouseRuntime すべてのノードタイプ すべてのノードタイプ
ClickHouseServer コアノードのみ コアノードのみ
ClickHouseKeeper インストールされていません 最初のコアノード、または最初の3つのコアノード (スケールアウトはサポートされていません)

EMR V5.X では、ClickHouseKeeper を実行するノード数はクラスター作成時に固定されます。たとえば、2つのコアノードを持つクラスターを作成した場合、ClickHouseKeeper は最初のコアノードでのみ実行されます。後でコアノードを追加しても、これは変更されません。

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

これは、ReplicatedMergeTree および ReplacingMergeTree を含む MergeTree ベースのテーブルで予期される動作です。

データが書き込まれると、ClickHouse はメモリ内でデータをソートし、データパーツとしてディスクにフラッシュします。バックグラウンドスレッドは、小さなパーツを継続的に大きなパーツにマージします。インポートの初期段階では、マージするパーツが少ないため、すべてのリソースがデータの受信とフラッシュに費やされ、インポート速度はピークに達します。

より多くのデータが到着し、より多くのパーツが蓄積されるにつれて、バックグラウンドマージスレッドは CPU と I/O をめぐってインポートプロセスと競合します。インポート速度は、入力データとバックグラウンドマージのバランスポイントで安定するまで低下します。

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

EMR の ClickHouse バージョンは、EMR クラスターのバージョンに関連付けられています。ClickHouse をアップグレードするには、EMR クラスターをアップグレードします。

論理クラスターを定義する必要がある理由

論理クラスターは、物理 EMR ClickHouse クラスター内のノード間の関係 (シャーディングやレプリケーショントポロジーなど) を定義します。異なる論理クラスターは、同じ物理クラスター上で異なるビジネスユースケースに対応できます。

デフォルトでは、EMR は物理クラスター内のすべてのノードを含む1つの論理クラスターを構成します。既存の論理クラスターを表示するには、以下を実行します。

SELECT * FROM system.clusters;

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

  • シャード: シャードは1つ以上のノードで構成されます。シャード内のすべてのノードは互いのレプリカであり、Replicated\*MergeTree エンジンを使用するテーブルに対して同じデータを保持します。

  • レプリカ: ノードは1つ以上の他のノードのレプリカになることができます。レプリケートされたノードは、Replicated\*MergeTree テーブルに対して同一のデータを保存します。

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

OLAP クエリのスループットテストには、Star Schema Benchmark (SSB) を使用します。セットアップと使用方法については、「Star Schema Benchmark」をご参照ください。

単一クエリのレイテンシーテストには、clickhouse-benchmark を使用します。追加のデータセットとテストシナリオについては、「チュートリアルとサンプルデータセット」をご参照ください。

クラスター作成後にシャード数とレプリカ数を変更できますか

はい、できます。ただし、既存のデータを持つクラスターでシャードとレプリカを直接変更すると、データエラーが発生する可能性があります。代わりに、目的のシャードとレプリカの構成を持つ新しい論理クラスターを追加し、元の論理クラスターはそのまま維持してください。

論理クラスターを追加するには、EMR コンソールで [構成] > [server-metrika] に移動し、clickhouse_remote_servers パラメーターを見つけ、新しいクラスター構成を追加します。

EMR ClickHouse で HDFS を使用する場合に必要な設定

構成の詳細については、「HDFS テーブルエンジンのドキュメント」をご参照ください。

EMR ClickHouse と ApsaraDB for ClickHouse の違い

機能 EMR ClickHouse ApsaraDB for ClickHouse
クラスター ID プレフィックス c- (例: c-3c8697f91408****) cc- (例: cc-bp16qwvp7hy8i****)
管理モデル 半管理型 — 運用・保守 (O&M) のために Elastic Compute Service (ECS) インスタンスにログインできます フルマネージド — ECS インスタンスへのアクセスは利用できません

ClickHouse は、メタデータストレージに DLF を使用する Hive テーブルをクエリできますか

いいえ。ClickHouse は、メタデータストレージに MySQL または ApsaraDB RDS を使用する Hive テーブルのみをクエリできます。Data Lake Formation (DLF) に裏打ちされた Hive テーブルはサポートされていません。

Hive データを使用する必要がある場合は、以下の代替案を検討してください。

  • Hive データを ClickHouse にインポートするには: Apache Spark または Apache SeaTunnel を使用します。

  • Hive データをその場で分析するには: StarRocks、Trino、Impala などのエンジンを使用します。