このドキュメントでは、E-MapReduce (EMR) の ClickHouse についてよくある質問に回答します。
ClickHouse ユーザーの作成方法
EMR コンソールまたは clickhouse-client CLI を使用して、ClickHouse ユーザーを作成します。
EMR コンソール
-
EMR コンソールで、ClickHouse サービスページに移動し、[設定] タブをクリックします。
-
[server-users] タブをクリックし、[設定項目の追加] をクリックします。
-
以下のいずれかのキーで設定項目を追加し、その値をパスワードに設定します。
<YourUserName>を作成するユーザー名に置き換えます。キー 認証方法 users.<YourUserName>.passwordプレーンテキストパスワード users.<YourUserName>.password_sha256_hexSHA-256 ハッシュ users.<YourUserName>.password_double_sha1_hexDouble SHA-1 ハッシュ -
設定を保存し、ClickHouse サービスを再起動します。
詳細については、「サービスのパラメーターを管理する」および「サービスを再起動する」をご参照ください。
clickhouse-client CLI
-
デフォルトユーザーアカウントのアクセス管理を有効化します。EMR コンソールで、[構成] > [server-users] > [構成項目の追加] に移動し、値
1でusers.default.access_managementを追加します。構成を保存して、ClickHouse サービスを再起動します。 -
SSH 経由で EMR ClickHouse クラスターにログインします。詳細については、「クラスターにログイン」をご参照ください。
-
ClickHouse クライアントを起動します。
clickhouse-client -h core-1-1 -mcore-1-1を、ログインしたコアノードの名前に置き換えます。 -
ユーザーを作成します。
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'] [,...]; -
ユーザーが作成されたことを確認します。
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 サービスには、ClickHouseRuntime、ClickHouseServer、および 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 などのエンジンを使用します。