Topik ini menjelaskan cara menggunakan OSS untuk menerapkan pemisahan data hot/cold pada kluster ClickHouse di Alibaba Cloud E-MapReduce (EMR). Metode ini memungkinkan Anda mengelola data hot dan cold secara otomatis, mempertahankan performa sekaligus mengoptimalkan sumber daya komputasi dan penyimpanan guna mengurangi biaya.
Prasyarat
Anda telah membuat kluster ClickHouse yang menjalankan EMR V5.7.0 atau versi lebih baru di Konsol E-MapReduce (EMR). Untuk informasi selengkapnya, lihat Buat kluster ClickHouse.
Batasan
Operasi yang dijelaskan dalam topik ini hanya berlaku untuk kluster ClickHouse yang menjalankan EMR V5.7.0 atau versi lebih baru.
Prosedur
Langkah 1: Tambahkan disk melalui Konsol EMR
-
Buka halaman konfigurasi layanan ClickHouse.
-
Di bilah navigasi atas, pilih wilayah dan kelompok sumber daya.
-
Pada halaman EMR on ECS, temukan kluster Anda lalu klik Services di kolom Actions.
-
Pada halaman Services, klik Configure di bagian ClickHouse.
-
Pada halaman Configure, klik tab server-metrika.
-
Ubah parameter storage_configuration.
-
Di disks, tambahkan sebuah disk.
Kode berikut menunjukkan konfigurasi yang diperlukan.
<disk_oss> <type>s3</type> <endpoint>http(s)://${yourBucketName}.${yourEndpoint}/${yourFlieName}</endpoint> <access_key_id>${YOUR_ACCESS_KEY_ID}</access_key_id> <secret_access_key>${YOUR_ACCESS_KEY_SECRET}</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 tersebut.
Parameter
Wajib
Deskripsi
disk_oss
Ya
Nama kustom untuk disk.
type
Ya
Tipe disk. Tetapkan nilai ini ke s3.
endpoint
Ya
Titik akhir layanan OSS. Formatnya adalah http(s)://${yourBucketName}.${yourEndpoint}/${yourFlieName}.
CatatanNilai parameter endpoint harus diawali dengan http atau https. Dalam format tersebut,
${yourBucketName}adalah nama Bucket OSS Anda,${yourEndpoint}adalah titik akhir OSS, dan${yourFlieName}adalah awalan path di OSS. Contoh:http://clickhouse.oss-cn-hangzhou-internal.aliyuncs.com/test.access_key_id
Ya
ID AccessKey Akun Alibaba Cloud Anda.
Untuk informasi tentang cara mendapatkan ID AccessKey, lihat Dapatkan Pasangan Kunci Akses.
secret_access_key
Ya
Rahasia AccessKey Akun Alibaba Cloud Anda.
Kunci ini digunakan untuk mengenkripsi dan memverifikasi string signature OSS. Untuk informasi tentang cara mendapatkan Rahasia AccessKey, lihat Dapatkan Pasangan Kunci Akses.
send_metadata
Tidak
Menentukan apakah metadata ditambahkan saat Anda melakukan operasi pada file OSS. Nilai yang valid:
-
true: Menambahkan metadata.
-
false (default): Tidak menambahkan metadata.
metadata_path
Tidak
Jalur penyimpanan untuk pemetaan antara file lokal dan objek OSS.
Nilai default: ${path}/disks/<disk_name>/.
Catatan<disk_name>adalah nama disk, yaitu disk_oss dalam contoh ini.cache_enabled
Tidak
Menentukan apakah caching diaktifkan. Nilai yang valid:
-
true (default): Mengaktifkan caching.
-
false: Menonaktifkan caching.
Cara kerja cache:
-
Cache hanya digunakan untuk caching lokal file dengan ekstensi berikut: .idx, .mrk, .mrk2, .mrk3, .txt, dan .dat. File dengan ekstensi lain dibaca langsung dari OSS, bukan dari cache.
-
Cache lokal tidak memiliki batas kapasitas. Kapasitas maksimumnya sama dengan kapasitas disk penyimpanan.
-
Cache lokal tidak dibersihkan oleh kebijakan seperti least recently used (LRU). Cache tetap ada selama siklus hidup file tersebut.
-
Saat data pertama kali dibaca, file diunduh dari OSS ke cache jika belum tersedia di cache.
-
Saat data pertama kali ditulis, data disimpan di cache lokal sebelum diunggah ke OSS.
-
Jika suatu objek dihapus dari OSS, objek tersebut juga dihapus dari cache lokal. Jika suatu objek diganti namanya di OSS, nama tersebut juga diperbarui di cache lokal.
cache_path
Tidak
Jalur cache.
Nilai default: ${path}/disks/<disk_name>/cache/.
skip_access_check
Tidak
Menentukan apakah pemeriksaan izin baca dan tulis dilewati saat disk dimuat. Nilai yang valid:
-
true: Melewati pemeriksaan.
-
false (default): Melakukan pemeriksaan.
min_bytes_for_seek
Tidak
Jumlah byte minimum untuk operasi seek. Jika nilainya di bawah ambang batas ini, operasi read-and-skip dilakukan alih-alih seek langsung. Nilai default: 1048576.
thread_pool_size
Tidak
Ukuran kolam thread yang digunakan oleh disk untuk menjalankan perintah
restore. Nilai default: 16.list_object_keys_size
Tidak
Jumlah maksimum objek yang dikembalikan per permintaan daftar untuk awalan tertentu. Nilai default: 1000.
-
-
Tambahkan kebijakan baru di policies.
Konten kebijakan sebagai berikut.
<oss_ttl> <volumes> <local> <!-- Includes all disks under the default storage policy --> <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>CatatanAnda juga dapat menambahkan konfigurasi ini langsung ke kebijakan default.
-
-
Terapkan konfigurasi Klien.
-
Pada halaman Configure layanan ClickHouse, klik Deploy Client Configuration.
-
Pada kotak dialog Deploy CLICKHOUSE Client Configuration, masukkan alasan tindakan lalu klik OK.
-
Pada kotak dialog Confirm, klik OK.
-
-
Terapkan konfigurasi klien.
-
Pada halaman Configure layanan ClickHouse, klik Deploy Client Configuration.
-
Pada kotak dialog Deploy CLICKHOUSE Client Configuration, masukkan alasan tindakan lalu klik OK.
-
Pada kotak dialog Confirm, klik OK.
-
Langkah 2: Verifikasi konfigurasi
-
Login ke kluster ClickHouse menggunakan SSH. Untuk informasi selengkapnya, lihat Login ke kluster.
-
Jalankan perintah berikut untuk memulai klien ClickHouse:
clickhouse-client -h core-1-1 -mCatatanContoh ini login ke node
core-1-1. Jika Anda memiliki beberapa node core, Anda dapat login ke salah satunya. -
Jalankan perintah berikut untuk melihat informasi disk.
select * from system.disks;Contoh output:
┌─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 │ └──────────┴─────────────────────────────────────┴──────────────────────┴──────────────────────┴─────────────────┴───────┘ -
Jalankan perintah berikut untuk melihat kebijakan penyimpanan disk.
select * from system.storage_policies;Contoh output:
┌─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 Anda mirip dengan contoh, konfigurasi disk sudah benar.
Langkah 3: Terapkan pemisahan data hot/cold
Ubah tabel yang sudah ada
-
Jalankan perintah berikut untuk memeriksa kebijakan penyimpanan tabel saat ini:
SELECT storage_policy FROM system.tables WHERE database='<yourDatabaseName>' AND name='<yourTableName>';Dalam perintah ini,
<yourDatabaseName>adalah nama database dan<yourTableName>adalah nama tabel.Jika perintah mengembalikan nilai default, tabel tersebut menggunakan kebijakan default. Anda dapat memperluas kebijakan ini pada langkah berikutnya.
<default> <volumes> <single> <disk>disk1</disk> <disk>disk2</disk> <disk>disk3</disk> <disk>disk4</disk> </single> </volumes> </default> -
Perluas kebijakan penyimpanan saat ini.
Di Konsol EMR, tambahkan volume remote ke kebijakan penyimpanan
defaultdalam konfigurasi ClickHouse:<default> <volumes> <single> <disk>disk1</disk> <disk>disk2</disk> <disk>disk3</disk> <disk>disk4</disk> </single> <!-- The following is the new remote volume --> <remote> <disk>disk_oss</disk> </remote> </volumes> <!-- You must specify move_factor when there are multiple volumes --> <move_factor>0.2</move_factor> </default> -
Jalankan perintah berikut untuk menetapkan aturan TTL yang memindahkan data lama ke volume
remote:ALTER TABLE <yourDataName>.<yourTableName> MODIFY TTL toStartOfMinute(addMinutes(t, 5)) TO VOLUME 'remote'; -
Jalankan perintah berikut untuk memeriksa distribusi bagian data di berbagai disk:
select partition,name,path from system.parts where database='<yourDataName>' and table='<yourTableName>' and active=1Contoh output:
┌─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 │ 1641902400_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 rows in set. Elapsed: 0.002 sec.CatatanJika output mirip dengan contoh, data dipisahkan menjadi tier hot dan cold berdasarkan waktu. Data hot disimpan di disk lokal, sedangkan data cold disimpan di OSS.
Dalam output tersebut, /var/lib/clickhouse/disks/disk_oss adalah jalur untuk data cold (sesuai dengan parameter metadata_path). Jalur seperti /mnt/disk{1..4}/clickhouse mengarah ke disk lokal (data hot).
Buat tabel baru
-
Sintaks
CREATE TABLE <yourDataName>.<yourTableName> [ON CLUSTER cluster_emr] ( column1 Type1, column2 Type2, ... ) Engine = MergeTree() -- or Replicated*MergeTree() PARTITION BY <yourPartitionKey> ORDER BY <yourPartitionKey> TTL <yourTtlKey> TO VOLUME 'remote' SETTINGS storage_policy='oss_ttl';CatatanDalam perintah ini, <yourPartitionKey> adalah kunci partisi untuk ClickHouse, dan <yourTtlKey> adalah ekspresi TTL yang menentukan kapan data menjadi cold.
-
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';CatatanDalam contoh ini, tabel menyimpan data yang dihasilkan dalam 5 menit terakhir di disk lokal. Setelah 5 menit, ClickHouse memindahkan data tersebut ke volume remote, yaitu OSS.
Konfigurasi terkait
-
server-config
merge_tree.allow_remote_fs_zero_copy_replication: Saat diatur ke
true, ini memungkinkan tabelReplicated*MergeTreepada penyimpanan remote (seperti DiskOSS) berbagi bagian data. Alih-alih menyalin data antar replika, setiap replika hanya menyimpan metadata-nya sendiri yang mengarah ke data bersama di OSS. -
server-users
-
profile.${your-profile-name}.s3_min_upload_part_size: Ukuran minimum satu bagian untuk unggah multi-bagian ke OSS.
-
profile.${your-profile-name}.s3_max_single_part_upload_size: Jika jumlah data dalam buffer penulisan melebihi nilai ini, ClickHouse menggunakan unggah multi-bagian. Untuk informasi selengkapnya, lihat .
-