1. Soluciones comunes para clústeres distribuidos
plan | características |
---|---|
Solución 1: MergeTree + Distribuido | 1. Sin copia. 2. No se requiere zk. 3. Solo se pueden escribir tablas locales |
Solución 2: MergeTree + Distribuido + replicación de clúster | 1. Escriba la tabla de conglomerados. 2. Utilice el mecanismo de replicación de clústeres para resolver el problema de la réplica. 3. No es necesario usar zk |
Solución 3: ReplicatedMergeTree + Distributed | 1. Escriba la tabla local y distribúyala a través de zk como una copia. 2. Escriba en la tabla local y lea la tabla del clúster. 3. Altamente dependiente de zk |
Aquí, debido a que los datos se importan de la tabla Hive, no hay necesidad de una copia, así que elija la opción uno
2. Archivo de configuración independiente
Clickhouse puede usar sustituciones para escribir algunos elementos de configuración por separado en un archivo. La ventaja de esto es que es conveniente para la administración y no necesita mantener config.xml cada vez
3. Archivo de configuración
1)usuarios.xml
Debido a que está escribiendo en la tabla local, puede configurar una nueva cuenta de solo lectura dedicada a la tabla distribuida para leer la tabla distribuida. Agregue la configuración en la etiqueta <users>. Tenga en cuenta que password_sha256_hex necesita crear una contraseña usted mismo. El método es: 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
Agregue la etiqueta include_from y el atributo incl
1. Agregue una configuración bajo la etiqueta <yandex>, lo que significa introducir un archivo de configuración adicional /etc/clickhouse-server/metrika.xml
<include_from>/etc/clickhouse-server/metrika.xml</include_from> <!-- 设置集群配置文件 -->
2. Modifique la etiqueta <remote_servers> y agregue el atributo incl, indicando que la etiqueta remote_servers se reemplaza con la etiqueta ck_remote_servers (configurada en metrika.xml)
<remote_servers incl="ck_remote_servers"> <!-- 指定incl -->
3) métrica.xml
Cree un archivo de configuración de tabla distribuida, el siguiente es un archivo de configuración completo
<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) Crear una tabla distribuida
Después de reiniciar el servicio, cree una tabla distribuida:
-- 创建本地表,多个节点都需要创建
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;