全部产品
Search
文档中心

E-MapReduce:Memisahkan data panas dan dingin menggunakan HDFS

更新时间:Jun 24, 2025

Topik ini menjelaskan cara memisahkan data panas dan dingin dalam kluster ClickHouse dari Alibaba Cloud E-MapReduce (EMR) menggunakan Hadoop Distributed File System (HDFS). Operasi yang dijelaskan membantu Anda secara otomatis memelihara data panas dan dingin dalam kluster, serta memanfaatkan sumber daya komputasi dan penyimpanan secara optimal untuk mengurangi biaya tanpa memengaruhi kinerja baca dan tulis kluster.

Prasyarat

  • Kluster ClickHouse EMR V5.5.0 atau lebih baru telah dibuat di konsol EMR. Untuk informasi lebih lanjut, lihat Buat Kluster ClickHouse.

  • Layanan HDFS tersedia di virtual private cloud (VPC) yang sama dengan kluster ClickHouse. Sebagai contoh, Anda dapat menggunakan layanan HDFS dalam kluster EMR Hadoop.

  • Anda memiliki izin baca dan tulis pada layanan HDFS.

Batasan

Operasi yang dijelaskan hanya dapat dilakukan di dalam kluster ClickHouse EMR V5.5.0 atau lebih baru.

Prosedur

  1. Langkah 1: Tambahkan Disk HDFS di Konsol EMR

  2. Langkah 2: Periksa Konfigurasi

  3. Langkah 3: Pisahkan Data Panas dan Dingin

Langkah 1: Tambahkan disk HDFS di konsol EMR

  1. Buka tab Konfigurasi pada halaman layanan ClickHouse kluster.

    1. Masuk ke konsol EMR. Di bilah navigasi sebelah kiri, klik EMR on ECS.

    2. Di bilah navigasi atas, pilih wilayah tempat kluster berada dan pilih grup sumber daya sesuai kebutuhan bisnis Anda.

    3. Di halaman EMR on ECS, temukan kluster yang ingin dikelola dan klik Services di kolom Aksi.

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

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

  3. Ubah nilai parameter storage_configuration.

    1. Tambahkan disk HDFS ke disks.

      Contoh kode:

      <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 yang digunakan dalam kode di atas.

      Parameter

      Diperlukan

      Deskripsi

      disk_hdfs

      Ya

      Nama disk. Anda dapat menentukan nama kustom.

      type

      Ya

      Jenis disk. Atur nilainya menjadi hdfs.

      endpoint

      Ya

      Titik akhir layanan HDFS.

      null

      Dalam banyak kasus, titik akhir layanan HDFS adalah alamat NameNode. Dalam banyak kasus, jika NameNode diterapkan dalam mode high availability (HA), nomor port layanan HDFS adalah 8020. Jika tidak, nomor port layanan HDFS adalah 9000.

      min_bytes_for_seek

      Tidak

      Offset seek positif minimum yang akan dieksekusi menggunakan operasi seek. Jika offset seek positif kurang dari nilai parameter ini, operasi skip dilakukan sebagai ganti operasi seek. Nilai default: 1048576.

      thread_pool_size

      Tidak

      Ukuran thread pool yang digunakan untuk memproses permintaan pemulihan di disk. Nilai default: 16.

      objects_chunk_size_to_delete

      Tidak

      Jumlah maksimum file HDFS yang dapat dihapus secara bersamaan. Nilai default: 1000.

    2. Tambahkan kebijakan penyimpanan ke policies.

      Contoh kode:

      <hdfs_ttl>
          <volumes>
            <local>
              <!-- Sertakan semua disk yang menggunakan 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>
      null

      Anda juga dapat menambahkan kode di atas ke kebijakan penyimpanan default.

  4. Simpan konfigurasi.

    1. Klik Save.

    2. Di kotak dialog yang muncul, konfigurasikan parameter Alasan Eksekusi, aktifkan saklar Save and Deliver Configuration, lalu klik Save.

  5. Terapkan konfigurasi klien.

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

    2. Di kotak dialog yang muncul, konfigurasikan parameter Alasan Eksekusi dan klik OK.

    3. Di pesan Confirm, klik OK.

Langkah 2: Periksa konfigurasi

  1. Masuk ke kluster ClickHouse dalam mode SSH. Untuk informasi lebih lanjut, lihat Masuk ke Kluster.

  2. Jalankan perintah berikut untuk memulai klien ClickHouse:

    clickhouse-client -h core-1-1 -m
    null

    Dalam perintah contoh, core-1-1 menunjukkan nama node inti yang Anda masuki. Jika Anda memiliki beberapa node inti, Anda dapat masuk ke salah satu node tersebut.

  3. Eksekusi pernyataan berikut untuk melihat informasi disk:

    select * from system.disks;

    Keluaran 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. Eksekusi pernyataan berikut untuk melihat kebijakan penyimpanan disk:

    select * from system.storage_policies;

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

    Jika keluaran di atas dikembalikan, disk HDFS telah ditambahkan.

Langkah 3: Pisahkan data panas dan dingin

Rekonstruksi tabel yang ada

  1. Lihat kebijakan penyimpanan saat ini.

    1. Jalankan perintah berikut di klien ClickHouse untuk melihat informasi disk:

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

      Dalam perintah di atas, <database_name> menunjukkan nama basis data, dan <table_name> menunjukkan nama tabel.

      Jika keluaran berikut dikembalikan, Anda perlu melakukan langkah selanjutnya untuk menambahkan volume:

      <default>
        <volumes>
          <single>
            <disk>disk1</disk>
            <disk>disk2</disk>
            <disk>disk3</disk>
            <disk>disk4</disk>
          </single>
        </volumes>
      </default>
  2. Tambahkan volume.

    Di tab Konfigurasi halaman layanan ClickHouse di konsol EMR, tambahkan volume ke volumes. Contoh kode:

    <default>
      <volumes>
        <single>
          <disk>disk1</disk>
          <disk>disk2</disk>
          <disk>disk3</disk>
          <disk>disk4</disk>
        </single>
        <!-- Volume berikut bernama remote ditambahkan. -->
        <remote>
          <disk>disk_hdfs</disk>
        </remote>
      </volumes>
      <!-- Jika Anda ingin menambahkan beberapa volume, tentukan move_factor. -->
      <move_factor>0.2</move_factor>
    </default>
  3. Jalankan perintah berikut untuk mengubah time-to-live (TTL):

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

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

    Keluaran 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.
    null

    Jika keluaran di atas dikembalikan, data panas dan dingin dipisahkan berdasarkan TTL. Data panas disimpan di disk lokal, dan data dingin disimpan di HDFS.

    /var/lib/clickhouse/disks/disk_hdfs adalah jalur yang menyimpan metadata disk HDFS. /mnt/disk{1..4}/clickhouse adalah jalur disk lokal.

Buat tabel

  • Sintaksis

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

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

  • Contoh Kode

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

    Dalam contoh ini, tabel bernama test.test hanya menyimpan data 5 menit terakhir di disk lokal. Lima menit setelah data dihasilkan, data dipindahkan ke volume bernama remote, yang berada di HDFS.

Parameter lainnya

  • server-config

    merge_tree.allow_remote_fs_zero_copy_replication: Atur nilainya menjadi true. Dengan cara ini, mesin tipe Replicated*MergeTree mereplikasi metadata yang menunjuk ke disk HDFS untuk menghasilkan beberapa replika metadata untuk shard yang sama di kluster ClickHouse.

  • server-users

    profile.${your-profile-name}.hdfs_replication: Menentukan jumlah replika data yang dihasilkan di HDFS.