Dalam skenario edge, mesin akselerasi dataset Fluid dapat secara signifikan meningkatkan akses file OSS dari node edge. Topik ini menjelaskan cara menggunakan akselerasi data Fluid di kluster ACK Edge.
Prasyarat
Kluster ACK Edge versi 1.18 atau lebih baru telah dibuat.
Kelompok node edge telah dibuat dan node edge telah ditambahkan.
Suite AI cloud-native telah diinstal dengan add-on ack-fluid yang dideploy.
PentingJika Fluid open-source telah diinstal, uninstal terlebih dahulu sebelum mendeploy ack-fluid.
Jika suite AI cloud-native belum diinstal: aktifkan Fluid data acceleration saat Anda menginstal suite tersebut.
Jika suite AI cloud-native sudah diinstal: deploy ack-fluid pada halaman Cloud-native AI Suite di ACK Console.
Kluster telah terhubung dengan kubectl.
OSS telah diaktifkan.
Langkah 1: Siapkan data OSS
Unduh data uji ke instance ECS.
wget https://archive.apache.org/dist/spark/spark-3.0.1/spark-3.0.1-bin-hadoop2.7.tgzUnggah data uji yang telah diunduh ke bucket OSS.
PentingLangkah-langkah ini menggunakan Alibaba Cloud Linux 3.2104 LTS 64-bit. Untuk sistem lainnya, lihat ossutil quick start dan ossutil command reference 1.0.
Buat bucket bernama
examplebucket.Buat
examplebucket.ossutil mb oss://examplebucketexamplebucketberhasil dibuat:0.668238(s) elapsed
Unggah data uji ke
examplebucket.ossutil cp spark-3.0.1-bin-hadoop2.7.tgz oss://examplebucket
Langkah 2: Buat Dataset dan JindoRuntime
Buat file bernama
mySecret.yamldengan konten berikut. Gantixxxdengan ID AccessKey dan Rahasia AccessKey yang memiliki akses baca ke bucket OSS yang Anda buat di Langkah 1.apiVersion: v1 kind: Secret metadata: name: mysecret stringData: fs.oss.accessKeyId: xxx fs.oss.accessKeySecret: xxxTerapkan Secret tersebut. Kubernetes mengenkripsi nilai yang disimpan sehingga tidak terekspos sebagai teks biasa.
kubectl create -f mySecret.yamlBuat file
resource.yamldengan konten berikut:Definisikan Dataset yang menggambarkan penyimpanan remote dan sistem file dasar (UFS).
Buat JindoRuntime untuk meluncurkan kluster JindoFS guna caching data.
apiVersion: data.fluid.io/v1alpha1 kind: Dataset metadata: name: hadoop spec: nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: alibabacloud.com/nodepool-id operator: In values: - npxxxxxxxxxxxxxx mounts: - mountPoint: oss://<oss_bucket>/<bucket_dir> options: fs.oss.endpoint: <oss_endpoint> name: hadoop path: "/" encryptOptions: - name: fs.oss.accessKeyId valueFrom: secretKeyRef: name: mysecret key: fs.oss.accessKeyId - name: fs.oss.accessKeySecret valueFrom: secretKeyRef: name: mysecret key: fs.oss.accessKeySecret --- apiVersion: data.fluid.io/v1alpha1 kind: JindoRuntime metadata: name: hadoop spec: nodeSelector: alibabacloud.com/nodepool-id: npxxxxxxxxxxxxxx replicas: 2 tieredstore: levels: - mediumtype: MEM path: /dev/shm volumeType: emptyDir quota: 2Gi high: "0.99" low: "0.95"CatatanDalam kluster ACK Edge, gunakan
nodeAffinitydannodeSelectoruntuk mendeploy Dataset dan JindoRuntime ke kelompok node yang sama agar node dalam kelompok tersebut dapat berkomunikasi.Manajemen node edge dan akses OSS keduanya memerlukan komunikasi cloud-to-edge. Pertahankan lebar pita jaringan yang cukup untuk menghindari ketidakstabilan saluran kontrol.
Parameter:
Parameter
Deskripsi
mountPoint
oss://<oss_bucket>/<bucket_dir>. Jalur mount UFS. Harus mengarah ke direktori. File tunggal tidak dapat dimount. Jangan sertakan endpoint.fs.oss.endpoint
Endpoint publik atau internal bucket OSS. Lihat Regions and endpoints.
replicas
Jumlah worker dalam kluster caching JindoFS.
mediumtype
Media penyimpanan cache. Nilai yang valid:
HDD,SSD,MEM.path
Jalur penyimpanan lokal pada node pekerja. Hanya satu jalur yang diperbolehkan. Wajib ditentukan saat
mediumtypeadalahMEMuntuk menyimpan data seperti log.quota
Ukuran cache maksimum per worker. Anda tidak dapat memperluas kapasitas cache dengan mengubah
quota. Setelah Anda mengubah nilainya, JindoRuntime melaporkan perubahan tersebut sebagai sukses, tetapi kapasitas cache baru tidak berlaku pada Dataset. Untuk mengubah kapasitas cache, hapus CR JindoRuntime dan buat kembali.high
Ambang batas eviksi cache (watermark tinggi). Ketika penggunaan melebihi rasio ini, eviksi dimulai.
low
Ambang batas retensi cache (watermark rendah). Eviksi berhenti ketika penggunaan turun ke rasio ini.
Buat Dataset dan JindoRuntime.
kubectl create -f resource.yamlVerifikasi bahwa Dataset telah terikat.
kubectl get dataset hadoopOutput yang diharapkan:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE hadoop 210MiB 0.00B 4.00GiB 0.0% Bound 1hVerifikasi bahwa JindoRuntime siap.
kubectl get jindoruntime hadoopOutput yang diharapkan:
NAME MASTER PHASE WORKER PHASE FUSE PHASE AGE hadoop Ready Ready Ready 4m45sVerifikasi bahwa volume persisten (PV) dan klaim volume persisten (PVC) telah dibuat.
kubectl get pv,pvcOutput yang diharapkan:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE persistentvolume/default-hadoop 100Pi ROX Retain Bound default/hadoop 52m NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE persistentvolumeclaim/hadoop Bound default-hadoop 100Pi ROX 52m
Dataset dan JindoRuntime siap digunakan ketika semua fase menunjukkan Ready dan status PVC adalah Bound.
Langkah 3: Uji akselerasi akses data
Deploy pod yang memasang PVC Dataset dan bandingkan waktu baca file sebelum dan sesudah data dicache.
Buat file app.yaml:
apiVersion: v1 kind: Pod metadata: name: demo-app spec: nodeSelector: alibabacloud.com/nodepool-id: npxxxxxxxxxxxxx containers: - name: demo image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 volumeMounts: - mountPath: /data name: hadoop volumes: - name: hadoop persistentVolumeClaim: claimName: hadoopCatatanDalam kluster ACK Edge, gunakan
nodeSelectoruntuk mendeploy pod uji ke kelompok node di Langkah 2.Deploy pod tersebut.
kubectl create -f app.yamlBuka shell di dalam pod dan periksa ukuran file.
kubectl exec -it demo-app -- bash du -sh /data/hadoop/spark-3.0.1-bin-hadoop2.7.tgzOutput yang diharapkan:
210M /data/hadoop/spark-3.0.1-bin-hadoop2.7.tgzUkur waktu baca awal. Akses ini langsung dari OSS, tanpa cache.
time cp /data/hadoop/spark-3.0.1-bin-hadoop2.7.tgz /dev/nullOutput yang diharapkan:
real 0m18.386s user 0m0.002s sys 0m0.105sMembaca file membutuhkan waktu sekitar 18 detik.
Periksa data yang telah dicache setelah pembacaan.
kubectl get dataset hadoopOutput yang diharapkan:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE hadoop 210.00MiB 210.00MiB 4.00GiB 100.0% Bound 1hSeluruh 210 MiB kini telah dicache di penyimpanan lokal.
Hapus dan buat ulang pod untuk membersihkan cache halaman OS, sehingga pembacaan berikutnya berasal dari cache JindoFS, bukan dari memori.
kubectl delete -f app.yaml && kubectl create -f app.yamlUkur kembali waktu baca dengan data yang disajikan dari cache.
kubectl exec -it demo-app -- bash time cp /data/hadoop/spark-3.0.1-bin-hadoop2.7.tgz /dev/nullOutput yang diharapkan:
real 0m0.048s user 0m0.001s sys 0m0.046sDengan cache JindoFS, pembacaan file yang sama selesai dalam 48 milidetik — lebih dari 300 kali lebih cepat dibandingkan akses langsung ke OSS.
(Opsional) Pembersihan
Jika akselerasi data tidak lagi diperlukan, hapus pod, Dataset, dan JindoRuntime.
Hapus pod:
kubectl delete pod demo-appHapus Dataset dan JindoRuntime:
kubectl delete dataset hadoop