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
Langkah 1: Tambahkan disk HDFS di konsol EMR
Buka tab Konfigurasi pada halaman layanan ClickHouse kluster.
Masuk ke konsol EMR. Di bilah navigasi sebelah kiri, klik EMR on ECS.
Di bilah navigasi atas, pilih wilayah tempat kluster berada dan pilih grup sumber daya sesuai kebutuhan bisnis Anda.
Di halaman EMR on ECS, temukan kluster yang ingin dikelola dan klik Services di kolom Aksi.
Di tab Services, klik Configure di bagian ClickHouse.
Di tab Configure, klik tab server-metrika.
Ubah nilai parameter storage_configuration.
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.
nullDalam 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.
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>nullAnda juga dapat menambahkan kode di atas ke kebijakan penyimpanan default.
Simpan konfigurasi.
Klik Save.
Di kotak dialog yang muncul, konfigurasikan parameter Alasan Eksekusi, aktifkan saklar Save and Deliver Configuration, lalu klik Save.
Terapkan konfigurasi klien.
Di tab Configure halaman layanan ClickHouse, klik Deploy Client Configuration.
Di kotak dialog yang muncul, konfigurasikan parameter Alasan Eksekusi dan klik OK.
Di pesan Confirm, klik OK.
Langkah 2: Periksa konfigurasi
Masuk ke kluster ClickHouse dalam mode SSH. Untuk informasi lebih lanjut, lihat Masuk ke Kluster.
Jalankan perintah berikut untuk memulai klien ClickHouse:
clickhouse-client -h core-1-1 -mnullDalam 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.
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 │ └──────────┴──────────────────────────────────────┴──────────────────────┴──────────────────────┴─────────────────┴───────┘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
Lihat kebijakan penyimpanan saat ini.
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>
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>Jalankan perintah berikut untuk mengubah time-to-live (TTL):
ALTER TABLE <yourDataName>.<yourTableName> MODIFY TTL toStartOfMinute(addMinutes(t, 5)) TO VOLUME 'remote';Jalankan perintah berikut untuk melihat distribusi setiap bagian data:
select partition,name,path from system.parts where database='<yourDataName>' and table='<yourTableName>' and active=1Keluaran 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.nullJika 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';nullDalam 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';nullDalam 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.