Fluid は、オープンソースの Kubernetes ネイティブ分散データセットのオーケストレーションおよびアクセラレーションエンジンです。クラウドネイティブ環境におけるデータ集約型アプリケーション(例:ビッグデータおよび AI アプリケーション)向けに設計されています。エッジシナリオでは、Fluid を使用することで、エッジノードから Object Storage Service (OSS) へのファイルアクセスを大幅に高速化できます。このトピックでは、ACK Edge クラスター での Fluid のデータアクセラレーション機能の使用方法について説明します。
前提条件
-
ACK Edge クラスター(バージョン 1.18 以降)があります。詳細については、「ACK Edge クラスターの作成」をご参照ください。
-
エッジノードプールを作成し、エッジノードを追加済みであること。詳細については、「エッジノードプールの作成」および「エッジノードの追加」をご参照ください。
-
クラウドネイティブ AI スイートをインストールし、ack-fluid コンポーネントをデプロイ済みであること。
重要オープンソースの Fluid をインストールしている場合は、ack-fluid コンポーネントをデプロイする前にアンインストールしてください。
-
クラウドネイティブ AI スイートがインストールされていない場合:スイートをインストールする際に、[Fluid データアクセラレーション] を有効化します。詳細については、「AI スイートコンソールのデプロイ」をご参照ください。
-
クラウドネイティブ AI スイートがすでにインストールされている場合: [ACK コンソール] の クラウドネイティブ AI コンポーネントセット ページで [ack-fluid] をデプロイします。
-
-
kubectl を使用して Kubernetes クラスターに接続済みであること。詳細については、「kubectl を使用した ACK クラスターへの接続」をご参照ください。
-
Object Storage Service (OSS) をアクティブ化済みであること。詳細については、「OSS のアクティブ化」をご参照ください。
ステップ 1: OSS データの準備
-
次のコマンドを実行して、テストデータを ECS インスタンスにダウンロードします。
wget https://archive.apache.org/dist/spark/spark-3.0.1/spark-3.0.1-bin-hadoop2.7.tgz -
ダウンロードしたテストデータを、OSS バケットにアップロードします。
重要以下の手順では、Alibaba Cloud Linux 3.2104 LTS 64-bit を実行している ECS インスタンスを例として、OSS へのデータのアップロード方法を示します。その他のオペレーティングシステムについては、「ossutil クイックスタート」および「ossutil コマンドリファレンス 1.0」をご参照ください。
-
ossutil をインストールします。
-
examplebucketという名前のバケットを作成します。-
次のコマンドを実行して
examplebucketを作成します。ossutil mb oss://examplebucket -
次の出力は、
examplebucketが作成されたことを示します。0.668238(s) elapsed
-
-
ダウンロードしたテストデータを
examplebucketバケットにアップロードします。ossutil cp spark-3.0.1-bin-hadoop2.7.tgz oss://examplebucket
-
ステップ 2: データセットと JindoRuntime の作成
-
次の内容で
resource.yamlファイルを作成します。このファイルには 2 つの目的があります。-
リモートデータセットを記述し、基盤となるファイルシステム (UFS) に関する情報を提供するデータセットを作成します。
-
データキャッシュ用の JindoFS クラスターを起動する JindoRuntime を作成します。
apiVersion: data.fluid.io/v1alpha1 kind: Dataset metadata: name: hadoop spec: nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: alibabacloud.com/nodepool-id operator: In values: - npxxxxxxxxxxxxxx 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: nodeSelector: alibabacloud.com/nodepool-id: npxxxxxxxxxxxxxx replicas: 2 tieredstore: levels: - mediumtype: MEM path: /dev/shm volumeType: emptyDir quota: 2Gi high: "0.99" low: "0.95"説明-
ACK エッジクラスターでは、
nodeAffinityとnodeSelectorを使用して Dataset と JindoRuntime を同じノードプールにデプロイする必要があります。これにより、ノードプール内のノードが通信できるようになります。 -
エッジノード管理と OSS アクセスの両方にクラウド-エッジ間ネットワーク通信が必要なため、コントロールチャンネルの安定性を維持するために十分なネットワーク帯域幅を確保することを推奨します。
次の表はパラメーターを説明します。
パラメーター
説明
mountPoint
oss://<oss_bucket>/<bucket_dir>は、マウントする UFS のパスを指定します。このパスは単一ファイルではなく、ディレクトリを指す必要があります。このパスにはエンドポイントを含めないでください。fs.oss.endpoint
replicas
mediumtype
path
quota
high
low
-
ステップ 3: データアクセス高速化のテスト
-
次の内容で app.yaml という名前のファイルを作成します。
apiVersion: v1 kind: Pod metadata: name: demo-app spec: nodeSelector: alibabacloud.com/nodepool-id: npxxxxxxxxxxxxx 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説明ACK Edge クラスターでは、
nodeSelectorを使用して、ステップ 2 で指定されたノードプールにテスト Pod をデプロイする必要があります。 -
Pod でシェルを開き、ファイルサイズを確認します。
kubectl exec -it demo-app -- bash du -sh /data/spark-3.0.1-bin-hadoop2.7.tgz期待される出力:
210M /data/spark-3.0.1-bin-hadoop2.7.tgz
(オプション) クリーンアップ
データアクセラレーションが不要になった場合は、Pod、データセット、および JindoRuntime を削除します。
Pod の削除:
kubectl delete pod demo-app
データセットと JindoRuntime の削除:
kubectl delete dataset hadoop