このトピックでは、ClickHouseに関するよくある質問への回答を提供します。
ClickHouseユーザーを作成するにはどうすればよいですか?
E-MapReduce(EMR)コンソールまたはClickHouseクライアントを使用して、ClickHouseユーザーを作成できます。
EMRコンソール
EMRコンソールのClickHouseサービスページの [構成] タブで、[server-users] タブをクリックします。 [server-users] タブで、[構成項目の追加] をクリックします。 表示されるダイアログボックスで、キーが users.<YourUserName>.password、users.<YourUserName>.password_sha256_hex、または users.<YourUserName>.password_double_sha1_hex である構成項目を追加し、構成項目の値を指定します。 次に、構成を保存し、ClickHouseサービスを再起動します。
<YourUserName> は、作成するClickHouseユーザーの名前に置き換えます。
説明構成項目を追加する方法の詳細については、「サービスのパラメーターを管理する」をご参照ください。 サービスを再起動する方法の詳細については、「サービスを再起動する」をご参照ください。
ClickHouseクライアント
EMRコンソールのClickHouseサービスページの [構成] タブで、[server-users] タブをクリックします。 [server-users] タブで、[構成項目の追加] をクリックします。 表示されるダイアログボックスで、キーが users.default.access_management、値が 1 である構成項目を追加し、構成を保存して、ClickHouseサービスを再起動します。 デフォルトのユーザーアカウントを使用して、ClickHouseクラスターに接続します。
SSHモードでEMR ClickHouseクラスターにログオンします。 詳細については、「クラスターにログオンする」をご参照ください。
次のコマンドを実行して、ClickHouseクライアントを起動します:
clickhouse-client -h core-1-1 -m説明サンプルコマンドでは、core-1-1はログオンするコアノードの名前を示します。 複数のコアノードがある場合は、いずれかのノードにログオンできます。
次のステートメントを実行して、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'] [,...];次のステートメントを実行して、既存のユーザーをクエリします。
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サービスページの [構成] タブで、[server-users] タブをクリックします。 [server-users] タブで、[構成項目の追加] をクリックします。 表示されるダイアログボックスで、キーが profiles.<your_profile_name>.max_parallel_replicas で、値が各シャードのレプリカ数以上である構成項目を追加します。 users.<your_clickhouse-client_name>.profile の値が <your_profile_name> の値と同じであることを確認します。
説明<your_profile_name> はプロファイル名に置き換え、<your_clickhouse-client_name> はClickHouseクライアントの名前に置き換えます。 構成項目の詳細については、「ユーザー権限を構成する」をご参照ください。
エラーメッセージ「メモリ制限(合計)超過」が表示された場合はどうすればよいですか?
原因:メモリ使用量が、サーバーで使用可能な合計メモリを超えています。
解決策:EMRコンソールのClickHouseサービスページの [構成] タブで、[server-config] タブをクリックします。 [server-config] タブで、[構成項目の追加] をクリックします。 表示されるダイアログボックスで、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」が表示された場合はどうすればよいですか?
原因:1 つのクエリで使用可能な最大メモリを超えています。
解決策
シナリオ
操作
グローバル設定
EMR コンソールの ClickHouse サービスページの [設定] タブで、[server-config] タブをクリックします。 server-config タブで、[設定項目の追加] をクリックします。表示されるダイアログボックスで、profiles.<your_profile_name>.max_memory_usage 設定項目を追加します。users.<your_clickhouse-client_name>.profile 設定項目の値が <your_profile_name> の値と同じであることを確認します。
説明<your_profile_name> を実際のプロファイル名に置き換え、<your_clickhouse-client_name> を ClickHouse クライアントの名前に置き換えます。設定項目の詳細については、「ユーザー権限の設定」をご参照ください。
ClickHouse クライアントの場合
EMR コンソールの ClickHouse サービスページの [設定] タブで、[client-config] タブをクリックします。 client-config タブで、[設定項目の追加] をクリックします。表示されるダイアログボックスで、max_memory_usage 設定項目を追加します。
セッションの場合
SET max_memory_usage=xxxxコマンドを実行します。設定は、セッションのライフサイクル中に有効になります。クエリの場合
SQL ステートメントに max_memory_usage の設定を追加します。設定は、現在のクエリに対してのみ有効になります。
ステートメントの例:
SELECT column FROM table SETTINGS max_memory_usage=xxxx
エラーメッセージ「メモリ制限(クエリ)超過」が表示された場合はどうすればよいですか?
原因:メモリ使用量が、単一のクエリで使用可能な最大メモリを超えています。
解決策
シナリオ
操作
グローバル構成
EMRコンソールのClickHouseサービスページの 構成サーバーユーザー構成アイテムを追加profiles.<your_profile_name>.max_memory_usage_for_userusers.<your_clickhouse-client_name>.profile<your_profile_name> タブで、 タブをクリックします。 [server-config] タブで、 をクリックします。 表示されるダイアログボックスで、 構成項目を追加します。 構成項目の値が の値と同じであることを確認します。
説明<your_profile_name> はプロファイル名に置き換え、<your_clickhouse-client_name> はClickHouseクライアントの名前に置き換えます。 構成項目の詳細については、「ユーザー権限を構成する」をご参照ください。
ClickHouseクライアントの場合
EMR コンソールの ClickHouse サービスページの [構成] タブで、[client-config] タブをクリックします。[client-config] タブで、[構成項目の追加] をクリックします。表示されるダイアログボックスで、max_memory_usage_for_user 構成項目を追加します。
セッションの場合
SET max_memory_usage_for_user=xxxxコマンドを実行します。設定はセッションのライフサイクル中に有効になります。クエリの場合
max_memory_usage_for_user の設定を SQL ステートメントに追加します。この構成は、現在のクエリに対してのみ有効です。
サンプルステートメント:
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 SQL ステートメントを ClickHouse で実行して、既存の論理クラスタを表示できます。
各論理クラスタには複数のマシンが含まれています。シャーディングやレプリケーションの関係など、異なるマシン間の関係を確立するように論理クラスタを構成できます。また、異なるビジネスシナリオで異なる論理クラスタを使用することもできます。
デフォルトでは、物理 EMR ClickHouse クラスタ内のすべてのノードを含む論理クラスタが構成されています。
ClickHouse のシャードとレプリカとは何ですか?
ClickHouse では、ノードは 1 つ以上のノードのレプリカになることができます。Replicated*MergeTree エンジンを使用するテーブルのデータは、ノード間で同じです。
ClickHouse では、シャードは 1 つ以上のノードで構成されます。シャード内のノードは互いにレプリカです。
ClickHouse のパフォーマンスをテストするにはどうすればよいですか?
ほとんどの場合、Star Schema Benchmark(SSB)を使用して ClickHouse のパフォーマンスをテストできます。詳細については、「Star Schema Benchmark」をご参照ください。その他のテストケースについては、「チュートリアルとサンプルデータセット」および「clickhouse-benchmark」をご参照ください。
クラスター作成後にシャード数とレプリカ数を変更できますか?
たとえば、クラスターを作成するときに、シャード数が A、レプリカ数が B であるとします。クラスターの作成後、シャード数を C に、レプリカ数を D に変更したいとします。ClickHouse では、シャード数とレプリカ数を変更できます。シャード数とレプリカ数を変更するには、次の操作を実行します。EMR コンソールの ClickHouse サービスページの [構成] タブで、[server-metrika] タブをクリックします。[server-metrika] タブで、[clickhouse_remote_servers] パラメーターを見つけ、パラメーターの設定でシャード数とレプリカ数を変更します。
ただし、エラーを回避するために、シャード数とレプリカ数を直接変更しないことをお勧めします。たとえば、クラスターに既にデータが存在する場合、変更によってデータエラーが発生する可能性があります。論理クラスターを追加し、ビジネス要件に基づいてシャード数とレプリカ数を構成することをお勧めします。このようにして、シャードとレプリカの元の構成を保持できます。
EMR ClickHouse で HDFS を使用する場合、どのような設定を行う必要がありますか?
詳細については、「HDFS」をご参照ください。
EMR ClickHouse と ApsaraDB for ClickHouse の違いは何ですか?
EMR ClickHouse クラスタの ID は
c-で始まります。例: c-3c8697f91408****。ApsaraDB for ClickHouse クラスタの ID はcc-で始まります。例: cc-bp16qwvp7hy8i****。EMR ClickHouse は半管理型です。Elastic Compute Service ( ECS ) インスタンスにログオンして、O&M 操作を実行できます。ApsaraDB for ClickHouse は完全管理型です。ECS インスタンスにログオンして、O&M 操作を実行することはできません。
ClickHouse を使用して、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 などのエンジンを使用することをお勧めします。