日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

使用HDFS進行數據冷熱分離

本文為您介紹在阿里云E-MapReduce的ClickHouse集群上,如何通過HDFS進行數據的冷熱分離。通過本文操作,您既可以在保證集群讀寫性能的基礎上,自動維護集群上的冷熱數據,又可以充分利用計算和存儲資源,以降低成本。

前提條件

  • 已在EMR控制臺上創建EMR-5.5.0及以上版本的ClickHouse集群,詳情請參見創建ClickHouse集群

  • 在同一VPC下具有一個HDFS服務(例如,EMR Hadoop集群)。

  • 擁有HDFS服務的讀寫權限。

使用限制

本文操作僅適用于EMR-5.5.0及以上版本的ClickHouse集群。

操作流程

  1. 步驟一:在EMR控制臺添加磁盤

  2. 步驟二:驗證配置

  3. 步驟三:進行冷熱分離

步驟一:在EMR控制臺添加磁盤

  1. 進入ClickHouse配置頁面。

    1. 登錄EMR on ECS控制臺

    2. 在頂部菜單欄處,根據實際情況選擇地域和資源組

    3. EMR on ECS頁面,單擊目標集群操作列的集群服務

    4. 集群服務頁面,單擊ClickHouse服務區域的配置

  2. 配置頁簽,單擊server-metrika頁簽。

  3. 修改storage_configuration的參數值。

    1. disks中添加一個HDFS類型的磁盤。

      詳細信息如下。

      <disk_hdfs>
          <type>hdfs</type>
          <endpoint>hdfs://${your-hdfs-url}</endpoint>
          <min_bytes_for_seek>1048576</min_bytes_for_seek>
          <thread_pool_size>16</thread_pool_size>
          <objects_chunk_size_to_delete>1000</objects_chunk_size_to_delete>
      </disk_hdfs>

      相關參數描述如下。

      參數

      是否必填

      描述

      disk_hdfs

      磁盤的名稱,您可以自定義。

      type

      磁盤的類型,固定值為hdfs

      endpoint

      HDFS服務的目錄地址。

      重要

      HDFS的地址通常是NameNode的地址,如果NameNode是HA模式,其端口通常為8020,否則為9000。

      min_bytes_for_seek

      最小使用Seek的Byte數量,低于該值時會用Skip代Seek。默認值為1048576。

      thread_pool_size

      用于Disk用于執行restore時所使用的線程池的大小。默認值為16。

      objects_chunk_size_to_delete

      一次最多可以刪除HDFS文件的數量。默認為1000。

    2. policies中添加一個新的策略。

      策略內容如下。

      <hdfs_ttl>
          <volumes>
            <local>
              <!-- 包含默認存儲策略下所有的磁盤 -->
              <disk>disk1</disk>
              <disk>disk2</disk>
              <disk>disk3</disk>
              <disk>disk4</disk>
            </local>
            <remote>
              <disk>disk_hdfs</disk>
            </remote>
          </volumes>
          <move_factor>0.2</move_factor>
      </hdfs_ttl>
      說明

      該部分內容也可以直接添加在default策略中。

  4. 保存配置。

    1. 在ClickHouse服務的配置頁面,單擊保存

    2. 修改信息對話框中,輸入執行原因,打開保存并下發配置開關,單擊保存

  5. 部署客戶端配置。

    1. 在ClickHouse服務的配置頁面,單擊部署客戶端配置

    2. 部署CLICKHOUSE客戶端配置對話框中,輸入執行原因,單擊確定

    3. 確認對話框中,單擊確定

步驟二:驗證配置

  1. 使用SSH方式登錄ClickHouse集群,詳情請參見登錄集群

  2. 執行如下命令,啟動ClickHouse客戶端。

    clickhouse-client -h core-1-1 -m
    說明

    本示例登錄core-1-1節點,如果您有多個Core節點,可以登錄任意一個節點。

  3. 執行如下命令,查看磁盤信息。

    select * from system.disks;

    返回信息如下所示。

    ┌─name─────┬─path─────────────────────────────────┬───────────free_space─┬──────────total_space─┬─keep_free_space─┬─type──┐
    │ default  │ /var/lib/clickhouse/                 │          83868921856 │          84014424064 │               0 │ local │
    │ disk1    │ /mnt/disk1/clickhouse/               │          83858436096 │          84003938304 │        10485760 │ local │
    │ disk2    │ /mnt/disk2/clickhouse/               │          83928215552 │          84003938304 │        10485760 │ local │
    │ disk3    │ /mnt/disk3/clickhouse/               │          83928301568 │          84003938304 │        10485760 │ local │
    │ disk4    │ /mnt/disk4/clickhouse/               │          83928301568 │          84003938304 │        10485760 │ local │
    │ disk_hdfs│ /var/lib/clickhouse/disks/disk_hdfs/ │ 18446744073709551615 │ 18446744073709551615 │               0 │ hdfs  │
    └──────────┴──────────────────────────────────────┴──────────────────────┴──────────────────────┴─────────────────┴───────┘
                                
  4. 執行如下命令,查看磁盤存儲策略。

    select * from system.storage_policies;

    返回信息如下所示。

    ┌─policy_name──┬─volume_name─┬─volume_priority─┬─disks──────────────────────────────┬─volume_type─┬─max_data_part_size─┬─move_factor─┬─prefer_not_to_merge─┐
    │ default      │ single      │               1 │ ['disk1','disk2','disk3','disk4']           │JBOD        │                  0 │           0 │                   0 │
    │ hdfs_ttl     │ local       │               1 │ ['disk1','disk2','disk3','disk4']           │JBOD        │                  0 │          0.2 │                   0 │
    │ hdfs_ttl     │ remote      │               2 │ ['disk_hdfs']                         │JBOD        │                  0 │          0.2 │                   0 │
    └──────────────┴─────────────┴─────────────────┴───────────────────────────────────┴─────────────┴────────────────────┴─────────────┴─────────────────────┘

    當回顯信息如上文所示時,表示磁盤擴容操作完成。

步驟三:進行冷熱分離

對已有的表進行改造

  1. 查看當前的存儲策略。

    1. 在ClickHouse客戶端執行如下命令,查看磁盤信息。

      SELECT
        storage_policy
      FROM system.tables
      WHERE database='<database_name>' AND name='<table_name>';

      命令中的<database_name>為數據庫名,<table_name>為表名。

      如果返回信息如下所示,則需要參見下一步驟添加一個volume。

      <default>
        <volumes>
          <single>
            <disk>disk1</disk>
            <disk>disk2</disk>
            <disk>disk3</disk>
            <disk>disk4</disk>
          </single>
        </volumes>
      </default>
  2. 擴展當前的存儲策略。

    在EMR控制臺ClickHouse服務的配置頁簽,增加volume內容,詳細信息如下。

    <default>
      <volumes>
        <single>
          <disk>disk1</disk>
          <disk>disk2</disk>
          <disk>disk3</disk>
          <disk>disk4</disk>
        </single>
        <!-- 以下是新增的volume remote -->
        <remote>
          <disk>disk_hdfs</disk>
        </remote>
      </volumes>
      <!-- 多個volume時需要指定move_factor -->
      <move_factor>0.2</move_factor>
    </default>
  3. 執行以下命令,修改TTL。

    ALTER TABLE <yourDataName>.<yourTableName>
      MODIFY TTL toStartOfMinute(addMinutes(t, 5)) TO VOLUME 'remote';
  4. 執行以下命令,查看各個part的分布。

    select partition,name,path from system.parts where database='<yourDataName>' and table='<yourTableName>' and active=1

    返回信息如下。

    ┌─partition───────────┬─name─────────────────┬─path──────────────────────────────────────────────────────────────────────────────────────────────────┐
    │ 2022-01-12 11:30:00 │ 1641958200_1_96_3    │ /var/lib/clickhouse/disks/disk_hdfs/store/156/156008ff-41bf-460c-8848-e34fad88c25d/1641958200_1_96_3/ │
    │ 2022-01-12 11:35:00 │ 1641958500_97_124_2  │ /mnt/disk3/clickhouse/store/156/156008ff-41bf-460c-8848-e34fad88c25d/1641958500_97_124_2/             │
    │ 2022-01-12 11:35:00 │ 1641958500_125_152_2 │ /mnt/disk4/clickhouse/store/156/156008ff-41bf-460c-8848-e34fad88c25d/1641958500_125_152_2/            │
    │ 2022-01-12 11:35:00 │ 1641958500_153_180_2 │ /mnt/disk1/clickhouse/store/156/156008ff-41bf-460c-8848-e34fad88c25d/1641958500_153_180_2/            │
    │ 2022-01-12 11:35:00 │ 1641958500_181_186_1 │ /mnt/disk4/clickhouse/store/156/156008ff-41bf-460c-8848-e34fad88c25d/1641958500_181_186_1/            │
    │ 2022-01-12 11:35:00 │ 1641958500_187_192_1 │ /mnt/disk3/clickhouse/store/156/156008ff-41bf-460c-8848-e34fad88c25d/1641958500_187_192_1/            │
    └─────────────────────┴──────────────────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────┘
    
    6 rows in set. Elapsed: 0.002 sec.
    說明

    如果返回信息如上所示,則表明數據根據時間做了冷熱分離。熱數據存放在本地盤中,冷數據存放在HDFS中。

    其中,/var/lib/clickhouse/disks/disk_hdfs是disk_hdfs元數據的目錄,/mnt/disk{1..4}/clickhouse是本地盤路徑。

創建新的表

  • 創建語法

    CREATE TABLE <yourDataName>.<yourTableName> [ON CLUSTER cluster_emr]
    (
      column1 Type1,
      column2 Type2,
      ...
    ) Engine = MergeTree() --也可以使用Replicated*MergeTree()。
    PARTITION BY <yourPartitionKey>
    ORDER BY <yourPartitionKey>
    TTL <yourTtlKey> TO VOLUME 'remote'
    SETTINGS storage_policy='hdfs_ttl';
    說明 命令中的<yourPartitionKey>為ClickHouse的分區鍵。<yourTtlKey>為您設置的TTL信息。
  • 示例

    CREATE TABLE test.test
    (
        `id` UInt32,
        `t` DateTime
    )
    ENGINE = MergeTree()
    PARTITION BY toStartOfFiveMinute(t)
    ORDER BY id
    TTL toStartOfMinute(addMinutes(t, 5)) TO VOLUME 'remote'
    SETTINGS storage_policy='hdfs_ttl';
    說明

    本示例中,表格會將5分鐘內的數據存放在本地,過了5分鐘后,數據會被移動到remote volume中,也就是HDFS中。

相關配置

  • server-config

    merge_tree.allow_remote_fs_zero_copy_replication:設置為true,以在Replicated*MergeTree使用DiskHDFS等遠程存儲時利用其自身的多副本進行備份,ClickHouse的一個Shard下的多個副本中的數據僅會備份元數據。

  • server-users

    profile.${your-profile-name}.hdfs_replication:設置數據在HDFS上存儲的副本個數。