Compartir a través de


Configuración de trabajos de Apache Spark en Azure Machine Learning

SE APLICA A:Extensión ML de la CLI de Azure v2 (actual)SDK de Python azure-ai-ml v2 (actual)

La integración de Azure Machine Learning, con Azure Synapse Analytics, proporciona un acceso sencillo a la funcionalidad de computación distribuida, respaldada por Azure Synapse, para escalar trabajos de Apache Spark en Azure Machine Learning.

En este artículo, aprenderá a enviar un trabajo de Spark mediante el proceso de Spark sin servidor de Azure Machine Learning, la cuenta de almacenamiento de Azure Data Lake Storage (ADLS) Gen 2 y el paso de identidad de usuario en unos sencillos pasos.

Para más información sobre Conceptos de Apache Spark en Azure Machine Learning, visite este recurso.

Requisitos previos

SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

Adición de asignaciones de roles en cuentas de almacenamiento de Azure

Antes de enviar un trabajo de Apache Spark, debemos asegurarnos de que las rutas de acceso de datos de entrada y salida sean accesibles. Asigne los roles Colaborador y Colaborador de datos de Storage Blob a la identidad del usuario que ha iniciado la sesión para habilitar el acceso de lectura y escritura.

Para asignar roles adecuados a la identidad de usuario:

  1. Abrir Microsoft Azure Portal.

  2. Busque y seleccione el servicio Cuentas de almacenamiento.

    Captura de pantalla expandible que muestra la búsqueda y selección del servicio Cuentas de almacenamiento, en Microsoft Azure Portal.

  3. En la página Cuentas de almacenamiento, seleccione la cuenta de almacenamiento de Azure Data Lake Storage (ADLS) Gen 2 de la lista. Se abre una página que muestra Información general de la cuenta de almacenamiento.

    Captura de pantalla expandible que muestra la selección de la cuenta de almacenamiento de Azure Data Lake Storage (ADLS) Gen 2.

  4. Seleccione Control de acceso (IAM) en el panel izquierdo.

  5. Seleccione Agregar asignación de roles.

    Captura de pantalla extensible que muestra la pantalla de claves de acceso de Azure.

  6. Busque el rol Colaborador de datos de blobs de almacenamiento.

  7. Seleccione el rol Colaborador de datos de Storage Blob.

  8. Seleccione Siguiente.

    Captura de pantalla extensible que muestra la pantalla de adición de asignación de roles de Azure.

  9. Seleccione Usuario, grupo o entidad de servicio.

  10. Seleccione + Seleccionar miembros.

  11. En el cuadro de texto situado debajo de Seleccionar, busque la identidad del usuario.

  12. Seleccione la identidad de usuario de la lista para que se muestra en Miembros seleccionados.

  13. Seleccione la identidad de usuario adecuada.

  14. Seleccione Siguiente.

    Captura de pantalla extensible que muestra la pestaña Miembros de la pantalla de adición de asignación de roles de Azure.

  15. Seleccione Revisar y asignar.

    Captura de pantalla extensible que muestra la pestaña de revisión y asignación de la pantalla de adición de asignación de roles de Azure.

  16. Repita los pasos del 2 al 13 para la asignación de roles de Colaborador de Storage Blob.

Los datos de la cuenta de almacenamiento de Azure Data Lake Storage (ADLS) Gen 2 deben ser accesibles una vez que la identidad del usuario tenga asignados los roles adecuados.

Creación de código de Python parametrizado

Un trabajo de Spark requiere un script de Python que acepte argumentos. Para compilar este script, puede modificar el código de Python desarrollado a partir de la limpieza y transformación de datos. Aquí se muestra un script de Python de ejemplo:

# titanic.py
import argparse
from operator import add
import pyspark.pandas as pd
from pyspark.ml.feature import Imputer

parser = argparse.ArgumentParser()
parser.add_argument("--titanic_data")
parser.add_argument("--wrangled_data")

args = parser.parse_args()
print(args.wrangled_data)
print(args.titanic_data)

df = pd.read_csv(args.titanic_data, index_col="PassengerId")
imputer = Imputer(inputCols=["Age"], outputCol="Age").setStrategy(
    "mean"
)  # Replace missing values in Age column with the mean value
df.fillna(
    value={"Cabin": "None"}, inplace=True
)  # Fill Cabin column with value "None" if missing
df.dropna(inplace=True)  # Drop the rows which still have any missing value
df.to_csv(args.wrangled_data, index_col="PassengerId")

Nota:

  • En este ejemplo de código de Python se usa pyspark.pandas, que solo admite Spark runtime versión 3.2.
  • Asegúrese de que el archivo titanic.py se carga en una carpeta denominada src. La carpeta src debe encontrarse en el mismo directorio donde ha creado el script o cuaderno de Python o el archivo de especificación de YAML que define el trabajo de Spark independiente.

Ese script admite dos argumentos: --titanic_data y --wrangled_data. Estos argumentos pasan la ruta de acceso de datos de entrada y la carpeta de salida, respectivamente. El script utiliza el archivo titanic.csv, disponible aquí. Cargue este archivo en un contenedor creado en la cuenta de almacenamiento de Azure Data Lake Storage (ADLS) Gen 2.

Enviar un trabajo independiente de Spark

SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

Sugerencia

Puede enviar un trabajo de Spark desde:

En este ejemplo de especificación YAML se muestra un trabajo de Spark independiente. Usa un proceso de Spark sin servidor de Azure Machine Learning el acceso directo de la identidad de usuario y un URI de datos de entrada y salida en el formato abfss://<FILE_SYSTEM_NAME>@<STORAGE_ACCOUNT_NAME>.dfs.core.windows.net/<PATH_TO_DATA>. Aquí, <FILE_SYSTEM_NAME> coincide con el nombre del contenedor.

$schema: http://azureml/sdk-2-0/SparkJob.json
type: spark

code: ./src 
entry:
  file: titanic.py

conf:
  spark.driver.cores: 1
  spark.driver.memory: 2g
  spark.executor.cores: 2
  spark.executor.memory: 2g
  spark.executor.instances: 2

inputs:
  titanic_data:
    type: uri_file
    path: abfss://<FILE_SYSTEM_NAME>@<STORAGE_ACCOUNT_NAME>.dfs.core.windows.net/data/titanic.csv
    mode: direct

outputs:
  wrangled_data:
    type: uri_folder
    path: abfss://<FILE_SYSTEM_NAME>@<STORAGE_ACCOUNT_NAME>.dfs.core.windows.net/data/wrangled/
    mode: direct

args: >-
  --titanic_data ${{inputs.titanic_data}}
  --wrangled_data ${{outputs.wrangled_data}}

identity:
  type: user_identity

resources:
  instance_type: standard_e4s_v3
  runtime_version: "3.2"

En el archivo de especificación YAML anterior:

  • la propiedad code define la ruta de acceso relativa de la carpeta que contiene el archivo con parámetrostitanic.py.
  • La propiedad resource define los valores de instance_type y Apache Spark runtime_version que usa el proceso de Spark sin servidor. Actualmente se admiten estos valores de tipo de instancia:
    • standard_e4s_v3
    • standard_e8s_v3
    • standard_e16s_v3
    • standard_e32s_v3
    • standard_e64s_v3

El archivo YAML mostrado anteriormente se puede usar en el comando az ml job create, con el parámetro --file, para crear un trabajo de Spark independiente como se muestra:

az ml job create --file <YAML_SPECIFICATION_FILE_NAME>.yaml --subscription <SUBSCRIPTION_ID> --resource-group <RESOURCE_GROUP> --workspace-name <AML_WORKSPACE_NAME>

Sugerencia

Es posible que tenga un grupo de Synapse Spark existente en el área de trabajo de Azure Synapse. Para usar un grupo de Synapse Spark existente, siga las instrucciones para asociar un grupo de Synapse Spark en el área de trabajo de Azure Machine Learning.

Pasos siguientes