JindoRuntime didasarkan pada C++ dan mendukung manajemen dataset, caching data, serta penyimpanan data di OSS. Fluid memungkinkan observabilitas, penskalaan otomatis, dan portabilitas dataset dengan mengelola serta menjadwalkan JindoRuntime. Topik ini menjelaskan cara menggunakan Fluid untuk mempercepat akses data dalam skenario yang memanfaatkan kekuatan komputasi ACS.
Prasyarat
Object Storage Service (OSS) telah diaktifkan. Untuk informasi lebih lanjut, lihat Aktifkan OSS.
ack-fluid 1.0.11-* atau versi lebih baru telah diinstal. Untuk informasi lebih lanjut, lihat Gunakan Helm untuk Mengelola Aplikasi di ACS.
Mode istimewa diaktifkan untuk pod ACS.
CatatanMode istimewa diperlukan untuk menggunakan Fluid dalam mempercepat akses data. Untuk mengaktifkan mode ini, ajukan tiket.
Prosedur
Langkah 1: Unggah data ke OSS
Jalankan perintah berikut untuk mengunduh data uji.
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 Referensi Perintah ossutil dan ossutil 1.0.
Jalankan perintah berikut untuk membuat bucket bernama
examplebucket.CatatanJika perintah mengembalikan
ErrorCode=BucketAlreadyExists, bucket sudah ada. Nama bucket OSS harus unik secara global. Modifikasi namaexamplebucketsesuai kebutuhan.ossutil64 mb oss://examplebucketHasil yang Diharapkan:
0.668238(s) elapsedJika keluaran di atas ditampilkan, bucket bernama
examplebuckettelah dibuat.Unggah set data uji ke
examplebucket.ossutil64 cp spark-3.0.1-bin-hadoop2.7.tgz oss://examplebucket(Opsional) Konfigurasikan izin untuk mengakses bucket dan data. Untuk informasi lebih lanjut, lihat Kontrol Izin.
Buat file bernama
mySecret.yamldan tambahkan konten berikut ke file tersebut.apiVersion: v1 kind: Secret metadata: name: mysecret stringData: fs.oss.accessKeyId: xxx fs.oss.accessKeySecret: xxxfs.oss.accessKeyIddanfs.oss.accessKeySecretmenentukanAccessKey IDdanAccessKey secretyang digunakan untuk mengakses OSS.Jalankan perintah berikut untuk membuat Secret: Kubernetes secara otomatis mengenkripsi Secret untuk menghindari pengungkapan data sensitif dalam teks biasa.
kubectl create -f mySecret.yaml
Langkah 2: Buat dataset dan JindoRuntime
Buat file bernama
resource.yamldan tambahkan konten berikut ke file tersebut.Buat dataset untuk menentukan informasi tentang dataset di penyimpanan jarak jauh dan sistem file dasar (UFS).
Buat JindoRuntime untuk meluncurkan kluster JindoFS untuk caching data.
CatatanJalankan perintah
kubectl get pods --field-selector=status.phase=Running -n fluid-systemuntuk memeriksa apakah dataset-controller dan jindoruntime-controller dari komponen ack-fluid berjalan normal.Dalam contoh ini, kekuatan komputasi CPU lebih disukai. Untuk mempercepat pemuatan LLM, pastikan zona kluster Anda menyediakan sumber daya GPU. Untuk informasi lebih lanjut, lihat Pengenalan Kelas Komputasi GPU.
Tabel berikut menjelaskan parameter.
Parameter
Deskripsi
mountPoint
oss://<oss_bucket> menunjukkan jalur UFS yang dipasang. <oss_bucket> menunjukkan nama bucket OSS, seperti
oss://examplebucket.fs.oss.endpoint
Endpoint dari bucket OSS. Anda dapat menentukan endpoint publik atau privat. Contoh:
oss-cn-beijing-internal.aliyuncs.com. Untuk informasi lebih lanjut, lihat Wilayah dan endpoint OSS.replicas
Jumlah pekerja dalam kluster JindoFS.
mediumtype
Jenis cache. Saat membuat template JindoRuntime, JindoFS hanya mendukung salah satu jenis cache berikut:
HDD,SDD, danMEM.path
Jalur penyimpanan. Anda hanya dapat menentukan satu jalur. Jika Anda menyetel mediumtype ke
MEM, Anda harus menentukan jalur penyimpanan lokal untuk menyimpan data, seperti log.quota
Ukuran maksimum data yang di-cache. Unit: GB.
high
Batas atas kapasitas penyimpanan.
low
Batas bawah kapasitas penyimpanan.
Jalankan perintah berikut untuk membuat dataset dan JindoRuntime:
kubectl create -f resource.yamlLihat penyebaran JindoRuntime dan dataset.
Lihat penyebaran dataset.
kubectl get dataset hadoopHasil yang Diharapkan:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE hadoop 209.74MiB 0.00B 4.00GiB 0.0% Bound 56sLihat penyebaran JindoRuntime.
kubectl get jindoruntime hadoopHasil yang Diharapkan:
NAME MASTER PHASE WORKER PHASE FUSE PHASE AGE hadoop Ready Ready Ready 2m11sKeluaran di atas menunjukkan bahwa dataset dan JindoRuntime telah dibuat.
Jalankan perintah berikut untuk memeriksa apakah Persistent Volume (PV) dan Persistent Volume Claim (PVC) telah dibuat: PVS menggunakan nama dataset.
kubectl get pv,pvcHasil yang Diharapkan:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE persistentvolume/default-hadoop 100Pi ROX Retain Bound default/hadoop fluid <unset> 2m5s NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE persistentvolumeclaim/hadoop Bound default-hadoop 100Pi ROX fluid <unset> 2m5s
Langkah 3: Buat sumber daya DataLoad
Untuk mempercepat pemuatan data dan memastikan validitas logika pemrosesan data, Anda perlu memuat dataset sekali.
Jika data model yang disimpan di bucket OSS bersifat statis, buat file bernama dataload.yaml dan tambahkan konten berikut ke file tersebut untuk memuat data terlebih dahulu.
apiVersion: data.fluid.io/v1alpha1 kind: DataLoad metadata: name: hadoop spec: dataset: name: hadoop namespace: default loadMetadata: trueJika data model yang disimpan di bucket OSS bersifat dinamis, Anda perlu memuat data secara berkala. Untuk informasi lebih lanjut, lihat Skenario 2: Data di Penyimpanan Backend Bersifat Hanya-Baca tetapi Berubah Secara Berkala.
Buat sumber daya DataLoad untuk memuat data model sekali.
kubectl create -f dataload.yamlLihat status pemuatan.
kubectl get dataloadHasil yang Diharapkan:
NAME DATASET PHASE AGE DURATION hadoop hadoop Complete 92m 51s
Langkah 4: Buat pod untuk memverifikasi percepatan data
Anda dapat membuat pod atau mengirimkan pekerjaan pembelajaran mesin untuk memverifikasi layanan percepatan data JindoFS. Dalam contoh ini, aplikasi diterapkan dalam wadah untuk menguji akses ke data yang sama. Pengujian dilakukan beberapa kali untuk membandingkan waktu yang dibutuhkan.
Buat file bernama app.yaml menggunakan template YAML berikut:
apiVersion: v1 kind: Pod metadata: name: demo-app labels: # Untuk memasang pod ACS, gunakan Fluid webhook untuk menyuntikkan komponen terkait Fluid sebagai kontainer sidecar. Anda harus mengonfigurasi label berikut: alibabacloud.com/fluid-sidecar-target: acs spec: containers: - name: demo image: mirrors-ssl.aliyuncs.com/nginx:latest volumeMounts: - mountPath: /data name: hadoop resources: requests: cpu: 14 memory: 56Gi volumes: - name: hadoop persistentVolumeClaim: ## Nama dataset Fluid. claimName: hadoop nodeSelector: type: virtual-kubelet tolerations: - key: virtual-kubelet.io/provider operator: Equal value: alibabacloud effect: NoScheduleJalankan perintah berikut untuk membuat pod aplikasi:
kubectl create -f app.yamlUji kecepatan salinan file tanpa menggunakan cache JindoFS.
Lihat ukuran file uji.
kubectl exec -it demo-app -c demo -- du -sh /data/spark-3.0.1-bin-hadoop2.7.tgzHasil yang Diharapkan:
210M /data/spark-3.0.1-bin-hadoop2.7.tgzLihat jumlah waktu yang diperlukan untuk menyalin file.
time cp /data/spark-3.0.1-bin-hadoop2.7.tgz /dev/nullHasil yang Diharapkan:
real 0m1.883s user 0m0.001s sys 0m0.041sKeluaran di atas menunjukkan bahwa dibutuhkan 1,883 detik untuk menyalin file.
Lihat cache dataset.
kubectl get dataset hadoopHasil yang Diharapkan:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE hadoop 209.74MiB 209.74MiB 4.00GiB 100.0% Bound 64mKeluaran di atas menunjukkan bahwa
100.0%data di-cache oleh JindoFS.Hapus pod sampel dan lihat waktu salinan file.
CatatanAnda perlu menghapus pod sampel untuk menghilangkan dampak faktor lain, seperti cache halaman. Jika pod sudah berisi cache lokal, sistem akan lebih memilih menyalin file dari cache lokal.
Jalankan perintah berikut untuk menanyakan waktu yang diperlukan untuk menyalin file:
kubectl exec -it demo-app -c demo -- bash time cp /data/spark-3.0.1-bin-hadoop2.7.tgz /dev/nullHasil yang Diharapkan:
real 0m0.203s user 0m0.000s sys 0m0.047sKeluaran di atas menunjukkan bahwa dibutuhkan 0,203 detik untuk menyalin file, yang sembilan kali lebih cepat daripada pertama kali. Ini karena file di-cache oleh JindoFS. Mengakses file yang di-cache jauh lebih cepat.
PentingWaktu salinan yang disediakan dalam topik ini hanya untuk referensi.
Gunakan kekuatan komputasi ACS di kluster ACK Pro
Topik ini menjelaskan cara menggunakan JindoFS untuk mempercepat operasi salinan file berdasarkan kluster ACS. Anda juga dapat menggunakan kekuatan komputasi ACS di kluster ACK yang dikelola untuk menyelesaikan operasi. Untuk informasi lebih lanjut, lihat Gunakan Kekuatan Komputasi ACS di Kluster ACK Pro.
Untuk memverifikasi percepatan data di kluster ACK yang dikelola, buat penyesuaian berikut:
Instal komponen ack-fluid di kluster ACK yang dikelola. Untuk informasi lebih lanjut, lihat Gunakan Helm untuk Menyederhanakan Penyebaran Aplikasi.
Buat dataset dan JindoRuntime berdasarkan konten berikut.
apiVersion: data.fluid.io/v1alpha1 kind: Dataset metadata: name: hadoop spec: mounts: ## Untuk menentukan subdirektori, konfigurasikan oss://<oss_bucket>/{oss_path}. - mountPoint: oss://<oss_bucket> # Ganti <oss_bucket> dengan nilai sebenarnya. options: fs.oss.endpoint: <oss_endpoint> # Ganti <oss_endpoint> dengan nilai sebenarnya. 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: ## Modifikasi sesuai kebutuhan. replicas: 4 tieredstore: levels: - mediumtype: MEM path: /dev/shm volumeType: emptyDir quota: 48Gi high: "0.99" low: "0.95"Perbedaan antara kluster ACK yang dikelola dan kluster ACS:
Node kluster ACS tidak dapat diskalakan dengan cara yang sama seperti kluster ACK karena node ini adalah node virtual. Oleh karena itu, Anda harus mengonfigurasi
.spec.placement: Shareddannetworkmode.Pekerja Fluid memerlukan bandwidth tinggi. Anda harus memastikan bahwa kluster ACS Anda memiliki bandwidth yang cukup. Untuk melakukan ini, Anda dapat mengonfigurasi
compute-class: performancedanresourcesuntuk memastikan bahwa pod ACS memiliki bandwidth yang cukup.