Fluidは、ビッグデータアプリケーションやAIアプリケーションなど、クラウドネイティブシナリオのデータ集約型アプリケーションで使用できる、オープンソース、Kubernetesネイティブ、分散型データセットのオーケストレーションおよびアクセラレーションエンジンです。 エッジコンピューティングでは、Fluidのデータセット高速化エンジンにより、エッジノードがOSSファイルにアクセスする速度が大幅に向上します。 このトピックでは、Container Service for Kubernetes (ACK) EdgeクラスターでFluidのデータアクセラレーション機能を使用する方法について説明します。
前提条件
Kubernetes 1.18以降を実行するACK Edgeクラスターが作成されます。 詳細については、「コンソールでのACK Edgeクラスターの作成」をご参照ください。
エッジノードが追加されたエッジノードプールが作成されます。 詳細については、「エッジノードプールの作成」および「エッジノードの追加」をご参照ください。
クラウドネイティブAIスイートがインストールされ、ack-fluidコンポーネントがデプロイされます。
重要オープンソースFluidをインストールしている場合は、ack-fluidコンポーネントをインストールする前にアンインストールする必要があります。
クラウドネイティブのAIスイートがデプロイされていない場合: スイートをデプロイするときに、Data Access AccelerationのFluidを有効にします。
クラウドネイティブAIスイートがデプロイされている場合: ACKコンソールのクラウドネイティブAIスイートページで、ack-fluidをデプロイします。
kubectlクライアントがACKクラスターに接続されています。 詳細については、「クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続する」をご参照ください。
Object Storage Service (OSS) が有効化されています。 詳細については、「OSSの有効化」をご参照ください。
手順1: OSSにデータをアップロードする
次のコマンドを実行して、テストデータセットをElastic Compute Service (ECS) インスタンスにダウンロードします。
wget https://archive.apache.org/dist/spark/spark-3.0.1/spark-3.0.1-bin-hadoop2.7.tgz
テストデータセットを OSS バケット
examplebucket
という名前のバケットを作成します。次のコマンドを実行して、
examplebucket
という名前のバケットを作成します。ossutil64 mb oss:// examplebucket
次の出力が表示された場合、
examplebucket
という名前のバケットが作成されます。0.668238経過
テストデータセットを
examplebucket
にアップロードします。ossutil64 cp spark-3.0.1-bin-hadoop2.7.tgz oss:// examplebucket
ステップ2: データセットとJindoRuntimeの作成
データセットを作成する前に、ECSインスタンスのルートディレクトリに
mySecret.yaml
という名前のファイルを作成します。apiVersion: v1 kind: 秘密 メタデータ: 名前: mysecret stringData: fs.oss.accessKeyId: xxx fs.oss.accessKeySecret: xxx
手順1でossへのアクセスに使用する
AccessKey ID
およびAccessKey secret
として、fs.oss.accessKeyId
およびfs. OSS. accessKeySecret
を指定します。次のコマンドを実行してシークレットを作成します。Kubernetesは作成されたシークレットを暗号化し、保存された情報がプレーンテキストとして公開されないようにします。
kubectl create -f mySecret.yaml
次のyamlテンプレートを使用して、
resource. YAML
という名前のファイルを作成します。 このテンプレートは、次の操作を実行するために使用されます。リモートストレージ内のデータセットと基になるファイルシステム (UFS) に関する情報を指定するデータセットを作成します。
JindoRuntimeを作成して、データキャッシュ用のJindoFSクラスターを起動します。
apiVersion: data.fluid.io/v1alpha 1 kind: データセット メタデータ: 名前: hadoop spec: nodeAffinity: required: nodeSelectorTerms: - matchExpressions: -キー: alibabacloud.com/nodepool-id operator: In values: -npxxxxxxxxxxxxxx mounts: -mountPoint: oss://<oss_bucket>/<bucket_dir> options: fs.oss.endpoint: <oss_endpoint> 名前: hadoop パス: "/" encryptOptions: -名前: fs.oss.accessKeyId valueFrom: secretKeyRef: 名前: mysecret キー: fs.oss.accessKeyId -名前: fs.oss.accessKeySecret valueFrom: secretKeyRef: 名前: mysecret キー: fs.oss.accessKeySecret --- apiVersion: data.fluid.io/v1alpha 1 kind: JindoRuntime メタデータ: 名前: hadoop spec: nodeSelector: alibabacloud.com/nodepool-id: npxxxxxxxxxxxx レプリカ:2 tieredstore: レベル: -mediumtype: MEM パス: /dev/shm volumeType: emptyDir クォータ: 2Gi high: "0.99" low: "0.95"
説明ACK Edgeクラスターでは、
nodeAffinity
フィールドとnodeSelector
フィールドを使用してデータセットとJindoRuntimeを同じノードプールにデプロイし、ノードプール内のネットワーク接続を確保する必要があります。エッジノード管理とOSSアクセスの両方でクラウドにアクセスするにはクラウドエッジネットワークが必要なため、管理チャネルの安定性を確保するために十分なネットワーク帯域幅を確保することを推奨します。
次の表に、YAMLテンプレートのパラメーターを示します。
パラメーター
説明
mountPoint
oss://<oss_bucket>/<bucket_dir>
は、マウントされるUFSへのパスを指定します。 このパスは、ファイルではなくディレクトリを指す必要があります。 パスにエンドポイントは必要ありません。fs.oss.endpoint
OSSバケットのパブリックエンドポイントまたはプライベートエンドポイント。 詳細については、「リージョン、エンドポイント、オープンポート」をご参照ください。
レプリカ
JindoFSクラスター内のワーカーの数。
mediumtype
キャッシュタイプ。 このパラメーターは、JindoRuntimeテンプレートを作成するときに使用するキャッシュタイプを指定します。 有効な値: HDD、SDD、およびMEM。
パス
ストレージパス。 指定できるパスは1つだけです。 mediumtypeをMEMに設定した場合、ログなどのデータを保存するためのローカルパスを指定する必要があります。
クォータ
キャッシュされたデータの最大サイズ。 (単位:GB)
高い
ストレージ容量の上限。
低い
ストレージ容量の下限。
次のコマンドを実行して、データセットとJindoRuntimeを作成します。
kubectl create -f resource.yaml
次のコマンドを実行して、データセットがデプロイされているかどうかを確認します。
kubectl getデータセットhadoop
期待される出力:
名UFS合計サイズキャッシュキャッシュ容量キャッシュパーセント位相年齢 hadoop 210MiB 0.00B 4.00GiB 0.0% バウンド1h
次のコマンドを実行して、JindoRuntimeがデプロイされているかどうかを確認します。
kubectl get jindoruntime hadoop
期待される出力:
名マスターフェーズ作業者フェーズヒューズフェーズ年齢 hadoopレディレディ4m4 5s
次のコマンドを実行して、永続ボリューム (PV) と永続ボリューム要求 (PVC) が作成されているかどうかを確認します。
kubectl get pv,pvc
期待される出力:
が容量アクセスモードに名前を付けると、ポリシーステータスはSTORAGECLASSの理由年齢を主張します persistentvolume/hadoop 100Gi RWXバインド済みのデフォルト /hadoop 52m 名前ステータスボリューム容量アクセスモードSTORAGECLASS年齢 persistentvolumeclaim/hadoopバインドされたhadoop 100Gi RWX 52m
上記の出力は、データセットとJindoRuntimeが作成されたことを示しています。
手順3: データアクセスの高速化をテストするためのアプリケーションコンテナの作成
アプリケーションをコンテナにデプロイして、JindoFSのデータアクセラレーションをテストできます。 機械学習ジョブを送信して、関連する機能を使用することもできます。 このトピックでは、同じデータへのアクセスをテストするために、アプリケーションをコンテナーにデプロイします。 テストは、時間消費を比較するために複数回実行される。
app.yamlという名前のファイルを作成し、次のYAMLテンプレートをファイルにコピーします。
apiVersion: v1 種類: ポッド メタデータ: 名前: demo-app spec: nodeSelector: alibabacloud.com/nodepool-id: npxxxxxxxxxxx コンテナ: -name: デモ 画像: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 volumeMounts: -mountPath: /データ 名前: hadoop volumes: -name: hadoop persistentVolumeClaim: claimName: hadoop
説明ACK Edgeクラスターでは、
nodeSelector
フィールドを使用して、手順2で指定したノードプールにテストポッドをデプロイする必要があります。次のコマンドを実行して、アプリケーションをデプロイします。
kubectl create -f app.yaml
次のコマンドを実行して、指定したファイルのサイズを照会します。
kubectl exec -it demo-app -- bash du -sh /データ /spark-3.0.1-bin-hadoop2.7.tgz
期待される出力:
210M /データ /spark-3.0.1-bin-hadoop2.7.tgz
次のコマンドを実行して、ファイルのコピーにかかる時間を照会します。
time cp /data/spark-3.0.1-bin-hadoop2.7.tgz /dev/null
期待される出力:
リアル0m18.386s ユーザー0m0.002s sys 0m0.105s
出力は、ファイルのコピーに18秒かかることを示します。
次のコマンドを実行して、データセットのキャッシュデータを確認します。
kubectl getデータセットhadoop
期待される出力:
名UFS合計サイズキャッシュキャッシュ容量キャッシュパーセント位相年齢 hadoop 210.00MiB 210.00MiB 4.00GiB 100.0% バウンド1h
出力は、データの210のMiBがオンプレミスストレージにキャッシュされていることを示します。
次のコマンドを実行して、現在のアプリケーションを削除し、同じアプリケーションを作成します。
説明このステップは、ページキャッシュなどの他の要因が結果に影響を与えることを回避するために実行される。
kubectl delete -f app.yaml && kubectl create -f app.yaml
次のコマンドを実行して、ファイルのコピーにかかる時間を照会します。
kubectl exec -it demo-app -- bash 時間cp /データ /spark-3.0.1-bin-hadoop2.7.tgz /dev/null
期待される出力:
リアル0m0.048s ユーザー0m0.001s sys 0m0.046s
出力は、ファイルのコピーに48ミリ秒かかり、300倍以上の短縮が必要であることを示しています。
説明これは、ファイルがJindoFSによってキャッシュされているためです。
環境をクリアする
データアクセラレーションを使用しなくなった場合は、環境をクリアします。
次のコマンドを実行して、アプリケーションを削除します。
kubectl delete pod demo-app
次のコマンドを実行して、データセットとJindoRuntimeを削除します。
kubectl deleteデータセットhadoop