All Products
Search
Document Center

E-MapReduce:Pisahkan data panas dan dingin dengan HDFS

Last Updated:Aug 21, 2026

Topik ini menjelaskan cara menerapkan pemisahan data panas dan dingin pada kluster ClickHouse di Alibaba Cloud E-MapReduce menggunakan HDFS. Metode ini membantu Anda mengelola tier data secara otomatis, mengoptimalkan biaya penyimpanan, sekaligus mempertahankan performa baca dan tulis kluster.

Prasyarat

  • Anda telah membuat kluster ClickHouse EMR versi V5.5.0 atau yang lebih baru. Untuk informasi selengkapnya, lihat Buat kluster ClickHouse.

  • Layanan HDFS, seperti yang berasal dari kluster EMR Hadoop, tersedia dalam Virtual Private Cloud (VPC) yang sama.

  • Anda memiliki izin baca dan tulis untuk layanan HDFS tersebut.

Batasan

Prosedur ini hanya berlaku untuk kluster ClickHouse EMR versi V5.5.0 atau yang lebih baru.

Prosedur

  1. Langkah 1: Tambahkan disk HDFS di konsol EMR

  2. Langkah 2: Verifikasi konfigurasi

  3. Langkah 3: Terapkan pemisahan data panas dan dingin

Langkah 1: Tambahkan disk HDFS

  1. Buka halaman konfigurasi layanan ClickHouse.

    1. Login ke Konsol EMR on ECS.

    2. Di bilah navigasi atas, pilih Wilayah dan kelompok sumber daya.

    3. Di halaman EMR on ECS, temukan kluster Anda lalu klik Services di kolom Actions.

    4. Di halaman Services, klik Configure di bagian ClickHouse.

  2. Di tab Configure, klik tab server-metrika.

  3. Ubah nilai parameter storage_configuration.

    1. Di disks, tambahkan disk HDFS.

      Berikut contoh konfigurasinya.

      <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>

      Tabel berikut menjelaskan parameter-parameter tersebut.

      Parameter

      Wajib

      Deskripsi

      disk_hdfs

      Ya

      Nama disk. Anda dapat menentukan nama kustom.

      type

      Ya

      Tipe disk. Atur nilai ini menjadi hdfs.

      endpoint

      Ya

      Titik akhir layanan HDFS.

      Penting

      Titik akhir HDFS biasanya merupakan alamat NameNode. Jika NameNode berada dalam mode High Availability (HA), port yang digunakan umumnya 8020. Jika tidak, portnya adalah 9000.

      min_bytes_for_seek

      Tidak

      Jumlah minimum byte untuk operasi seek. Jika offset seek lebih kecil dari nilai ini, operasi skip akan digunakan sebagai gantinya. Nilai default-nya adalah 1048576.

      thread_pool_size

      Tidak

      Ukuran kolam thread yang digunakan oleh disk untuk melakukan operasi restore. Nilai default-nya adalah 16.

      objects_chunk_size_to_delete

      Tidak

      Jumlah maksimum file HDFS yang dapat dihapus dalam satu operasi. Nilai default-nya adalah 1000.

    2. Di policies, tambahkan kebijakan baru.

      Berikut contoh kebijakannya.

      <hdfs_ttl>
          <volumes>
            <local>
              <!-- Sertakan semua disk di bawah kebijakan penyimpanan default. -->
              <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>
      Catatan

      Anda juga dapat menambahkan konfigurasi ini langsung ke kebijakan default.

  4. Simpan konfigurasi.

    1. Di halaman Configure layanan ClickHouse, klik Save.

    2. Di kotak dialog Modify Information, masukkan alasan, aktifkan sakelar Save and Deliver Configuration, lalu klik Save.

  5. Terapkan konfigurasi Klien.

    1. Di halaman Configure layanan ClickHouse, klik Deploy Client Configuration.

    2. Di kotak dialog Deploy Client Configuration, masukkan alasan lalu klik OK.

    3. Di kotak dialog Confirm, klik OK.

Langkah 2: Verifikasi konfigurasi

  1. Login ke kluster ClickHouse menggunakan SSH. Untuk informasi selengkapnya, lihat Login ke kluster.

  2. Jalankan perintah berikut untuk memulai client ClickHouse:

    clickhouse-client -h core-1-1 -m
    Catatan

    Contoh ini login ke node core-1-1. Jika Anda memiliki beberapa node core, Anda dapat login ke salah satunya.

  3. Jalankan perintah berikut untuk melihat informasi disk.

    select * from system.disks;

    Output berikut dikembalikan.

    ┌─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. Jalankan perintah berikut untuk melihat kebijakan penyimpanan disk.

    select * from system.storage_policies;

    Output berikut dikembalikan.

    ┌─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 │
    └──────────────┴─────────────┴─────────────────┴───────────────────────────────────┴─────────────┴────────────────────┴─────────────┴─────────────────────┘

    Output ini menunjukkan bahwa konfigurasi disk berhasil diperbarui.

Langkah 3: Pisahkan data panas dan dingin

Ubah tabel yang sudah ada

  1. Lihat kebijakan penyimpanan saat ini.

    1. Di client ClickHouse, jalankan perintah berikut untuk melihat informasi disk.

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

      Dalam perintah tersebut, <database_name> adalah nama database, dan <table_name> adalah nama tabel.

      Jika output berikut dikembalikan, lanjutkan ke langkah berikutnya untuk menambahkan volume.

      <default>
        <volumes>
          <single>
            <disk>disk1</disk>
            <disk>disk2</disk>
            <disk>disk3</disk>
            <disk>disk4</disk>
          </single>
        </volumes>
      </default>
  2. Perluas kebijakan penyimpanan saat ini.

    Di tab Configure layanan ClickHouse di konsol EMR, tambahkan konfigurasi volume remote. Berikut contohnya:

    <default>
      <volumes>
        <single>
          <disk>disk1</disk>
          <disk>disk2</disk>
          <disk>disk3</disk>
          <disk>disk4</disk>
        </single>
        <!-- Berikut adalah volume remote yang baru ditambahkan. -->
        <remote>
          <disk>disk_hdfs</disk>
        </remote>
      </volumes>
      <!-- Anda harus menentukan move_factor saat menggunakan beberapa volume. -->
      <move_factor>0.2</move_factor>
    </default>
  3. Jalankan perintah berikut untuk mengubah TTL.

    ALTER TABLE <yourDataName>.<yourTableName>
      MODIFY TTL toStartOfMinute(addMinutes(t, 5)) TO VOLUME 'remote';
  4. Jalankan perintah berikut untuk melihat distribusi part data.

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

    Output berikut dikembalikan.

    ┌─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.
    Catatan

    Output ini menunjukkan bahwa data panas dan dingin dipisahkan berdasarkan TTL. Data panas disimpan di disk lokal, sedangkan data dingin disimpan di HDFS.

    Dalam output tersebut, /var/lib/clickhouse/disks/disk_hdfs adalah direktori metadata untuk disk_hdfs, dan /mnt/disk{1..4}/clickhouse adalah path untuk disk lokal.

Buat tabel baru

  • Sintaks

    CREATE TABLE <yourDataName>.<yourTableName> [ON CLUSTER cluster_emr]
    (
      column1 Type1,
      column2 Type2,
      ...
    ) Engine = MergeTree() -- Anda juga dapat menggunakan engine Replicated*MergeTree.
    PARTITION BY <yourPartitionKey>
    ORDER BY <yourPartitionKey>
    TTL <yourTtlKey> TO VOLUME 'remote'
    SETTINGS storage_policy='hdfs_ttl';
    Catatan

    Dalam perintah di atas, <yourPartitionKey> menunjukkan kunci partisi untuk tabel di kluster ClickHouse. <yourTtlKey> menunjukkan TTL yang Anda tentukan.

  • Contoh

    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';
    Catatan

    Dalam contoh ini, tabel menyimpan data lima menit terakhir di disk lokal. Setelah lima menit, data tersebut dipindahkan ke volume remote, yaitu HDFS.

Konfigurasi terkait

  • server-config

    merge_tree.allow_remote_fs_zero_copy_replication: Atur parameter ini ke true untuk mengaktifkan replikasi zero-copy untuk tabel Replicated*MergeTree yang menggunakan penyimpanan remote seperti DiskHDFS. Saat diaktifkan, ClickHouse menggunakan replikasi native dari sistem file remote. Alih-alih menyalin file data, hanya metadata yang direplikasi di antara replica berbeda dalam shard yang sama.

  • server-users

    profile.${your-profile-name}.hdfs_replication: Jumlah replika data yang disimpan di HDFS.