すべてのプロダクト
Search
ドキュメントセンター

Container Compute Service:Fluid を使用したデータアクセスの高速化

最終更新日:Mar 26, 2026

JindoRuntime は C++ ベースであり、データセット管理、データキャッシング、および Object Storage Service (OSS) でのデータストレージをサポートします。Fluid は JindoRuntime を管理およびスケジューリングすることで、データセットの可観測性、自動スケーリング、および可搬性を実現します。このトピックでは、ACS コンピューティング能力が使用されるシナリオで Fluid を使用してデータアクセスを高速化する方法について説明します。

Pod が OSS データを繰り返し読み取る場合、たとえ同じファイルが直前にアクセスされたばかりであっても、各読み取りはネットワーク経由でデータをフェッチします。JindoFS は、データをローカルメモリにキャッシングすることで、これらの繰り返しのラウンドトリップを排除します。ファイルが一度キャッシュされると、その後の読み取りはローカルに近い速度で提供されます。このトピックの例では、最初のキャッシュ読み取り後に 210 MiB のファイルで 9 倍の高速化が実証されています。

前提条件

開始する前に、以下を確認してください:

ステップ1:OSS へのデータのアップロード

  1. テストデータセットをダウンロードします。

    wget https://archive.apache.org/dist/spark/spark-3.0.1/spark-3.0.1-bin-hadoop2.7.tgz
  2. データセットを OSS バケットにアップロードします。

    1. ossutil のインストール

    2. examplebucket という名前のバケットを作成します。

      説明

      コマンドが ErrorCode=BucketAlreadyExists を返した場合、バケットはすでに存在します。OSS バケット名はグローバルに一意である必要があるため、必要に応じて名前を変更してください。

      ossutil64 mb oss://examplebucket

      期待される出力:

      0.668238(s) elapsed
    3. データセットをバケットにアップロードします。

      ossutil64 cp spark-3.0.1-bin-hadoop2.7.tgz oss://examplebucket
    4. (オプション) バケットとデータのアクセス権限を設定します。「権限制御」をご参照ください。

    重要

    以下のサブステップでは、Alibaba Cloud Linux 3.2104 LTS 64 ビットを実行している Elastic Compute Service (ECS) インスタンスを使用します。他のオペレーティングシステムについては、「ossutil コマンドリファレンス」および「ossutil 1.0」をご参照ください。

  3. mySecret.yaml という名前のファイルを次の内容で作成します。

    apiVersion: v1
    kind: Secret
    metadata:
      name: mysecret
    stringData:
      fs.oss.accessKeyId: <your-access-key-id>          # AccessKey ID に置き換えてください
      fs.oss.accessKeySecret: <your-access-key-secret>  # AccessKey Secret に置き換えてください

    Kubernetes は、機密データがプレーンテキストで公開されるのを防ぐために、Secret を自動的に暗号化します。

  4. Secret を適用します。

    kubectl create -f mySecret.yaml

ステップ2:Dataset と JindoRuntime の作成

説明

続行する前に、ack-fluid コンポーネントの dataset-controller と jindoruntime-controller が実行中であることを確認してください:

kubectl get pods --field-selector=status.phase=Running -n fluid-system

この例では、CPU コンピューティング能力が優先的に使用されます。大規模言語モデル (LLM) の読み込みを高速化するには、クラスターのゾーンが GPU リソースを提供していることを確認してください。「GPU コンピューティングクラスの概要」をご参照ください。

  1. resource.yaml という名前のファイルを次の内容で作成します。このファイルは、OSS データを指す Dataset と、それをキャッシュするための JindoFS クラスターを起動する JindoRuntime を定義します。

    パラメーター説明
    mountPoint基盤となるファイルシステム (UFS) としてマウントする OSS パス。サブディレクトリには oss://<bucket> または oss://<bucket>/<path> のフォーマットを使用します。
    fs.oss.endpointOSS バケットのエンドポイント (パブリックまたはプライベート)。例:oss-cn-beijing-internal.aliyuncs.com。「OSS のリージョンとエンドポイント」をご参照ください。
    replicasJindoFS クラスター内のワーカーノードの数。
    mediumtypeキャッシュストレージ媒体。サポートされている値:MEMHDDSSD
    quotaワーカーあたりの最大キャッシュサイズ。
    high / lowキャッシュエビクションの上限および下限しきい値。
    apiVersion: data.fluid.io/v1alpha1
    kind: Dataset
    metadata:
      name: hadoop
    spec:
      placement: Shared          # ACS 仮想ノードに必要
      mounts:
          # サブディレクトリをマウントするには、oss://<oss_bucket>/<oss_path> を使用します
        - mountPoint: oss://<oss_bucket>       # OSS バケット名に置き換えてください (例: oss://examplebucket)
          options:
            fs.oss.endpoint: <oss_endpoint>    # OSS エンドポイントに置き換えてください (例: oss-cn-beijing-internal.aliyuncs.com)
          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                # Dataset 名と一致させる必要があります
    spec:
      networkmode: ContainerNetwork
      replicas: 4                 # JindoFS ワーカーノードの数。必要に応じて調整してください
      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       # キャッシュ媒体:MEM、HDD、または SSD
            path: /dev/shm        # キャッシュ媒体のストレージパス
            volumeType: emptyDir
            quota: 48Gi           # ワーカーあたりの最大キャッシュサイズ。必要に応じて調整してください
            high: "0.99"          # 使用量がこのしきい値に達するとエビクションが開始されます
            low: "0.95"           # 使用量がこのしきい値まで低下するとエビクションが停止します

    主要なパラメーター:

  2. 設定を適用します。

    kubectl create -f resource.yaml
  3. Dataset と JindoRuntime の準備ができていることを確認します。Dataset を確認します:

    kubectl get dataset hadoop

    期待される出力:

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

    JindoRuntime を確認します:

    kubectl get jindoruntime hadoop

    期待される出力:

    NAME     MASTER PHASE   WORKER PHASE   FUSE PHASE   AGE
    hadoop   Ready          Ready          Ready        2m11s
  4. 永続ボリューム (PV) と永続ボリューム要求 (PVC) が作成されたことを確認します。PV は Dataset 名を使用します。

    kubectl get pv,pvc

    期待される出力:

    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

ステップ3:DataLoad リソースの作成

ワークロードを実行する前にデータセットを JindoFS キャッシュにプリロードすることで、最初のアクセスから高速になり、データ処理ロジックが有効であることが保証されます。

  1. OSS バケット内のデータが静的な場合は、dataload.yaml という名前のファイルを次の内容で作成します。

    apiVersion: data.fluid.io/v1alpha1
    kind: DataLoad
    metadata:
      name: hadoop
    spec:
      dataset:
        name: hadoop
        namespace: default
      loadMetadata: true

    データが定期的に変更される場合は、代わりに定期的なプリロードを設定します。「シナリオ2:バックエンドストレージのデータは読み取り専用だが定期的に変更される」をご参照ください。

  2. DataLoad リソースを適用してプリロードを開始します。

    kubectl create -f dataload.yaml
  3. プリロードの進行状況を監視します。

    kubectl get dataload

    完了時の期待される出力:

    NAME     DATASET   PHASE      AGE   DURATION
    hadoop   hadoop    Complete   92m   51s

ステップ4:データアクセラレーションの検証

Dataset をマウントするテスト Pod をデプロイし、JindoFS キャッシングが有効になる前と後でファイルコピー時間を測定します。

  1. app.yaml という名前のファイルを作成します。

    apiVersion: v1
    kind: Pod
    metadata:
      name: demo-app
      labels:
        # 必須:Fluid Webhook に JindoFS サイドカーコンテナを ACS Pod に注入するよう指示します
        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:
            claimName: hadoop    # Fluid Dataset 名と一致します
      nodeSelector:
        type: virtual-kubelet
      tolerations:
        - key: virtual-kubelet.io/provider
          operator: Equal
          value: alibabacloud
          effect: NoSchedule
  2. Pod をデプロイします。

    kubectl create -f app.yaml
  3. JindoFS キャッシングなしでファイルコピー時間を測定します。ファイルサイズを確認します:

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

    期待される出力:

    210M    /data/spark-3.0.1-bin-hadoop2.7.tgz

    コピー時間を測定します:

    kubectl exec -it demo-app -c demo -- bash
    time cp /data/spark-3.0.1-bin-hadoop2.7.tgz /dev/null

    期待される出力:

    real    0m1.883s
    user    0m0.001s
    sys     0m0.041s
  4. データが完全にキャッシュされていることを確認します。

    kubectl get dataset hadoop

    期待される出力:

    NAME     UFS TOTAL SIZE   CACHED      CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
    hadoop   209.74MiB        209.74MiB   4.00GiB          100.0%              Bound   64m
  5. Pod を削除して再作成し、JindoFS キャッシュに対して再度コピーテストを実行します。

    説明

    Pod を再作成すると OS ページキャッシュがクリアされるため、2 回目の測定では最初の実行によるメモリ内の残留物ではなく、JindoFS キャッシュの速度のみが反映されます。

    既存の Pod を削除します:

    kubectl delete pod demo-app

    再作成します:

    kubectl create -f app.yaml

    コピー テストを再度実行してください:

    kubectl exec -it demo-app -c demo -- bash
    time cp /data/spark-3.0.1-bin-hadoop2.7.tgz /dev/null

    期待される出力:

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

    コピー処理時間は現在 0.203 秒です。これは、キャッシュを使用しない場合の 1.883 秒と比較して約 9 倍速いです。この高速化は、JindoFS がファイルを /dev/shm 上のメモリキャッシュから提供するためであり、OSS からネットワーク経由でフェッチするのとは異なります。データがローカルにキャッシュされると、その後の読み取りではネットワークを完全に経由せずに処理されます。

    重要

    ここに表示されているコピー時間は参考のみであり、ご利用のクラスター構成およびネットワーク条件に応じて変動する場合があります。

Container Service for Kubernetes (ACK) Pro クラスターでの ACS コンピューティング能力の使用

上記の手順は ACS クラスターに適用されます。代わりに ACK マネージドクラスターで ACS コンピューティング能力を使用するには、「ACK Pro クラスターで ACS のコンピューティング能力を使用する」をご参照ください。

ACK マネージドクラスターの場合は、次の調整を行います:

  1. ack-fluid コンポーネントを ACK マネージドクラスターにインストールします。「Helm を使用してアプリケーションのデプロイを簡素化する」をご参照ください。

  2. 次の構成を使用して Dataset と JindoRuntime を作成します。ACS 構成との主な違いは、placement: Sharednetworkmode がなく、compute-class ラベルもないことです。標準の ACK ノードではこれらの設定は必要ありません。

    • ACS クラスターは、標準のノードスケーリングをサポートしない仮想ノードを使用します。共有データセットアクセスと Pod 間通信を有効にするには、ACS 構成で placement: Sharednetworkmode: ContainerNetwork を設定します。これらのフィールドは ACK マネージドクラスターには必要ありません。

    • ACS 上の Fluid ワーカーは高い帯域幅を必要とします。十分な帯域幅を確保するために、ACS 構成で compute-class: performance を設定し、十分な CPU とメモリの resources を構成します。ACK マネージドクラスターはリソースを異なる方法で割り当てるため、これらのラベルは必要ありません。

    apiVersion: data.fluid.io/v1alpha1
    kind: Dataset
    metadata:
      name: hadoop
    spec:
      mounts:
          # サブディレクトリをマウントするには、oss://<oss_bucket>/<oss_path> を使用します
        - mountPoint: oss://<oss_bucket>       # OSS バケット名に置き換えてください
          options:
            fs.oss.endpoint: <oss_endpoint>    # OSS エンドポイントに置き換えてください
          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: 4                 # 必要に応じて調整してください
      tieredstore:
        levels:
          - mediumtype: MEM
            path: /dev/shm
            volumeType: emptyDir
            quota: 48Gi
            high: "0.99"
            low: "0.95"

    ACS 構成との違い:

次のステップ