Compartir a través de


Inicio rápido: Creación de un clúster de Apache Spark en Azure HDInsight mediante Bicep

En este inicio rápido se usa Bicep para crear un clúster de Apache Spark en Azure HDInsight. Luego se crea un archivo de Jupyter Notebook y se usa para ejecutar consultas de Spark SQL en tablas de Apache Hive. Azure HDInsight es un servicio administrado, de espectro completo y de análisis de código abierto para empresas. El marco de Apache Spark para HDInsight permite un análisis de datos y un procesamiento de clústeres rápidos mediante el procesamiento en memoria. Jupyter Notebook permite interactuar con los datos, combinar código con texto Markdown y realizar visualizaciones simples.

Si usa varios clústeres juntos, querrá crear una red virtual y, si está usando un clúster de Spark, también querrá usar Hive Warehouse Connector. Para más información, consulte Planificación de una red virtual para Azure HDInsight e Integración de Apache Spark y Apache Hive con el conector de Hive Warehouse.

Bicep es un lenguaje específico de dominio (DSL) que usa una sintaxis declarativa para implementar recursos de Azure. Brinda sintaxis concisa, seguridad de tipos confiable y compatibilidad con la reutilización de código. Bicep ofrece la mejor experiencia de creación para sus soluciones de infraestructura como código en Azure.

Requisitos previos

Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.

Revisión del archivo de Bicep

El archivo de Bicep usado en este inicio rápido forma parte de las plantillas de inicio rápido de Azure.

@description('The name of the HDInsight cluster to create.')
param clusterName string

@description('These credentials can be used to submit jobs to the cluster and to log into cluster dashboards. The username must consist of digits, upper or lowercase letters, and/or the following special characters: (!#$%&\'()-^_`{}~).')
@minLength(2)
@maxLength(20)
param clusterLoginUserName string

@description('The password must be at least 10 characters in length and must contain at least one digit, one upper case letter, one lower case letter, and one non-alphanumeric character except (single-quote, double-quote, backslash, right-bracket, full-stop). Also, the password must not contain 3 consecutive characters from the cluster username or SSH username.')
@minLength(10)
@secure()
param clusterLoginPassword string

@description('These credentials can be used to remotely access the cluster. The sshUserName can only consit of digits, upper or lowercase letters, and/or the following special characters (%&\'^_`{}~). Also, it cannot be the same as the cluster login username or a reserved word')
@minLength(2)
param sshUserName string

@description('SSH password must be 6-72 characters long and must contain at least one digit, one upper case letter, and one lower case letter.  It must not contain any 3 consecutive characters from the cluster login name')
@minLength(6)
@maxLength(72)
@secure()
param sshPassword string

@description('Location for all resources.')
param location string = resourceGroup().location

@description('This is the headnode Azure Virtual Machine size, and will affect the cost. If you don\'t know, just leave the default value.')
@allowed([
  'Standard_A4_v2'
  'Standard_A8_v2'
  'Standard_E2_v3'
  'Standard_E4_v3'
  'Standard_E8_v3'
  'Standard_E16_v3'
  'Standard_E20_v3'
  'Standard_E32_v3'
  'Standard_E48_v3'
])
param headNodeVirtualMachineSize string = 'Standard_E8_v3'

@description('This is the workernode Azure Virtual Machine size, and will affect the cost. If you don\'t know, just leave the default value.')
@allowed([
  'Standard_A4_v2'
  'Standard_A8_v2'
  'Standard_E2_v3'
  'Standard_E4_v3'
  'Standard_E8_v3'
  'Standard_E16_v3'
  'Standard_E20_v3'
  'Standard_E32_v3'
  'Standard_E48_v3'
])
param workerNodeVirtualMachineSize string = 'Standard_E8_v3'

resource defaultStorageAccount 'Microsoft.Storage/storageAccounts@2021-08-01' = {
  name: 'storage${uniqueString(resourceGroup().id)}'
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}

resource cluster 'Microsoft.HDInsight/clusters@2021-06-01' = {
  name: clusterName
  location: location
  properties: {
    clusterVersion: '4.0'
    osType: 'Linux'
    tier: 'Standard'
    clusterDefinition: {
      kind: 'spark'
      configurations: {
        gateway: {
          'restAuthCredential.isEnabled': true
          'restAuthCredential.username': clusterLoginUserName
          'restAuthCredential.password': clusterLoginPassword
        }
      }
    }
    storageProfile: {
      storageaccounts: [
        {
          name: replace(replace(defaultStorageAccount.properties.primaryEndpoints.blob, 'https://', ''), '/', '')
          isDefault: true
          container: clusterName
          key: defaultStorageAccount.listKeys('2021-08-01').keys[0].value
        }
      ]
    }
    computeProfile: {
      roles: [
        {
          name: 'headnode'
          targetInstanceCount: 2
          hardwareProfile: {
            vmSize: headNodeVirtualMachineSize
          }
          osProfile: {
            linuxOperatingSystemProfile: {
              username: sshUserName
              password: sshPassword
            }
          }
        }
        {
          name: 'workernode'
          targetInstanceCount: 2
          hardwareProfile: {
            vmSize: workerNodeVirtualMachineSize
          }
          osProfile: {
            linuxOperatingSystemProfile: {
              username: sshUserName
              password: sshPassword
            }
          }
        }
      ]
    }
  }
}

output storage object = defaultStorageAccount.properties
output cluster object = cluster.properties

En el archivo Bicep, se definen dos recursos de Azure:

Implementación del archivo de Bicep

  1. Guarde el archivo de Bicep como main.bicep en el equipo local.

  2. Implemente el archivo de Bicep mediante la CLI de Azure o Azure PowerShell.

    az group create --name exampleRG --location eastus
    az deployment group create --resource-group exampleRG --template-file main.bicep --parameters clusterName=<cluster-name> clusterLoginUserName=<cluster-username> sshUserName=<ssh-username>
    

    Debe proporcionar valores para los siguientes parámetros:

    • Reemplace <cluster-name> por el nombre del clúster de HDInsight para crearlo.
    • Reemplace <cluster-username> por las credenciales usadas para enviar trabajos al clúster y para iniciar sesión en los paneles del clúster. El nombre de usuario tiene una longitud mínima de 2 caracteres y una máxima de 20. Debe constar de dígitos, letras mayúsculas o minúsculas y/o los siguientes caracteres especiales: (!#$%&'()-^_`{}~).').
    • Reemplace <ssh-username> por las credenciales usadas para acceder de forma remota al clúster. El nombre de usuario tiene una longitud mínima de dos caracteres. Debe constar de dígitos, letras mayúsculas o minúsculas y/o los siguientes caracteres especiales: (%&'^_`{}~). No puede ser el mismo que el nombre de usuario del clúster.

    Se le pedirá que escriba lo siguiente:

    • clusterLoginPassword, que debe tener al menos 10 caracteres y debe contener al menos un dígito, una letra mayúscula, una letra minúscula y un carácter no alfanumérico que no sea comillas simples, comillas dobles, barra diagonal inversa, corchete derecho o punto. Tampoco debe contener tres caracteres consecutivos del nombre de usuario del clúster o del nombre de usuario SSH.
    • sshPassword, que debe tener entre 6 y 72 caracteres y debe contener al menos un dígito, una letra mayúscula y una letra minúscula. No debe contener tres caracteres consecutivos que estén presentes en el nombre de inicio de sesión del clúster.

    Nota

    Una vez finalizada la implementación, debería mostrarse un mensaje indicando que la implementación se realizó correctamente.

Si surge algún problema al crear clústeres de HDInsight, podría deberse a que no tiene los permisos adecuados para hacerlo. Para más información, consulte Requisitos de control de acceso.

Revisión de los recursos implementados

Use los Azure Portal, CLI de Azure o Azure PowerShell para enumerar los recursos implementados en el grupo de recursos.

az resource list --resource-group exampleRG

Creación de un archivo Jupyter Notebook

Jupyter Notebook es un entorno de cuaderno interactivo que admite varios lenguajes de programación. Puede usar un archivo de Jupyter Notebook para interactuar con los datos, combinar código con texto Markdown y realizar visualizaciones simples.

  1. Abra Azure Portal.

  2. Seleccione Clústeres de HDInsight y, a continuación, seleccione el clúster que creó.

    Apertura de un clúster de HDInsight en Azure Portal.

  3. En el portal, en la sección Paneles de clúster, seleccione Jupyter Notebook. Cuando se le solicite, escriba las credenciales de inicio de sesión del clúster.

    Apertura de un cuaderno de Jupyter Notebook para ejecutar consultas Spark SQL interactivas.

  4. Seleccione Nuevo>PySpark para crear un cuaderno.

    Creación de un archivo de Jupyter Notebook para ejecutar consultas Spark SQL interactivas.

    Se crea y se abre un nuevo cuaderno con el nombre Untitled(Untitled.pynb).

Ejecución de instrucciones de Apache Spark SQL

SQL (Lenguaje de consulta estructurado) es el lenguaje más común y ampliamente usado para la consulta y la transformación de datos. Spark SQL funciona como una extensión de Apache Spark para procesar datos estructurados, mediante la conocida sintaxis de SQL.

  1. Compruebe que el kernel esté preparado. El kernel está preparado cuando aparece un círculo vacío junto al nombre del kernel en el cuaderno. Un círculo sólido indica que el kernel está ocupado.

    Captura de pantalla en la que se muestra que el kernel está listo.

    Al iniciar el cuaderno por primera vez, el kernel realiza tareas en segundo plano. Espere a que el kernel esté preparado.

  2. Pegue el código siguiente en una celda vacía y presione MAYÚS + ENTRAR para ejecutar el código. El comando muestra las tablas Hive del clúster:

    %%sql
    SHOW TABLES
    

    Si usa un archivo de Jupyter Notebook con su clúster de HDInsight, obtiene una sesión de spark preestablecida que puede usar para ejecutar consultas de Hive mediante Spark SQL. %%sql indica a Jupyter Notebook que use la sesión spark preestablecida para ejecutar la consulta de Hive. La consulta recupera las 10 primeras filas de una tabla de Hive (hivesampletable) que se incluye de forma predeterminada en todos los clústeres de HDInsight. La primera vez que se envíe la consulta, Jupyter creará una aplicación de Spark para el cuaderno. La operación tarda unos 30 segundos en completarse. Cuando la aplicación de Spark está preparada, la consulta se ejecuta aproximadamente en un segundo y genera los resultados. El resultado tendrá una apariencia similar a la siguiente:

    Captura de pantalla en la que se muestra una consulta de Apache Hive en HDInsight.

    Cada vez que se ejecuta una consulta en Jupyter, el título de la ventana del explorador web muestra el estado (Busy) (Ocupado) junto con el título del cuaderno. También verá un círculo sólido junto al texto PySpark en la esquina superior derecha.

  3. Ejecute otra consulta para ver los datos en hivesampletable.

    %%sql
    SELECT * FROM hivesampletable LIMIT 10
    

    Debe actualizar la pantalla para mostrar el resultado de la consulta.

    Captura de pantalla en la que se muestra la salida de la consulta de Hive en HDInsight.

  4. En el menú File (Archivo) del cuaderno, seleccione Close and Halt (Cerrar y detener). Al cerrar el cuaderno se liberan los recursos del clúster, lo que incluye la aplicación de Spark.

Limpieza de recursos

Cuando ya no los necesite, use Azure Portal, la CLI de Azure o Azure PowerShell para eliminar el grupo de recursos y sus recursos.

az group delete --name exampleRG

Pasos siguientes

En este inicio rápido, ha aprendido a crear un clúster de Apache Spark en HDInsight y a ejecutar una consulta básica de Spark SQL. Pase al siguiente tutorial, donde aprenderá a usar un clúster de HDInsight para ejecutar consultas interactivas en datos de ejemplo.