Guia de início rápido: criar cluster Apache Spark no Azure HDInsight usando o modelo ARM

Neste início rápido, você usa um modelo do Azure Resource Manager (modelo ARM) para criar um cluster Apache Spark no Azure HDInsight. Em seguida, crie um arquivo do Jupyter Notebook e use-o para executar consultas do Spark SQL em tabelas do Apache Hive. O Azure HDInsight é um serviço de análise gerido, de espectro completo e de código aberto para empresas. A estrutura Apache Spark para HDInsight permite análise de dados rápida e computação em cluster usando processamento na memória. O Jupyter Notebook permite que você interaja com seus dados, combine código com texto de marcação e faça visualizações simples.

Se você estiver usando vários clusters juntos, convém criar uma rede virtual e, se estiver usando um cluster do Spark, também desejará usar o Hive Warehouse Connector. Para obter mais informações, consulte Planejar uma rede virtual para o Azure HDInsight e Integrar o Apache Spark e o Apache Hive com o Hive Warehouse Connector.

Um modelo do Azure Resource Manager é um arquivo JSON (JavaScript Object Notation) que define a infraestrutura e a configuração do seu projeto. O modelo utiliza sintaxe declarativa. Você descreve a implantação pretendida sem escrever a sequência de comandos de programação para criar a implantação.

Se o seu ambiente cumpre os pré-requisitos e se está familiarizado com a utilização de modelos ARM, selecione o botão Implementar no Azure. O modelo será aberto no portal do Azure.

Button to deploy the Resource Manager template to Azure.

Pré-requisitos

Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.

Rever o modelo

O modelo utilizado neste início rápido pertence aos Modelos de Início Rápido do Azure.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.5.6.12127",
      "templateHash": "4742950082151195489"
    }
  },
  "parameters": {
    "clusterName": {
      "type": "string",
      "metadata": {
        "description": "The name of the HDInsight cluster to create."
      }
    },
    "clusterLoginUserName": {
      "type": "string",
      "maxLength": 20,
      "minLength": 2,
      "metadata": {
        "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: (!#$%&'()-^_`{}~)."
      }
    },
    "clusterLoginPassword": {
      "type": "secureString",
      "minLength": 10,
      "metadata": {
        "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."
      }
    },
    "sshUserName": {
      "type": "string",
      "minLength": 2,
      "metadata": {
        "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"
      }
    },
    "sshPassword": {
      "type": "secureString",
      "maxLength": 72,
      "minLength": 6,
      "metadata": {
        "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"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for all resources."
      }
    },
    "headNodeVirtualMachineSize": {
      "type": "string",
      "defaultValue": "Standard_E8_v3",
      "allowedValues": [
        "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"
      ],
      "metadata": {
        "description": "This is the headnode Azure Virtual Machine size, and will affect the cost. If you don't know, just leave the default value."
      }
    },
    "workerNodeVirtualMachineSize": {
      "type": "string",
      "defaultValue": "Standard_E8_v3",
      "allowedValues": [
        "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"
      ],
      "metadata": {
        "description": "This is the workernode Azure Virtual Machine size, and will affect the cost. If you don't know, just leave the default value."
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-08-01",
      "name": "[format('storage{0}', uniqueString(resourceGroup().id))]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2"
    },
    {
      "type": "Microsoft.HDInsight/clusters",
      "apiVersion": "2021-06-01",
      "name": "[parameters('clusterName')]",
      "location": "[parameters('location')]",
      "properties": {
        "clusterVersion": "4.0",
        "osType": "Linux",
        "tier": "Standard",
        "clusterDefinition": {
          "kind": "spark",
          "configurations": {
            "gateway": {
              "restAuthCredential.isEnabled": true,
              "restAuthCredential.username": "[parameters('clusterLoginUserName')]",
              "restAuthCredential.password": "[parameters('clusterLoginPassword')]"
            }
          }
        },
        "storageProfile": {
          "storageaccounts": [
            {
              "name": "[replace(replace(reference(resourceId('Microsoft.Storage/storageAccounts', format('storage{0}', uniqueString(resourceGroup().id)))).primaryEndpoints.blob, 'https://', ''), '/', '')]",
              "isDefault": true,
              "container": "[parameters('clusterName')]",
              "key": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', format('storage{0}', uniqueString(resourceGroup().id))), '2021-08-01').keys[0].value]"
            }
          ]
        },
        "computeProfile": {
          "roles": [
            {
              "name": "headnode",
              "targetInstanceCount": 2,
              "hardwareProfile": {
                "vmSize": "[parameters('headNodeVirtualMachineSize')]"
              },
              "osProfile": {
                "linuxOperatingSystemProfile": {
                  "username": "[parameters('sshUserName')]",
                  "password": "[parameters('sshPassword')]"
                }
              }
            },
            {
              "name": "workernode",
              "targetInstanceCount": 2,
              "hardwareProfile": {
                "vmSize": "[parameters('workerNodeVirtualMachineSize')]"
              },
              "osProfile": {
                "linuxOperatingSystemProfile": {
                  "username": "[parameters('sshUserName')]",
                  "password": "[parameters('sshPassword')]"
                }
              }
            }
          ]
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts', format('storage{0}', uniqueString(resourceGroup().id)))]"
      ]
    }
  ],
  "outputs": {
    "storage": {
      "type": "object",
      "value": "[reference(resourceId('Microsoft.Storage/storageAccounts', format('storage{0}', uniqueString(resourceGroup().id))))]"
    },
    "cluster": {
      "type": "object",
      "value": "[reference(resourceId('Microsoft.HDInsight/clusters', parameters('clusterName')))]"
    }
  }
}

Dois recursos do Azure são definidos no modelo:

Implementar o modelo

  1. Selecione o botão Implementar no Azure, abaixo, para iniciar sessão no Azure e abrir o modelo do ARM.

    Button to deploy the Resource Manager template to Azure.

  2. Introduza ou selecione os seguintes valores:

    Propriedade Descrição
    Subscrição Na lista suspensa, selecione a assinatura do Azure usada para o cluster.
    Grupo de recursos Na lista pendente, selecione o grupo de recursos existente ou selecione Criar novo.
    Localização O valor será preenchido automaticamente com a localização utilizada para o grupo de recursos.
    Nome do Cluster Introduza um nome globalmente exclusivo. Para este modelo, use apenas letras minúsculas e números.
    Nome de Utilizador de Início de Sessão do Cluster Forneça o nome de usuário, o padrão é admin.
    Palavra-passe de Início de Sessão do Cluster Forneça uma senha. A senha deve ter pelo menos 10 caracteres e deve conter pelo menos um dígito, uma letra maiúscula e uma letra minúscula, um caractere não alfanumérico (exceto caracteres ' ` ").
    Nome de utilizador SSH Forneça o nome de usuário, o padrão é sshuser.
    Palavra-passe SSH Forneça a senha.

    Create Spark cluster in HDInsight using Azure Resource Manager template.

  3. Reveja os TERMOS E CONDIÇÕES. Em seguida, selecione Concordo com os termos e condições mencionados acima e, em seguida , Comprar. Você receberá uma notificação de que sua implantação está em andamento. A criação de um cluster demora cerca de 20 minutos.

Se você tiver um problema com a criação de clusters HDInsight, pode ser que você não tenha as permissões certas para fazê-lo. Para obter mais informações, veja Access control requirements (Requisitos do controlo de acesso).

Rever os recursos implementados

Depois que o cluster for criado, você receberá uma notificação de implantação bem-sucedida com um link Ir para o recurso . A página Grupo de recursos listará o novo cluster HDInsight e o armazenamento padrão associado ao cluster. Cada cluster tem um Armazenamento do Azure, um Azure Data Lake Storage Gen1 ou uma Azure Data Lake Storage Gen2 dependência. É conhecida como a conta de armazenamento padrão. O cluster HDInsight e sua conta de armazenamento padrão devem ser colocalizados na mesma região do Azure. A exclusão de clusters não exclui a dependência da conta de armazenamento. É conhecida como a conta de armazenamento padrão. O cluster HDInsight e sua conta de armazenamento padrão devem ser colocalizados na mesma região do Azure. A exclusão de clusters não exclui a conta de armazenamento.

Criar um ficheiro do Jupyter Notebook

Jupyter Notebook é um ambiente de notebook interativo que suporta várias linguagens de programação. Você pode usar um arquivo do Jupyter Notebook para interagir com seus dados, combinar código com texto de marcação e executar visualizações simples.

  1. Abra o portal do Azure.

  2. Selecione Clusters do HDInsight e, em seguida, selecione o cluster que criou.

    Open HDInsight cluster in the Azure portal.

  3. No portal, na seção Painéis de cluster, selecione Jupyter Notebook. Se lhe for pedido, introduza as credenciais de início de sessão do cluster.

    Open Jupyter Notebook to run interactive Spark SQL query.

  4. Selecione New (Novo)>PySpark para criar um bloco de notas.

    Create a Jupyter Notebook file to run interactive Spark SQL query.

    É criado e aberto um novo bloco de notas com o nome Untitled (Untitled.pynb).

Executar instruções SQL do Apache Spark

SQL (Structured Query Language) é a linguagem mais comum e mais utilizada para consultar e transformar dados. O Spark SQL funciona como uma extensão do Apache Spark para o processamento de dados estruturados e utiliza a sintaxe familiar do SQL Server.

  1. Verifique se o kernel está pronto. O kernel está pronto quando vir um círculo hollow junto ao nome do kernel no bloco de notas. O círculo sólido indica que o kernel está ocupado.

    Kernel status alt-text="Status do kernel." border="true":::

    Quando inicia o bloco de notas pela primeira vez, o kernel efetua algumas tarefas em segundo plano. Aguarde que o kernel esteja preparado.

  2. Cole o seguinte código numa célula vazia e, em seguida, prima SHIFT + ENTER para o executar. O comando lista as tabelas do Hive no cluster:

    %%sql
    SHOW TABLES
    

    Ao usar um arquivo do Jupyter Notebook com o cluster HDInsight, você obtém uma sessão predefinida spark que pode ser usada para executar consultas do Hive usando o Spark SQL. %%sql indica ao Bloco de Notas do Jupyter que utilize a sessão spark predefinida para executar a consulta do Hive. A consulta devolve as primeiras dez linhas de uma tabela do Hive (hivesampletable) que vem em todos os clusters do HDInsight por predefinição. Na primeira vez que você enviar a consulta, o Jupyter criará um aplicativo Spark para o bloco de anotações. São precisos cerca de 30 segundos para concluir. Quando o aplicativo Spark estiver pronto, a consulta será executada em cerca de um segundo e produzirá os resultados. O resultado tem o seguinte aspeto:

    Apache Hive query in HDInsight. y no HDInsight" border="true":::

    Sempre que executar uma consulta no Jupyter, o título da janela do browser apresenta o estado (Ocupado) juntamente com o título do bloco de notas. Também vê um círculo sólido junto ao texto do PySpark no canto superior direito.

  3. Execute outra consulta para ver os dados no hivesampletable.

    %%sql
    SELECT * FROM hivesampletable LIMIT 10
    

    O ecrã deve atualizar-se e mostrar o resultado da consulta.

    Hive query output in HDInsight. Insight" border="true":::

  4. No menu File (Ficheiro) do bloco de notas, selecione Close and Halt (Fechar e Parar). Desligar o bloco de anotações libera os recursos do cluster, incluindo o aplicativo Spark.

Clean up resources (Limpar recursos)

Depois de concluir o início rápido, convém excluir o cluster. Com o HDInsight, seus dados são armazenados no Armazenamento do Azure, para que você possa excluir com segurança um cluster quando ele não estiver em uso. Você também é cobrado por um cluster HDInsight, mesmo quando ele não está em uso. Como as cobranças para o cluster são muitas vezes mais do que as taxas para armazenamento, faz sentido econômico excluir clusters quando eles não estão em uso.

No portal do Azure, navegue até o cluster e selecione Excluir.

Azure portal delete an HDInsight cluster. sight cluster" border="true":::

Também pode selecionar o nome do grupo de recursos para abrir a página do grupo de recursos e, em seguida, selecionar Eliminar grupo de recursos. Ao excluir o grupo de recursos, você exclui o cluster HDInsight e a conta de armazenamento padrão.

Próximos passos

Neste início rápido, você aprendeu como criar um cluster Apache Spark no HDInsight e executar uma consulta básica do Spark SQL. Avance para o próximo tutorial para saber como usar um cluster HDInsight para executar consultas interativas em dados de exemplo.