全部产品
Search
文档中心

Container Compute Service:Gunakan Fluid untuk mempercepat akses data

更新时间:Jul 06, 2025

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.

    Catatan

    Mode istimewa diperlukan untuk menggunakan Fluid dalam mempercepat akses data. Untuk mengaktifkan mode ini, ajukan tiket.

Prosedur

Langkah 1: Unggah data ke OSS

  1. 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.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 Referensi Perintah ossutil dan ossutil 1.0.

    1. Instal ossutil.

    2. Jalankan perintah berikut untuk membuat bucket bernama examplebucket.

      Catatan

      Jika perintah mengembalikan ErrorCode=BucketAlreadyExists, bucket sudah ada. Nama bucket OSS harus unik secara global. Modifikasi nama examplebucket sesuai kebutuhan.

      ossutil64 mb oss://examplebucket

      Hasil yang Diharapkan:

      0.668238(s) elapsed

      Jika keluaran di atas ditampilkan, bucket bernama examplebucket telah dibuat.

    3. Unggah set data uji ke examplebucket.

      ossutil64 cp spark-3.0.1-bin-hadoop2.7.tgz oss://examplebucket
    4. (Opsional) Konfigurasikan izin untuk mengakses bucket dan data. Untuk informasi lebih lanjut, lihat Kontrol Izin.

  3. Buat file bernama mySecret.yaml dan tambahkan konten berikut ke file tersebut.

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

    fs.oss.accessKeyId dan fs.oss.accessKeySecret menentukan AccessKey ID dan AccessKey secret yang digunakan untuk mengakses OSS.

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

  1. Buat file bernama resource.yaml dan 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.

    Catatan

    Jalankan perintah kubectl get pods --field-selector=status.phase=Running -n fluid-system untuk 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.

    Tampilkan Konten File YAML

    apiVersion: data.fluid.io/v1alpha1
    kind: Dataset
    metadata:
      name: hadoop
    spec:
      placement: Shared
      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:
      ## Tentukan nama dataset.
      name: hadoop
    spec:
      networkmode: ContainerNetwork
      ## Modifikasi sesuai kebutuhan.
      replicas: 4
      master:
        podMetadata:
          labels:
            alibabacloud.com/compute-class: performance
            alibabacloud.com/compute-qos: default
      worker:
        podMetadata:
          labels:
            alibabacloud.com/compute-class: performance
            alibabacloud.com/compute-qos: default. 
        resources:
          requests:
            cpu: 24
            memory: 48Gi
          limits:
            cpu: 24
            memory: 48Gi
      tieredstore:
        levels:
          - mediumtype: MEM
            path: /dev/shm
            volumeType: emptyDir
            ## Modifikasi sesuai kebutuhan.
            quota: 48Gi
            high: "0.99"
            low: "0.95"

    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, dan MEM.

    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.

  2. Jalankan perintah berikut untuk membuat dataset dan JindoRuntime:

    kubectl create -f resource.yaml
  3. Lihat penyebaran JindoRuntime dan dataset.

    1. Lihat penyebaran dataset.

      kubectl get dataset hadoop

      Hasil yang Diharapkan:

      NAME     UFS TOTAL SIZE   CACHED   CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
      hadoop   209.74MiB        0.00B    4.00GiB          0.0%                Bound   56s
    2. Lihat penyebaran JindoRuntime.

      kubectl get jindoruntime hadoop

      Hasil yang Diharapkan:

      NAME     MASTER PHASE   WORKER PHASE   FUSE PHASE   AGE
      hadoop   Ready          Ready          Ready        2m11s

      Keluaran di atas menunjukkan bahwa dataset dan JindoRuntime telah dibuat.

  4. Jalankan perintah berikut untuk memeriksa apakah Persistent Volume (PV) dan Persistent Volume Claim (PVC) telah dibuat: PVS menggunakan nama dataset.

    kubectl get pv,pvc

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

  1. 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: true
  2. Jika 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.

  3. Buat sumber daya DataLoad untuk memuat data model sekali.

    kubectl create -f dataload.yaml
  4. Lihat status pemuatan.

    kubectl get dataload

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

  1. 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: NoSchedule
  2. Jalankan perintah berikut untuk membuat pod aplikasi:

    kubectl create -f app.yaml
  3. Uji kecepatan salinan file tanpa menggunakan cache JindoFS.

    1. Lihat ukuran file uji.

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

      Hasil yang Diharapkan:

      210M    /data/spark-3.0.1-bin-hadoop2.7.tgz
    2. Lihat jumlah waktu yang diperlukan untuk menyalin file.

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

      Hasil yang Diharapkan:

      real    0m1.883s
      user    0m0.001s
      sys     0m0.041s

      Keluaran di atas menunjukkan bahwa dibutuhkan 1,883 detik untuk menyalin file.

  4. Lihat cache dataset.

    kubectl get dataset hadoop

    Hasil yang Diharapkan:

    NAME     UFS TOTAL SIZE   CACHED      CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
    hadoop   209.74MiB        209.74MiB   4.00GiB          100.0%              Bound   64m

    Keluaran di atas menunjukkan bahwa 100.0% data di-cache oleh JindoFS.

  5. Hapus pod sampel dan lihat waktu salinan file.

    Catatan

    Anda 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/null

    Hasil yang Diharapkan:

    real    0m0.203s
    user    0m0.000s
    sys     0m0.047s

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

    Penting

    Waktu 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:

  1. Instal komponen ack-fluid di kluster ACK yang dikelola. Untuk informasi lebih lanjut, lihat Gunakan Helm untuk Menyederhanakan Penyebaran Aplikasi.

  2. 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: Shared dan networkmode.

    • Pekerja Fluid memerlukan bandwidth tinggi. Anda harus memastikan bahwa kluster ACS Anda memiliki bandwidth yang cukup. Untuk melakukan ini, Anda dapat mengonfigurasi compute-class: performance dan resources untuk memastikan bahwa pod ACS memiliki bandwidth yang cukup.