JindoRuntime adalah mesin eksekusi JindoFS yang dikembangkan oleh tim Alibaba Cloud E-MapReduce (EMR). Berbasis C++, JindoRuntime menyediakan manajemen dataset dan caching serta mendukung Object Storage Service (OSS). Alibaba Cloud menawarkan dukungan tingkat layanan cloud untuk JindoFS. Fluid memungkinkan observabilitas, penskalaan otomatis, dan portabilitas dataset dengan mengelola dan menjadwalkan JindoRuntime. Topik ini menjelaskan cara menggunakan JindoFS untuk mempercepat akses ke OSS.
Prasyarat
Sebuah kluster Container Service for Kubernetes (ACK) Pro dengan non-containerOS telah dibuat, dan versi Kubernetes dari kluster tersebut adalah 1.18 atau lebih baru. Untuk informasi lebih lanjut, lihat Buat kluster ACK Pro.
PentingKomponen ack-fluid saat ini tidak didukung pada ContainerOS.
Suite AI cloud-native telah diinstal dan komponen ack-fluid telah diterapkan.
PentingJika Anda sudah menginstal Fluid open source, uninstall Fluid dan terapkan komponen ack-fluid.
Jika Anda belum menginstal suite AI cloud-native, aktifkan Fluid acceleration saat Anda menginstal suite tersebut. Untuk informasi lebih lanjut, lihat Terapkan suite AI cloud-native.
Jika Anda sudah menginstal suite AI cloud-native, buka halaman Cloud-native AI Suite dari Konsol ACK dan terapkan komponen ack-fluid.
Klien kubectl terhubung ke kluster ACK Pro. Untuk informasi lebih lanjut, lihat Hubungkan ke kluster menggunakan kubectl.
OSS telah diaktifkan. Untuk informasi lebih lanjut, lihat Aktifkan OSS.
Langkah 1: Unggah data ke OSS
Jalankan perintah berikut untuk mengunduh set data uji ke Instance ECS:
wget https://archive.apache.org/dist/spark/spark-3.0.1/spark-3.0.1-bin-hadoop2.7.tgzUnggah set data uji ke OSS bucket.
PentingContoh ini menjelaskan cara mengunggah set data uji ke OSS dari Instance ECS yang menjalankan sistem operasi Alibaba Cloud Linux 3.2104 LTS 64-bit. Jika Anda menggunakan sistem operasi lain, lihat ossutil dan ossutil 1.0.
Buat bucket bernama
examplebucket.Jalankan perintah berikut untuk membuat bucket bernama
examplebucket:ossutil64 mb oss://examplebucketJika keluaran berikut ditampilkan, bucket bernama
examplebuckettelah dibuat:0.668238(s) elapsed
Unggah set data uji ke
examplebucket.ossutil64 cp spark-3.0.1-bin-hadoop2.7.tgz oss://examplebucket
Langkah 2: Buat dataset dan JindoRuntime
Sebelum membuat dataset, buat file bernama
mySecret.yamldi direktori root Instance ECS.apiVersion: v1 kind: Secret metadata: name: mysecret stringData: fs.oss.accessKeyId: xxx fs.oss.accessKeySecret: xxxTentukan
fs.oss.accessKeyIddanfs.oss.accessKeySecretsebagaiAccessKey IDdanAccessKey secretyang digunakan untuk mengakses OSS di Langkah 1.Jalankan perintah berikut untuk membuat Secret: Kubernetes akan mengenkripsi Secret yang dibuat untuk mencegah informasi tersimpan diekspos dalam teks biasa.
kubectl create -f mySecret.yamlBuat file bernama
resource.yamlmenggunakan template YAML berikut. Template ini digunakan untuk melakukan operasi berikut:Buat dataset untuk menentukan informasi tentang dataset di penyimpanan jarak jauh dan sistem file bawah (UFS).
Buat JindoRuntime untuk meluncurkan kluster JindoFS untuk caching data.
apiVersion: data.fluid.io/v1alpha1 kind: Dataset metadata: name: hadoop spec: 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: replicas: 2 tieredstore: levels: - mediumtype: MEM path: /dev/shm volumeType: emptyDir quota: 2Gi high: "0.99" low: "0.95"Tabel berikut menjelaskan parameter dalam template YAML.
Parameter
Deskripsi
mountPoint
oss://<oss_bucket>/<bucket_dir> menentukan jalur ke UFS yang dipasang. Endpoint tidak diperlukan dalam jalur.
fs.oss.endpoint
Endpoint publik atau privat dari bucket OSS. Untuk informasi lebih lanjut, lihat Wilayah dan endpoint.
replicas
Jumlah worker dalam kluster JindoFS.
mediumtype
Tipe cache. Parameter ini menentukan tipe cache yang digunakan saat Anda membuat template JindoRuntime. Nilai valid: HDD, SDD, dan MEM.
path
Jalur penyimpanan. Anda hanya dapat menentukan satu jalur. Jika Anda menetapkan mediumtype ke MEM, Anda harus menentukan jalur lokal untuk menyimpan data, seperti log.
quota
Ukuran maksimum data yang dicache. Unit: GB.
high
Batas atas kapasitas penyimpanan.
low
Batas bawah kapasitas penyimpanan.
Jalankan perintah berikut untuk membuat dataset dan JindoRuntime:
kubectl create -f resource.yamlJalankan perintah berikut untuk memeriksa apakah dataset telah diterapkan:
kubectl get dataset hadoopKeluaran yang diharapkan:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE hadoop 210MiB 0.00B 4.00GiB 0.0% Bound 1hJalankan perintah berikut untuk memeriksa apakah JindoRuntime telah diterapkan:
kubectl get jindoruntime hadoopKeluaran yang diharapkan:
NAME MASTER PHASE WORKER PHASE FUSE PHASE AGE hadoop Ready Ready Ready 4m45sJalankan perintah berikut untuk memeriksa apakah persistent volume (PV) dan persistent volume claim (PVC) telah dibuat:
kubectl get pv,pvcKeluaran yang diharapkan:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE persistentvolume/hadoop 100Gi RWX Retain Bound default/hadoop 52m NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE persistentvolumeclaim/hadoop Bound hadoop 100Gi RWX 52m
Keluaran sebelumnya menunjukkan bahwa dataset dan JindoRuntime telah dibuat.
Langkah 3: Buat aplikasi untuk menguji percepatan data
Anda dapat menerapkan aplikasi dalam kontainer untuk menguji percepatan data JindoFS. Anda juga dapat mengirimkan pekerjaan pembelajaran mesin untuk menggunakan fitur terkait. Dalam topik ini, sebuah aplikasi diterapkan dalam kontainer untuk menguji akses ke data yang sama. Pengujian menunjukkan efek percepatan JindoRuntime dengan membandingkan waktu akses.
Buat file bernama app.yaml menggunakan template YAML berikut:
apiVersion: v1 kind: Pod metadata: name: demo-app spec: 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: hadoopJalankan perintah berikut untuk menerapkan aplikasi:
kubectl create -f app.yamlJalankan perintah berikut untuk memeriksa ukuran file yang ditentukan:
kubectl exec -it demo-app -- bash du -sh /data/spark-3.0.1-bin-hadoop2.7.tgzKeluaran yang diharapkan:
210M /data/spark-3.0.1-bin-hadoop2.7.tgzJalankan perintah berikut untuk memeriksa waktu yang dikonsumsi untuk menyalin file:
time cp /data/spark-3.0.1-bin-hadoop2.7.tgz /dev/nullKeluaran yang diharapkan:
real 0m18.386s user 0m0.002s sys 0m0.105sKeluaran menunjukkan bahwa 18 detik dikonsumsi untuk menyalin file.
Jalankan perintah berikut untuk memeriksa data yang dicache dari dataset:
kubectl get dataset hadoopKeluaran yang diharapkan:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE hadoop 210.00MiB 210.00MiB 4.00GiB 100.0% Bound 1hKeluaran menunjukkan bahwa 210 MiB data telah dicache ke penyimpanan lokal.
Jalankan perintah berikut untuk menghapus aplikasi saat ini dan kemudian buat aplikasi yang sama:
CatatanLangkah ini dilakukan untuk menghindari faktor lain, seperti cache halaman, dari memengaruhi hasil.
kubectl delete -f app.yaml && kubectl create -f app.yamlJalankan perintah berikut untuk memeriksa waktu yang dikonsumsi untuk menyalin file:
kubectl exec -it demo-app -- bash time cp /data/spark-3.0.1-bin-hadoop2.7.tgz /dev/nullKeluaran yang diharapkan:
real 0m0.048s user 0m0.001s sys 0m0.046sKeluaran menunjukkan bahwa penyalinan file membutuhkan 48 milidetik, pengurangan lebih dari 300 kali.
CatatanIni karena file telah dicache oleh JindoFS.
(Opsional) Bersihkan lingkungan
Jika Anda tidak lagi menggunakan percepatan data, Anda dapat menjalankan perintah berikut untuk membersihkan lingkungan.
Jalankan perintah berikut untuk menghapus aplikasi:
kubectl delete pod demo-appJalankan perintah berikut untuk menghapus dataset dan JindoRuntime:
kubectl delete dataset hadoop