全部产品
Search
文档中心

E-MapReduce:Pisahkan data panas dan data dingin menggunakan OSS

更新时间:Jul 06, 2025

Topik ini menjelaskan cara memisahkan data panas dan data dingin dalam kluster ClickHouse dari Alibaba Cloud E-MapReduce (EMR) menggunakan Object Storage Service (OSS). Langkah-langkah ini membantu Anda secara otomatis memelihara data panas dan dingin di kluster, serta memanfaatkan sepenuhnya sumber daya komputasi dan penyimpanan untuk mengurangi biaya tanpa memengaruhi kinerja baca dan tulis kluster.

Prasyarat

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

Batasan

Operasi yang dijelaskan dalam topik ini hanya dapat dilakukan pada kluster ClickHouse EMR V5.7.0 atau yang lebih baru.

Prosedur

  1. Langkah 1: Tambahkan Disk OSS di Konsol EMR
  2. Langkah 2: Periksa Konfigurasi
  3. Langkah 3: Pisahkan Data Panas dan Data Dingin

Langkah 1: Tambahkan disk OSS di konsol EMR

  1. Buka tab Konfigurasi pada halaman layanan ClickHouse kluster.

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

    2. Di bilah navigasi atas, pilih wilayah tempat kluster berada dan pilih grup sumber daya sesuai dengan 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 di disks.
      Contoh kode:
      <disk_oss>
          <type>s3</type>
          <endpoint>http(s)://${yourBucketName}.${yourEndpoint}/${yourFlieName}</endpoint>
          <access_key_id>${yourAccessKeyId}</access_key_id>
          <secret_access_key>${yourAccessKeySecret}</secret_access_key>
          <send_metadata>false</send_metadata>
          <metadata_path>${yourMetadataPath}</metadata_path>
          <cache_enabled>true</cache_enabled>
          <cache_path>${yourCachePath}</cache_path>
          <skip_access_check>false</skip_access_check>
          <min_bytes_for_seek>1048576</min_bytes_for_seek>
          <thread_pool_size>16</thread_pool_size>
          <list_object_keys_size>1000</list_object_keys_size>
        </disk_oss>
      Tabel berikut menjelaskan parameter yang digunakan dalam kode di atas.
      ParameterDiperlukanDeskripsi
      disk_ossYaNama disk. Anda dapat menentukan nama kustom.
      typeYaJenis disk. Atur nilainya menjadi s3.
      endpointYaURL objek OSS. URL dalam format http(s)://${yourBucketName}.${yourEndpoint}/${yourFlieName}.
      Catatan Nilai parameter ini harus dimulai dengan http atau https. ${yourBucketName} menentukan nama Bucket OSS Anda. ${yourEndpoint} menentukan titik akhir Bucket OSS Anda. {yourFlieName} menentukan nama objek dalam Bucket OSS Anda. Sebagai contoh, Anda dapat mengatur parameter ini menjadi http://clickhouse.oss-cn-hangzhou-internal.aliyuncs.com/test.
      access_key_idYaID AccessKey akun Alibaba Cloud Anda.

      Untuk informasi lebih lanjut tentang cara mendapatkan ID AccessKey, lihat Dapatkan pasangan AccessKey.

      secret_access_keyYaRahasia AccessKey akun Alibaba Cloud Anda.

      Rahasia AccessKey digunakan untuk mengenkripsi dan memverifikasi string tanda tangan. Untuk informasi lebih lanjut tentang cara mendapatkan rahasia AccessKey, lihat Dapatkan pasangan AccessKey.

      send_metadataTidakMenentukan apakah akan menambahkan metadata saat Anda melakukan operasi pada objek OSS. Nilai valid:
      • true: Metadata ditambahkan saat Anda melakukan operasi pada objek OSS.
      • false: Metadata tidak ditambahkan saat Anda melakukan operasi pada objek OSS. Ini adalah nilai default.
      metadata_pathTidakJalur yang menyimpan pemetaan antara file lokal dan objek OSS.
      Nilai default: ${path}/disks/<disk_name>/.
      Catatan <disk_name> menentukan nama disk yang Anda tambahkan. <disk_name> sesuai dengan parameter disk_oss.
      cache_enabledTidakMenentukan apakah akan mengaktifkan fitur caching data. Nilai valid:
      • true: Mengaktifkan fitur caching data. Ini adalah nilai default.
      • false: Menonaktifkan fitur caching data.
      Fitur caching data memberikan manfaat berikut:
      • Fitur caching data di OSS dapat digunakan untuk mencache objek dalam format berikut secara lokal: .idx, .mrk, .mrk2, .mrk3, .txt, dan .dat. Objek dalam format lain diakses dari OSS daripada dari cache lokal.
      • Kapasitas cache lokal bervariasi berdasarkan kapasitas disk penyimpanan.
      • Data dalam cache lokal tidak dibersihkan menggunakan algoritma eviksi cache, seperti algoritma Least Recently Used (LRU). Keberadaan cache lokal bergantung pada time-to-live (TTL) objek.
      • Jika data yang ingin Anda baca dari OSS untuk pertama kali tidak ada di cache lokal, Anda dapat mengunduh objek yang berisi data dari OSS ke cache lokal.
      • Pertama kali Anda menulis data, data tersebut hanya ditulis ke cache lokal. Kemudian, data tersebut ditulis dari cache lokal ke OSS.
      • Jika Anda menghapus objek dari OSS, objek tersebut secara otomatis dihapus dari cache lokal. Jika Anda mengubah nama objek di OSS, objek tersebut secara otomatis diubah namanya di cache lokal.
      cache_pathTidakJalur cache lokal.

      Nilai default: ${path}/disks/<disk_name>/cache/.

      skip_access_checkTidakMenentukan apakah akan memeriksa apakah Anda memiliki izin baca dan tulis pada disk saat disk dimuat. Nilai valid:
      • true: Sistem memeriksa apakah Anda memiliki izin. Ini adalah nilai default.
      • false: Sistem tidak memeriksa apakah Anda memiliki izin.
      min_bytes_for_seekTidakJumlah minimum byte yang diperlukan untuk melakukan operasi seek. Jika jumlah byte kurang dari nilai parameter ini, operasi skip dilakukan sebagai ganti operasi seek. Nilai default: 1048576.
      thread_pool_sizeTidakUkuran thread pool yang digunakan untuk memproses permintaan restore di disk. Nilai default: 16.
      list_object_keys_sizeTidakJumlah maksimum objek yang dapat terdaftar dalam direktori objek pada saat bersamaan. Nilai default: 1000.
    2. Tambahkan kebijakan penyimpanan di policies.
      Contoh kode:
      <oss_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_oss</disk>
            </remote>
          </volumes>
          <move_factor>0.2</move_factor>
      </oss_ttl>
      Catatan 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. Sebarkan 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
    Catatan

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

  3. Eksekusi pernyataan 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_oss │ /var/lib/clickhouse/disks/disk_oss/ │ 18446744073709551615 │ 18446744073709551615 │               0 │ oss   │
    └──────────┴─────────────────────────────────────┴──────────────────────┴──────────────────────┴─────────────────┴───────┘
                                
  4. Eksekusi pernyataan berikut untuk melihat kebijakan penyimpanan:
    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 │
    │ oss_ttl     │ local       │               1 │ ['disk1','disk2','disk3','disk4']          │JBOD        │                  0 │          0.2 │                   0 │
    │ oss_ttl     │ remote      │               2 │ ['disk_oss']                         │JBOD        │                  0 │          0.2 │                   0 │
    └─────────────┴─────────────┴─────────────────┴───────────────────────────────────┴─────────────┴────────────────────┴─────────────┴─────────────────────┘
    Jika output di atas dikembalikan, disk OSS telah ditambahkan.

Langkah 3: Pisahkan data panas dan data dingin

Rekonstruksi tabel yang ada

  1. Eksekusi pernyataan berikut di klien ClickHouse untuk melihat kebijakan penyimpanan saat ini:
    SELECT
      storage_policy
    FROM system.tables
    WHERE database='<yourDatabaseName>' AND name='<yourTableName>';

    Dalam pernyataan di atas, <yourDataName> menentukan nama basis data. <yourTableName> menentukan nama tabel.

    Jika output berikut dikembalikan, Anda harus 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_oss</disk>
        </remote>
      </volumes>
      <!-- Jika Anda ingin menambahkan beberapa volume, tentukan move_factor. -->
      <move_factor>0.2</move_factor>
    </default>
  3. Eksekusi pernyataan berikut untuk mengubah TTL:
    ALTER TABLE <yourDataName>.<yourTableName>
      MODIFY TTL toStartOfMinute(addMinutes(t, 5)) TO VOLUME 'remote';
  4. Eksekusi pernyataan berikut untuk melihat distribusi setiap bagian 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-11 19:55:00 │ 1641902100_1_90_3_193    │ /var/lib/clickhouse/disks/disk_oss/store/fc5/fc50a391-4c16-406b-a396-6e1104873f68/1641902100_1_90_3_193/  │
    │ 2022-01-11 19:55:00 │ 1641902100_91_96_1_193   │ /var/lib/clickhouse/disks/disk_oss/store/fc5/fc50a391-4c16-406b-a396-6e1104873f68/1641902100_91_96_1_193/ │
    │ 2022-01-11 20:00:00 │ 1641902400_97_124_2_193  │ /mnt/disk3/clickhouse/store/fc5/fc50a391-4c16-406b-a396-6e1104873f68/1641902400_97_124_2_193/             │
    │ 2022-01-11 20:00:00 │ 1641902400_125_152_2_193 │ /mnt/disk2/clickhouse/store/fc5/fc50a391-4c16-406b-a396-6e1104873f68/1641902400_125_152_2_193/            │
    │ 2022-01-11 20:00:00 │ 1641902400_153_180_2_193 │ /mnt/disk4/clickhouse/store/fc5/fc50a391-4c16-406b-a396-6e1104873f68/1641902400_153_180_2_193/            │
    │ 2022-01-11 20:00:00 │ 16410_181_186_1_193 │ /mnt/disk3/clickhouse/store/fc5/fc50a391-4c16-406b-a396-6e1104873f68/1641902400_181_186_1_193/            │
    │ 2022-01-11 20:00:00 │ 1641902400_187_192_1_193 │ /mnt/disk4/clickhouse/store/fc5/fc50a391-4c16-406b-a396-6e1104873f68/1641902400_187_192_1_193/            │
    └─────────────────────┴──────────────────────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────┘
    
    7 baris dalam set. Waktu berlalu: 0,002 detik.
    Catatan Jika output di atas dikembalikan, data panas dan data dingin dipisahkan berdasarkan TTL. Data panas disimpan di disk lokal, dan data dingin disimpan di OSS.

    /var/lib/clickhouse/disks/disk_oss adalah nilai default dari parameter metadata_path untuk disk OSS. /mnt/disk{1..4}/clickhouse adalah jalur disk lokal.

Buat tabel

  • Sintaks
    CREATE TABLE <yourDataName>.<yourTableName> [ON CLUSTER cluster_emr]
    (
      column1 Type1,
      column2 Type2,
      ...
    ) Engine = MergeTree() -- atau Replicated*MergeTree()
    PARTITION BY <yourPartitionKey>
    ORDER BY <yourPartitionKey>
    TTL <yourTtlKey> TO VOLUME 'remote'
    SETTINGS storage_policy='oss_ttl';
    Catatan Dalam sintaks di atas, <yourPartitionKey> menentukan kunci partisi untuk tabel dalam kluster ClickHouse. <yourTtlKey> menentukan 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='oss_ttl';
    Catatan Dalam contoh ini, tabel bernama test.test hanya menyimpan data 5 menit terakhir di disk lokal. Data dipindahkan ke volume bernama remote di OSS 5 menit setelah data tersebut dibuat.

Parameter lainnya

  • server-config

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

  • server-users
    • profile.${your-profile-name}.s3_min_upload_part_size: Jika jumlah data dalam buffer tulis lebih besar dari nilai parameter ini, data ditulis ke OSS.
    • profile.${your-profile-name}.s3_max_single_part_upload_size}: Jika jumlah data dalam buffer tulis lebih besar dari nilai parameter ini, operasi MultipartUpload digunakan. Untuk informasi lebih lanjut, lihat .