1. 分散クラスターの一般的なソリューション
プラン | 特徴 |
---|---|
解決策 1: MergeTree + 分散 | 1. コピーは禁止です。2. zk は必要ありません。3. ローカルテーブルのみ書き込み可能 |
ソリューション 2: MergeTree + 分散 + クラスター レプリケーション | 1. クラスターテーブルを書き込みます。2. クラスター複製メカニズムを使用して、レプリカの問題を解決します。3. zkを使用する必要はありません |
ソリューション 3: ReplicatedMergeTree + 分散 | 1. ローカル テーブルを作成し、zk を介してコピーとして配布します。2. ローカル テーブルに書き込み、クラスター テーブルを読み取ります。3. zk への依存度が高い |
ここでは、データがハイブ テーブルからインポートされるため、コピーの必要がないため、オプション 1 を選択します。
2. 独立した設定ファイル
Clickhouse は置換を使用して、いくつかの構成項目をファイルに個別に書き込むことができます。この利点は、管理に便利であり、毎回 config.xml をメンテナンスする必要がないことです。
3. 設定ファイル
1)users.xml
ローカル テーブルに書き込むため、分散テーブルを読み取るための分散テーブル専用の読み取り専用アカウントを新規に設定できます。<users> タグ内に設定を追加します。なお、password_sha256_hex は自分でパスワードを作成する必要があります。メソッドは次のとおりです: echo -n '123456' | sha256sum | tr -d '-'
<clst_read>
<password_sha256_hex>8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92</password_sha256_hex>
<networks>
<ip>::/0</ip>
</networks>
<!-- Settings profile for user. -->
<profile>readonly</profile>
<!-- Quota for user. -->
<quota>default</quota>
</clst_read>
2)config.xml
include_fromタグとincl属性を追加
1. <yandex> タグの下に構成を追加します。これは、追加の構成ファイル /etc/clickhouse-server/metrika.xml を導入することを意味します。
<include_from>/etc/clickhouse-server/metrika.xml</include_from> <!-- 设置集群配置文件 -->
2. <remote_servers> タグを変更し、incl 属性を追加して、remote_servers タグが ck_remote_servers タグ (metrika.xml で構成) に置き換えられることを示します。
<remote_servers incl="ck_remote_servers"> <!-- 指定incl -->
3) メトリカ.xml
分散テーブル構成ファイルを作成します。完全な構成ファイルは次のとおりです。
<yandex>
<ck_remote_servers> <!--标签名,用于替换 config.xml中的remote_servers标签-->
<dw_cluster> <!--集群名称 -->
<shard>
<replica>
<host>ip</host>
<port>9100</port>
<user>clst_read</user> <!-- 专门配置的一个集群只读账号 -->
<password>123456</password>
</replica>
</shard>
<shard>
<replica>
<host>ip</host>
<port>9100</port>
<user>clst_read</user>
<password>123456</password>
</replica>
</shard>
</dw_cluster>
</ck_remote_servers>
</yandex>
4) 分散テーブルを作成する
サービスを再起動した後、分散テーブルを作成します。
-- 创建本地表,多个节点都需要创建
create table dw_local.hits(p Date, i Int32) ENGINE =MergeTree order by p;
-- 插入本地表数据,节点1
insert into dw_local.hits(p,i) values('2021-01-01',1),('2021-01-01',2),('2021-01-02',3),('2021-01-02',4);
-- 插入本地表数据,节点2
insert into dw_local.hits(p,i) values('2021-01-01',5),('2021-01-01',6),('2021-01-02',7),('2021-01-02',8);
-- 创建分布式表:
-- dw.hits :分布式表名
-- dw_cluster:集群名称
-- dw_local:本地表的库名
-- hits:本地表名
CREATE TABLE IF NOT EXISTS dw.hits (p Date, i Int32) ENGINE = Distributed(dw_cluster, dw_local, hits);
-- 查询分布式表
select * from dw.hits t limit 10;
-- 查询本地表
select * from dw_local.hits t limit 10;