Conceptos básicos de Apache Spark en Azure Synapse Analytics

Apache Spark es una plataforma de procesamiento paralelo que admite el procesamiento en memoria para mejorar el rendimiento de aplicaciones de análisis de macrodatos. Apache Spark en Azure Synapse Analytics es una de las implementaciones de Microsoft de Apache Spark en la nube.

Azure Synapse facilita la creación y configuración de funcionalidades de Spark en Azure. Azure Synapse proporciona una implementación diferente de las funcionalidades de Spark que se documentan aquí.

Grupos de Spark

Se crea un grupo de Apache Spark sin servidor en Azure Portal. Es la definición de un grupo de Spark que, cuando se crean instancias, se utiliza para crear una instancia de Spark que procesa datos. Cuando se crea un grupo de Spark, solo existe como metadatos; no se consumen, ejecutan ni cobran recursos. Un grupo de Spark tiene una serie de propiedades que controlan las características de una instancia de Spark. Estas características incluyen, entre otras, el nombre, el tamaño, el comportamiento de escalado y el período de vida.

Dado que no hay ningún costo de recursos asociado a la creación de grupos de Spark, se puede crear cualquier cantidad de ellos con cualquier número de configuraciones diferentes. Los permisos también se pueden aplicar a los grupos de Spark, lo que permite a los usuarios acceder a algunos y a otros no.

Un procedimiento recomendado consiste en crear grupos de Spark más pequeños que se puedan usar para el desarrollo y la depuración y, después, otros más grandes para ejecutar cargas de trabajo de producción.

Puede consultar cómo crear un grupo de Spark y ver todas sus propiedades en Introducción a los grupos de Spark en Azure Synapse Analytics.

Instancias de Spark

Las instancias de Spark se crean al conectarse a un grupo de Spark, crear una sesión y ejecutar un trabajo. Como varios usuarios pueden acceder a un solo grupo de Spark, se crea una nueva instancia de Spark para cada usuario que se conecta.

Cuando se envía un segundo trabajo, si hay capacidad en el grupo, la instancia de Spark existente también tiene capacidad. A continuación, la instancia existente procesa el trabajo. De lo contrario, si la capacidad está disponible en el nivel de grupo, se crea una nueva instancia de Spark.

La facturación de las instancias se inicia cuando se inician las máquinas virtuales de Azure. La facturación de las instancias del grupo de Spark se detiene cuando las instancias del grupo cambian a la terminación. Para más información sobre cómo se inician y desasignan las máquinas virtuales de Azure, consulte Estados y estado de facturación de Azure Virtual Machines

Ejemplos

Ejemplo 1

  • Vas a crear un grupo de Spark con el nombre SP1; tiene un tamaño de clúster fijo de 20 nodos medianos
  • Vas a enviar un trabajo de notebook, J1 que usa 10 nodos, se crea una instancia de Spark, SI1 para procesar el trabajo
  • Ahora envías otro trabajo, J2, que usa 10 nodos porque todavía hay capacidad en el grupo y la instancia, J2, la procesa SI1
  • Si J2 hubiera solicitado 11 nodos, no habría habido capacidad en SP1 ni en SI1. En este caso, si J2 procede de un cuaderno, se rechaza el trabajo; Si J2 procede de un trabajo por lotes, se pone en cola.
  • La facturación se inicia en el envío del trabajo del cuaderno J1.
    • El grupo de Spark se crea una instancia con 20 nodos medianos, cada uno con 8 núcleos virtuales y, normalmente, tarda aproximadamente 3 minutos en iniciarse. 20 x 8 = 160 núcleos virtuales.
    • En función del tiempo de inicio exacto del grupo de Spark, el tiempo de espera de inactividad y el tiempo de ejecución de los dos trabajos del cuaderno; es probable que el grupo se ejecute entre 18 y 20 minutos (tiempo de creación de instancias del grupo de Spark + tiempo de ejecución del trabajo del cuaderno + tiempo de espera de inactividad).
    • Suponiendo que el tiempo de ejecución sea de 20 minutos, 160 x 0,3 horas = 48 horas de núcleo virtual.
    • Nota: la horas de núcleo virtual se facturan por minuto y los precios de núcleo virtual varían según la región de Azure. Para más información, consulta Precios de Azure Synapse

Ejemplo 2

  • Crearás una llamada al grupo de Spark SP2; tiene habilitada una escalabilidad automática con un mínimo de 10 a un máximo de 20 nodos medianos
  • Vas a enviar un trabajo de cuaderno J1 que usa 10 nodos; se crea una instancia de Spark SI1 para procesar el trabajo
  • Ahora vas a enviar otro trabajo J2 que usa 10 nodos; debido a que todavía hay capacidad en el grupo, la instancia se escala automáticamente a 20 nodos y procesa J2.
  • La facturación se inicia en el envío del trabajo del cuaderno J1.
    • El grupo de Spark se crea una instancia con 10 nodos medianos, cada uno con 8 núcleos virtuales y, normalmente, tarda aproximadamente 3 minutos en iniciarse. 10 x 8, 80 núcleos virtuales.
    • En el envío de J2, el grupo escala automáticamente agregando otros 10 nodos medianos y normalmente tarda 4 minutos en escalarse automáticamente. Agregando 10 x 8, 80 núcleos virtuales para un total de 160 núcleos virtuales.
    • Según el tiempo de inicio del grupo de Spark, el tiempo de ejecución del primer trabajo de la computadora portátil J1, el tiempo para escalar verticalmente el grupo, el tiempo de ejecución de la segunda computadora portátil y, finalmente, el tiempo de espera inactivo; es probable que el grupo se ejecute entre 22 y 24 minutos (tiempo de creación de instancias del grupo de Spark + tiempo de ejecución del trabajo del cuaderno J1, todo a 80 núcleos virtuales) + (tiempo de escalado vertical automático del grupo de Spark + tiempo de ejecución del trabajo del cuaderno J2 + tiempo de espera inactivo, todo a 160 núcleos virtuales).
    • 80 núcleos virtuales durante 4 minutos + 160 núcleos virtuales durante 20 minutos = 58,67 núcleos virtuales.
    • Nota: la horas de núcleo virtual se facturan por minuto y los precios de núcleo virtual varían según la región de Azure. Para más información, consulta Precios de Azure Synapse

Ejemplo 3

  • Va a crear un grupo de Spark llamado SP1. Tiene un tamaño de clúster fijo de 20 nodos.
  • Vas a enviar un trabajo de cuaderno J1 que usa 10 nodos; se crea una instancia de Spark SI1 para procesar el trabajo.
  • Otro usuario U2 envía un trabajo J3 que usa 10 nodos; se crea una nueva instancia SI2 de Spark para procesar el trabajo.
  • Ahora enviarás otro trabajo J2 que usa 10 nodos; porque todavía hay capacidad en el grupo y la instancia J2 es procesada por SI1.
  • La facturación comienza con el envío del trabajo del cuaderno J1.
    • Se crea una instancia del SI1 del grupo de Spark con 20 nodos medianos, cada uno con 8 núcleos virtuales y, normalmente, tarda aproximadamente 3 minutos en iniciarse. 20 x 8, 160 núcleos virtuales.
    • Dependiendo del tiempo de inicio exacto del grupo de Spark, el tiempo de espera del ide y el tiempo de ejecución del primer y tercer trabajo del cuaderno; Es probable que el grupo de SI1 se ejecute entre 18 y 20 minutos (tiempo de creación de instancias del grupo de Spark + tiempo de ejecución del trabajo del cuaderno + tiempo de espera de inactividad).
    • Se crea una instancia de otro grupo de Spark SI2 con 20 nodos medianos, cada uno con 8 núcleos virtuales, y normalmente tarda unos 3 minutos en iniciarse. 20 x 8, 160 núcleos virtuales
    • Según el tiempo de inicio exacto del grupo de Spark, el tiempo de espera del ide y el tiempo de ejecución del primer trabajo del cuaderno; es probable que el grupo de SI2 se ejecute entre 18 y 20 minutos (tiempo de creación de instancias del grupo de Spark + tiempo de ejecución del trabajo del cuaderno + tiempo de espera de inactividad).
    • Suponiendo que los dos grupos se ejecutan durante 20 minutos cada uno, 160 x 03 x 2 = 96 horas de núcleo virtual.
    • Nota: la horas de núcleo virtual se facturan por minuto y los precios de núcleo virtual varían según la región de Azure. Para más información, consulta Precios de Azure Synapse

Cuotas y restricciones de recursos en Apache Spark para Azure Synapse

Nivel de área de trabajo

Cada área de trabajo de Azure Synapse incluye una cuota predeterminada de núcleos virtuales que se puede usar para Spark. La cuota se divide entre la cuota de usuario y la cuota de flujo de trabajo para que ninguno de los patrones de uso utilice los núcleos virtuales del área de trabajo. La cuota es diferente según el tipo de suscripción, pero es simétrica entre el usuario y el flujo de entrada. Sin embargo, si solicitas más núcleos virtuales de los que quedan en el área de trabajo, obtendrás el siguiente error:

Failed to start session: [User] MAXIMUM_WORKSPACE_CAPACITY_EXCEEDED
Your Spark job requested 480 vCores.
However, the workspace only has xxx vCores available out of quota of yyy vCores.
Try reducing the numbers of vCores requested or increasing your vCore quota. Click here for more information - https://go.microsoft.com/fwlink/?linkid=213499

El vínculo del mensaje apunta a este artículo.

En el siguiente artículo se describe cómo solicitar un aumento en la cuota del área de trabajo del núcleo virtual.

  • Seleccione "Azure Synapse Analytics" como el tipo de servicio.
  • En la ventana detalles de la cuota, seleccione Apache Spark (núcleo virtual) por área de trabajo.

Solicitud de un aumento de la cuota estándar desde Ayuda y soporte técnico

Nivel de grupo de Spark

Al definir un grupo de Spark, se define de forma eficaz una cuota por usuario para ese grupo, si se ejecutan varios cuadernos o trabajos, o una combinación de dos, es posible agotar la cuota del grupo. Si lo haces, se generará un mensaje de error

Failed to start session: Your Spark job requested xx vCores.
However, the pool is consuming yy vCores out of available zz vCores.Try ending the running job(s) in the pool, reducing the numbers of vCores requested, increasing the pool maximum size or using another pool

Para solucionar este problema, deberás reducir el uso de los recursos del grupo antes de enviar una nueva solicitud de recursos mediante la ejecución de un cuaderno o un trabajo.

Pasos siguientes