全部产品
Search
文档中心

Container Service for Kubernetes:Gunakan JindoFS untuk Mempercepat Akses OSS

更新时间:Jul 06, 2025

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.

    Penting

    Komponen ack-fluid saat ini tidak didukung pada ContainerOS.

  • Suite AI cloud-native telah diinstal dan komponen ack-fluid telah diterapkan.

    Penting

    Jika 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

  1. 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.tgz
  2. Unggah set data uji ke OSS bucket.

    Penting

    Contoh 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.

    1. Instal ossutil.

    2. Buat bucket bernama examplebucket.

      • Jalankan perintah berikut untuk membuat bucket bernama examplebucket:

        ossutil64 mb oss://examplebucket
      • Jika keluaran berikut ditampilkan, bucket bernama examplebucket telah dibuat:

        0.668238(s) elapsed
    3. Unggah set data uji ke examplebucket.

      ossutil64 cp spark-3.0.1-bin-hadoop2.7.tgz oss://examplebucket

Langkah 2: Buat dataset dan JindoRuntime

  1. Sebelum membuat dataset, buat file bernama mySecret.yaml di direktori root Instance ECS.

    apiVersion: v1
    kind: Secret
    metadata:
      name: mysecret
    stringData:
      fs.oss.accessKeyId: xxx
      fs.oss.accessKeySecret: xxx

    Tentukan fs.oss.accessKeyId dan fs.oss.accessKeySecret sebagai AccessKey ID dan AccessKey secret yang digunakan untuk mengakses OSS di Langkah 1.

  2. Jalankan perintah berikut untuk membuat Secret: Kubernetes akan mengenkripsi Secret yang dibuat untuk mencegah informasi tersimpan diekspos dalam teks biasa.

    kubectl create -f mySecret.yaml
  3. Buat file bernama resource.yaml menggunakan 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.

  4. Jalankan perintah berikut untuk membuat dataset dan JindoRuntime:

    kubectl create -f resource.yaml
  5. Jalankan perintah berikut untuk memeriksa apakah dataset telah diterapkan:

    kubectl get dataset hadoop

    Keluaran yang diharapkan:

    NAME     UFS TOTAL SIZE   CACHED   CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
    hadoop        210MiB       0.00B    4.00GiB              0.0%          Bound   1h
  6. Jalankan perintah berikut untuk memeriksa apakah JindoRuntime telah diterapkan:

    kubectl get jindoruntime hadoop

    Keluaran yang diharapkan:

    NAME     MASTER PHASE   WORKER PHASE   FUSE PHASE   AGE
    hadoop   Ready          Ready          Ready        4m45s
  7. Jalankan perintah berikut untuk memeriksa apakah persistent volume (PV) dan persistent volume claim (PVC) telah dibuat:

    kubectl get pv,pvc

    Keluaran 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.

  1. 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: hadoop
  2. Jalankan perintah berikut untuk menerapkan aplikasi:

    kubectl create -f app.yaml
  3. Jalankan perintah berikut untuk memeriksa ukuran file yang ditentukan:

    kubectl exec -it demo-app -- bash
    du -sh /data/spark-3.0.1-bin-hadoop2.7.tgz

    Keluaran yang diharapkan:

    210M    /data/spark-3.0.1-bin-hadoop2.7.tgz
  4. Jalankan perintah berikut untuk memeriksa waktu yang dikonsumsi untuk menyalin file:

    time cp /data/spark-3.0.1-bin-hadoop2.7.tgz /dev/null

    Keluaran yang diharapkan:

    real    0m18.386s
    user    0m0.002s
    sys    0m0.105s

    Keluaran menunjukkan bahwa 18 detik dikonsumsi untuk menyalin file.

  5. Jalankan perintah berikut untuk memeriksa data yang dicache dari dataset:

    kubectl get dataset hadoop

    Keluaran yang diharapkan:

    NAME     UFS TOTAL SIZE   CACHED   CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
    hadoop   210.00MiB       210.00MiB    4.00GiB        100.0%           Bound   1h

    Keluaran menunjukkan bahwa 210 MiB data telah dicache ke penyimpanan lokal.

  6. Jalankan perintah berikut untuk menghapus aplikasi saat ini dan kemudian buat aplikasi yang sama:

    Catatan

    Langkah ini dilakukan untuk menghindari faktor lain, seperti cache halaman, dari memengaruhi hasil.

    kubectl delete -f app.yaml && kubectl create -f app.yaml
  7. Jalankan 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/null

    Keluaran yang diharapkan:

    real    0m0.048s
    user    0m0.001s
    sys     0m0.046s

    Keluaran menunjukkan bahwa penyalinan file membutuhkan 48 milidetik, pengurangan lebih dari 300 kali.

    Catatan

    Ini 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-app

Jalankan perintah berikut untuk menghapus dataset dan JindoRuntime:

kubectl delete dataset hadoop