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
Langkah 1: Tambahkan disk HDFS
-
Buka halaman konfigurasi layanan ClickHouse.
-
Di bilah navigasi atas, pilih Wilayah dan kelompok sumber daya.
-
Di halaman EMR on ECS, temukan kluster Anda lalu klik Services di kolom Actions.
-
Di halaman Services, klik Configure di bagian ClickHouse.
-
Di tab Configure, klik tab server-metrika.
-
Ubah nilai parameter storage_configuration.
-
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.
PentingTitik 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
skipakan 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.
-
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>CatatanAnda juga dapat menambahkan konfigurasi ini langsung ke kebijakan default.
-
-
Simpan konfigurasi.
-
Di halaman Configure layanan ClickHouse, klik Save.
-
Di kotak dialog Modify Information, masukkan alasan, aktifkan sakelar Save and Deliver Configuration, lalu klik Save.
-
-
Terapkan konfigurasi Klien.
-
Di halaman Configure layanan ClickHouse, klik Deploy Client Configuration.
-
Di kotak dialog Deploy Client Configuration, masukkan alasan lalu klik OK.
-
Di 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 client 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;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 │ └──────────┴──────────────────────────────────────┴──────────────────────┴──────────────────────┴─────────────────┴───────┘ -
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
-
Lihat kebijakan penyimpanan saat ini.
-
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>
-
-
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> -
Jalankan perintah berikut untuk mengubah TTL.
ALTER TABLE <yourDataName>.<yourTableName> MODIFY TTL toStartOfMinute(addMinutes(t, 5)) TO VOLUME 'remote'; -
Jalankan perintah berikut untuk melihat distribusi part data.
select partition,name,path from system.parts where database='<yourDataName>' and table='<yourTableName>' and active=1Output 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.CatatanOutput 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';CatatanDalam 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';CatatanDalam 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
trueuntuk mengaktifkan replikasi zero-copy untuk tabelReplicated*MergeTreeyang menggunakan penyimpanan remote sepertiDiskHDFS. 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.