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
Langkah 1: Tambahkan disk OSS di konsol EMR
Buka tab Konfigurasi pada halaman layanan ClickHouse kluster.
Masuk ke konsol EMR. Di panel navigasi sebelah kiri, klik EMR on ECS.
Di bilah navigasi atas, pilih wilayah tempat kluster berada dan pilih grup sumber daya sesuai dengan 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 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.Parameter Diperlukan Deskripsi disk_oss Ya Nama disk. Anda dapat menentukan nama kustom. type Ya Jenis disk. Atur nilainya menjadi s3. endpoint Ya URL 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 menjadihttp://clickhouse.oss-cn-hangzhou-internal.aliyuncs.com/test.access_key_id Ya ID AccessKey akun Alibaba Cloud Anda. Untuk informasi lebih lanjut tentang cara mendapatkan ID AccessKey, lihat Dapatkan pasangan AccessKey.
secret_access_key Ya Rahasia 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_metadata Tidak Menentukan 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_path Tidak Jalur 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_enabled Tidak Menentukan 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_path Tidak Jalur cache lokal. Nilai default: ${path}/disks/<disk_name>/cache/.
skip_access_check Tidak Menentukan 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_seek Tidak Jumlah 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_size Tidak Ukuran thread pool yang digunakan untuk memproses permintaan restoredi disk. Nilai default: 16.list_object_keys_size Tidak Jumlah maksimum objek yang dapat terdaftar dalam direktori objek pada saat bersamaan. Nilai default: 1000. - 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.
- Tambahkan disk di disks.
Simpan konfigurasi.
Klik Save.
Di kotak dialog yang muncul, konfigurasikan parameter Alasan Eksekusi, aktifkan saklar Save and Deliver Configuration, lalu klik Save.
Sebarkan 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 -mCatatanDalam 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.
- 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 │ └──────────┴─────────────────────────────────────┴──────────────────────┴──────────────────────┴─────────────────┴───────┘ - 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
- 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> - 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> - Eksekusi pernyataan berikut untuk mengubah TTL:
ALTER TABLE <yourDataName>.<yourTableName> MODIFY TTL toStartOfMinute(addMinutes(t, 5)) TO VOLUME 'remote'; - Eksekusi pernyataan berikut untuk melihat distribusi setiap bagian data:
select partition,name,path from system.parts where database='<yourDataName>' and table='<yourTableName>' and active=1Output 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 .