You need to enable JavaScript to run this app.
导航
高阶使用
最近更新时间:2023.12.27 14:37:23首次发布时间:2023.01.06 19:57:48

本文为您介绍 ClickHouse 集群的相关高阶特性。

1 前提条件

已创建火山引擎 E-MapReduce(EMR)包含 ClickHouse 的集群类型。详见快速开始

2 用户管理

您可以在 ClickHouse 服务参数配置页面,查看或修改配置。该步骤将在 ClickHouse 集群中,创建名为 test 的用户,其中 users 配置在 server-users 配置文件中。

  1. 登录 EMR 控制台

  2. 左侧导航栏单击集群列表 > 集群详情 > 服务列表 > ClickHouse 服务 > 服务参数,进入 ClickHouse 服务参数页面,单击添加自定义参数按钮。

  3. 在添加自定义参数窗口中,配置文件参数下拉选择 server-users 配置文件,并添加以下参数:

    ## test 为用户名
    users.test.profile ## test 用户默认使用的 profile 名称,这里使用 default profile
    users.test.quota ## test 用户默认使用的 quota 配置,这里使用 default quota
    users.test.password ## test 用户的密码,这里使用123456当做临时密码
    users.test.networks.ip ## 网络配置, ip设置 ::/0, 其他为空, 表示任意IP都能接入
    users.test.networks.host_regexp ##允许访问的主机名正则表达式,默认为空。
    users.test.networks.host ##允许访问的主机名,默认为空。
    

最后配置参数结果如下:

  1. 参数配置完成后,单击右上角服务操作 > 重启按钮,重启 ClickHouse 节点,并通过远程登录方式,登录 Core 节点查看 /etc/emr/clickhouse/users.xml 配置,确认是否已经有 test 存在。登录方式详见快速开始

  2. 执行以下命令查看配置文件:

    cat /etc/emr/clickhouse/users.xml
    

  1. 确认用户存在后,执行如下命令,启动 ClickHouse 客户端,使用新用户和密码直接登录:

    clickhouse-client --user test --password 123456
    

3 生命周期管理

ClickHouse 存储的数据通常来说比较实时,历史的数据使用频率会越来越低,甚至某些情况下,不会对于老数据进行访问,因此对 ClickHouse 表数据进行生命周期的管理,能够有效的降低集群存储的成本。

ClickHouse 目前同时支持 Table 和 Column 级别的 TTL 设置,同时 ClickHouse 也支持多种类型的数据操作。

下面以 Table 的 TTL 为例介绍 ClickHouse 的生命周期功能:

CREATE TABLE example_table
(
    d DateTime,
    a Int
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(d)
ORDER BY d
TTL d + INTERVAL 1 MONTH DELETE,
    d + INTERVAL 1 WEEK TO VOLUME 'aaa',
    d + INTERVAL 2 WEEK TO DISK 'bbb';

上述的例子中,定义了一张 MergeTree 的表,它的数据会按照时间进行迁移:

  1. 超过 1月 的数据,会被直接删除掉,默认行为。

    说明

    推荐您使用 DELTE 模式,其他模式需要人工进行管理磁盘容量。

  2. 超过 1周 的数据,会被移动到 VOLUME 'aaa';

  3. 超过 2周 的数据,会被移动到 DISK 'bbb'。

更多信息,查看官方文档

4 冷热分层设置

对于某些 ClickHouse 的数据表,依然还会有低频的查询历史数据的场景,此时不能直接使用 TTL 删除数据,那么此时可以用冷热分层的设置来减少存储成本。在火山云上,我们推荐使用 TOS 作为冷存存储。

注意

冷热分层目前仅支持 EMR-3.1.0 及以上集群。

  1. 左侧导航栏单击集群列表 > 集群详情 > 服务列表 > ClickHouse 服务 > 服务参数,进入 ClickHouse 服务参数页面。

  2. 在服务参数界面,单击选择"server-metrika"配置文件。

  3. 在"storage_configuration"参数名称中修改 CoreGroup 的配置,添加以下两段配置:

    1. 我们需要建一个 TOS 的 disk:

      <storage_configuration>
          ...
          <disks>
              <tos>
                  <type>s3</type>
                  <endpoint></endpoint>
                  <access_key_id>your_access_key_id</access_key_id>
                  <secret_access_key>your_secret_access_key</secret_access_key>
                  <region></region>
                  <connect_timeout_ms>10000</connect_timeout_ms>
                  <request_timeout_ms>5000</request_timeout_ms>
                  <retry_attempts>10</retry_attempts>
                  <single_read_retries>4</single_read_retries>
                  <min_bytes_for_seek>1000</min_bytes_for_seek>
                  <metadata_path>/var/lib/clickhouse/disks/s3/</metadata_path>
                  <cache_enabled>true</cache_enabled>
                  <cache_path>/var/lib/clickhouse/disks/s3/cache/</cache_path>
                  <skip_access_check>false</skip_access_check>
              </tos>
          </disks>
          ...
      </storage_configuration>
      

      说明

      • Endpoint 使用火山的 TOS 的话,配置项需要符合以下的要求:

        1. 必须使用 http 协议。

        2. 必须使用 [bucket-name] + [TOS S3 类型的 Endpoint] + [key] 的形式

        3. 必须以"/"结尾
          样例: http://emr-hzw.tos-s3-cn-beijing.ivolces.com/ClickHouse/
          TOS Endpoint 参考 官方文档

      • region:以实际区域填写,例如 cn-beijing。

    2. 创建一个 Storage policy:

      <storage_configuration>    
          <policies>
              <tos_cold>
                  <volumes>
                      <main>
                          <disk>default</disk>
                      </main>
                      <external>
                          <disk>tos</disk>
                      </external>
                  </volumes>
                  <move_factor>0.2</move_factor>
              </tos_cold>
          </policies>
       </storage_configuration>
      

下面是 XML 的模板,其中:endpoint、access_key_id、secret_access_key、region、move_factor 这5个参数为关键信息,需根据配置不同而修改:

<disks>
    <disk1>
        <path>/data01/clickhouse/</path>
        <keep_free_space_bytes>10485760</keep_free_space_bytes>
    </disk1>
    <tos>
        <type>s3</type>
        <endpoint>http://emr.tos-s3-cn-beijing.ivolces.com/Clickhouse-emr/</endpoint>
        <access_key_id>AK</access_key_id>
        <secret_access_key>SK</secret_access_key>
        <region>cn-beijing</region>
        <connect_timeout_ms>10000</connect_timeout_ms>
        <request_timeout_ms>5000</request_timeout_ms>
        <retry_attempts>10</retry_attempts>
        <single_read_retries>4</single_read_retries>
        <min_bytes_for_seek>1000</min_bytes_for_seek>
        <metadata_path>/var/lib/clickhouse/disks/s3/</metadata_path>
        <cache_enabled>true</cache_enabled>
        <cache_path>/var/lib/clickhouse/disks/s3/cache/</cache_path>
        <skip_access_check>false</skip_access_check>
    </tos>
</disks>
<policies>
    <default>
        <volumes>
            <single>
                <disk>disk1</disk>
            </single>
        </volumes>
    </default>
    <tos_cold>
        <volumes>
            <main>
                <disk>disk1</disk>
            </main>
            <external>
                <disk>tos</disk>
            </external>
        </volumes>
        <move_factor>0.1</move_factor>
    </tos_cold>
</policies>
  1. 参数配置完成后,通过远程登录方式连接 ClickHouse 集群客户端,并在创建表的时候,指定 Storage policy:
CREATE TABLE table_with_non_default_policy (
    EventDate Date,
    OrderID UInt64,
    BannerID UInt64,
    SearchPhrase String
) ENGINE = MergeTree
ORDER BY (OrderID, BannerID)
PARTITION BY toYYYYMM(EventDate)
SETTINGS storage_policy = 'tos_cold'
  1. 插入数据:
insert into table_with_non_default_policy select '2022-09-09', rand(), rand(), 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' from numbers(100000000);

更多信息,参考官方文档