JindoRuntime es un motor de ejecución basado en C++ compatible con la gestión y la caché de conjuntos de datos para OSS. Mediante la orquestación de JindoRuntime, Fluid proporciona observability, escalado automático y migración de datos para los conjuntos de datos. Esta guía muestra cómo usar Fluid con la capacidad de cómputo de ACS para acelerar el acceso a los datos.
Requisitos previos
Activó Object Storage Service (OSS). Para obtener más información, consulte Activate OSS.
Instaló el componente ack-fluid, versión 1.0.11-* o posterior. Para obtener más información, consulte Use Helm to manage ACS applications.
-
Habilitó el modo privilegiado para los pods de ACS.
NotaEl uso de Fluid para acelerar el acceso a los datos requiere el modo privilegiado. Para habilitar este modo, envíe un ticket.
Procedimiento
Paso 1: Preparar los datos en un bucket de OSS
-
Ejecute el siguiente comando para descargar los datos de prueba.
wget https://archive.apache.org/dist/spark/spark-3.0.1/spark-3.0.1-bin-hadoop2.7.tgz -
Cargue los datos de prueba descargados en un bucket de OSS.
ImportanteEste ejemplo usa una instancia de ECS que ejecuta Alibaba Cloud Linux 3.2104 LTS de 64 bits para mostrar cómo cargar datos en OSS. Para consultar las instrucciones correspondientes a otros sistemas operativos, consulte ossutil quick start y ossutil 1.0.
-
Ejecute el siguiente comando para crear un bucket llamado
examplebucket.NotaSi el comando devuelve
ErrorCode=BucketAlreadyExists, significa que el nombre del bucket ya está en uso. Dado que los nombres de los buckets deben ser únicos a nivel global en OSS, reemplaceexamplebucketpor un nombre único.ossutil64 mb oss://examplebucketSalida esperada:
0.668238(s) elapsedEsta salida confirma la creación del bucket llamado
examplebucket. -
Cargue los datos de prueba descargados en el bucket
examplebucket.ossutil64 cp spark-3.0.1-bin-hadoop2.7.tgz oss://examplebucket (Opcional) Configure los permisos de acceso del bucket y de sus datos. Para obtener más información, consulte Overview of access control.
-
Cree un archivo llamado
mySecret.yamlcon el siguiente contenido.apiVersion: v1 kind: Secret metadata: name: mysecret stringData: fs.oss.accessKeyId: xxx fs.oss.accessKeySecret: xxxLos parámetros
fs.oss.accessKeyIdyfs.oss.accessKeySecretespecifican elAccessKey IDy elAccessKey Secretque se usan para acceder a OSS. -
Ejecute el siguiente comando para crear el secreto. Kubernetes codifica automáticamente el secreto creado para evitar que quede expuesto como texto sin formato.
kubectl create -f mySecret.yaml
Paso 2: Crear un conjunto de datos y un JindoRuntime
-
Cree un archivo
resource.yamlcon el siguiente contenido:Un conjunto de datos que describe el conjunto de datos remoto y el sistema de archivos subyacente (UFS).
Un JindoRuntime que inicia un clúster de JindoFS para proporcionar servicios de caché.
NotaPuede ejecutar el comando
kubectl get pods --field-selector=status.phase=Running -n fluid-systempara comprobar si dataset-controller y jindoruntime-controller del componente ack-fluid se están ejecutando correctamente.Este ejemplo utiliza principalmente capacidad de cómputo de CPU. Para acelerar la carga de servicios de modelos de lenguaje extensos (LLM), asegúrese de que la zona seleccionada al crear el clúster sea compatible con recursos de GPU. Para obtener más información, consulte GPU-accelerated compute instance types.
En la siguiente tabla se describen los parámetros.
Parámetro
Descripción
mountPoint
oss://<oss_bucket> especifica la ruta de montaje del UFS. <oss_bucket> es el nombre de su bucket de OSS. Por ejemplo:
oss://examplebucket.fs.oss.endpoint
El endpoint del bucket de OSS. Se admiten tanto endpoints públicos como internos. Por ejemplo:
oss-cn-beijing-internal.aliyuncs.com. Para obtener más información, consulte OSS regions and endpoints.replicas
El número de réplicas de worker en el clúster de JindoFS.
mediumtype
El tipo de medio de caché. Actualmente, JindoFS solo es compatible con uno de los siguientes tipos de caché:
HDD,SSDoMEM.path
La ruta de almacenamiento. Solo se admite una única ruta. Cuando el tipo de caché es
MEM, debe especificar una ruta local para almacenar archivos como los registros.quota
La capacidad máxima de la caché, en GiB.
high
La marca de agua alta para el uso de almacenamiento.
low
La marca de agua baja para el uso de almacenamiento.
-
Cree el JindoRuntime y el conjunto de datos.
kubectl create -f resource.yaml -
Compruebe el estado de despliegue del JindoRuntime y del conjunto de datos.
-
Compruebe el estado de despliegue del conjunto de datos.
kubectl get dataset hadoopSalida esperada:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE hadoop 209.74MiB 0.00B 4.00GiB 0.0% Bound 56s -
Compruebe el estado de despliegue del JindoRuntime.
kubectl get jindoruntime hadoopSalida esperada:
NAME MASTER PHASE WORKER PHASE FUSE PHASE AGE hadoop Ready Ready Ready 2m11sLa salida muestra que el conjunto de datos y el JindoRuntime están listos.
-
-
Ejecute el siguiente comando para comprobar el estado de creación del volumen persistente (PV) y de la solicitud de volumen persistente (PVC). Fluid asigna al PVC el mismo nombre que al conjunto de datos.
kubectl get pv,pvcSalida esperada:
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
Paso 3: Precargar el conjunto de datos
Para mejorar significativamente la velocidad de carga de los datos y garantizar que la lógica de procesamiento sea correcta, es necesario precargar el conjunto de datos.
-
Si los datos en OSS no cambian, cree un archivo
dataload.yamlcon el siguiente contenido para llevar a cabo una precarga de datos única.apiVersion: data.fluid.io/v1alpha1 kind: DataLoad metadata: name: hadoop spec: dataset: name: hadoop namespace: default loadMetadata: true Si los datos en OSS se actualizan de forma dinámica, configure una precarga de datos periódica. Para obtener más información, consulte Scenario 2: Read-only data with periodic updates in backend storage.
-
Cree el recurso DataLoad para realizar la precarga única.
kubectl create -f dataload.yaml -
Compruebe el estado de la precarga de datos.
kubectl get dataloadSalida esperada:
NAME DATASET PHASE AGE DURATION hadoop hadoop Complete 92m 51s
Paso 4: Crear un pod para probar la aceleración
Puede probar el servicio de aceleración de JindoFS mediante la creación de un pod de aplicación o el envío de un trabajo de aprendizaje automático. En el siguiente ejemplo se crea un pod que accede varias veces a los mismos datos. Al comparar los tiempos de acceso, podrá observar la aceleración que proporciona JindoRuntime.
-
Cree un archivo llamado app.yaml con el siguiente contenido.
apiVersion: v1 kind: Pod metadata: name: demo-app labels: # Mounting on ACS requires sidecar injection by the Fluid webhook. Add the following label. 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: ## The name of the Fluid dataset. claimName: hadoop nodeSelector: type: virtual-kubelet tolerations: - key: virtual-kubelet.io/provider operator: Equal value: alibabacloud effect: NoSchedule -
Ejecute el siguiente comando para crear el pod de la aplicación.
kubectl create -f app.yaml -
Pruebe la velocidad de copia del archivo sin la aceleración de la caché de JindoFS.
-
Compruebe el tamaño del archivo de prueba.
kubectl exec -it demo-app -c demo -- du -sh /data/spark-3.0.1-bin-hadoop2.7.tgzSalida esperada:
210M /data/spark-3.0.1-bin-hadoop2.7.tgz -
Compruebe el tiempo que tarda en copiarse el archivo.
time cp /data/spark-3.0.1-bin-hadoop2.7.tgz /dev/nullSalida esperada:
real 0m1.883s user 0m0.001s sys 0m0.041sLa copia del archivo tardó 1,883 segundos.
-
-
Compruebe el estado de la caché del conjunto de datos.
kubectl get dataset hadoopSalida esperada:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE hadoop 209.74MiB 209.74MiB 4.00GiB 100.0% Bound 64mLa salida muestra que ahora el
100.0%de los datos está en la caché de JindoFS. -
Elimine el pod de la aplicación de ejemplo y vuelva a comprobar el tiempo de copia del archivo.
NotaSe elimina el pod de la aplicación para evitar que otros factores, como la caché de páginas, afecten los resultados de la prueba. Si ya existe una caché local en el pod, la operación de copia la usará de forma predeterminada.
Ejecute los siguientes comandos para comprobar el tiempo de copia del archivo.
kubectl exec -it demo-app -c demo -- bash time cp /data/spark-3.0.1-bin-hadoop2.7.tgz /dev/nullSalida esperada:
real 0m0.203s user 0m0.000s sys 0m0.047sAhora la operación de copia tarda 0,203 segundos, aproximadamente 9 veces menos que en el primer intento. Este aumento de velocidad se produce porque JindoFS sirve el archivo desde su caché.
ImportanteLos tiempos de copia proporcionados en este tema son solo de referencia. Los resultados reales pueden variar según su entorno.
Escenario: capacidad de cómputo de ACS para clústeres ACK Pro
Esta guía demostró cómo usar JindoFS para acelerar la copia de archivos con la capacidad de cómputo de ACS. Puede aplicar los mismos pasos cuando utilice la capacidad de cómputo de ACS en un clúster ACK Pro. Para obtener más información sobre el uso de la capacidad de cómputo de ACS en un clúster ACK Pro, consulte Use ACS compute power in an ACK Pro cluster.
Para seguir esta guía en un clúster ACK Pro, aplique los siguientes ajustes:
También debe instalar el componente ack-fluid en el clúster ACK Pro. Para obtener más información, consulte Use Helm to simplify application deployment.
-
Use la siguiente configuración para crear el conjunto de datos y el JindoRuntime.
apiVersion: data.fluid.io/v1alpha1 kind: Dataset metadata: name: hadoop spec: mounts: ## To specify a subdirectory, use the format oss://<oss_bucket>/{oss_path}. - mountPoint: oss://<oss_bucket> # Replace <oss_bucket> with your bucket name. options: fs.oss.endpoint: <oss_endpoint> # Replace <oss_endpoint> with your 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: ## Adjust as needed. replicas: 4 tieredstore: levels: - mediumtype: MEM path: /dev/shm volumeType: emptyDir quota: 48Gi high: "0.99" low: "0.95"Diferencias clave para los clústeres ACK Pro:
ACS usa nodos virtuales, cuyo escalado difiere del de los nodos de un clúster ACK Pro. Por lo tanto, la configuración de ACS requiere
.spec.placement: Sharedynetworkmode.Los workers de Fluid requieren un entorno con un ancho de banda alto. Con ACS, debe especificar recursos de altas especificaciones para garantizar un ancho de banda suficiente. Por ejemplo, la configuración de ACS de esta guía especificó
compute-class: performancey configuró la secciónresourcespara asegurar que los pods tuvieran suficiente ancho de banda.