Utilize Azure PowerShell para criar um cluster do HDInsight com o Azure Data Lake Storage Gen1 (como armazenamento adicional)

Saiba como utilizar Azure PowerShell para configurar um cluster do HDInsight com o Azure Data Lake Storage Gen1, como armazenamento adicional. Para obter instruções sobre como criar um cluster do HDInsight com Data Lake Storage Gen1 como armazenamento predefinido, veja Criar um cluster do HDInsight com Data Lake Storage Gen1 como armazenamento predefinido.

Nota

Se quiser utilizar Data Lake Storage Gen1 como armazenamento adicional para o cluster do HDInsight, recomendamos vivamente que o faça enquanto cria o cluster, conforme descrito neste artigo. Adicionar Data Lake Storage Gen1 como armazenamento adicional a um cluster do HDInsight existente é um processo complicado e propenso a erros.

Para tipos de cluster suportados, Data Lake Storage Gen1 podem ser utilizadas como uma conta de armazenamento predefinida ou de armazenamento adicional. Quando Data Lake Storage Gen1 é utilizada como armazenamento adicional, a conta de armazenamento predefinida para os clusters continuará a ser o Armazenamento de Blobs do Azure (WASB) e os ficheiros relacionados com o cluster (como registos, etc.) ainda são escritos no armazenamento predefinido, enquanto os dados que pretende processar podem ser armazenados num Data Lake Storage Gen1. Utilizar Data Lake Storage Gen1 como uma conta de armazenamento adicional não afeta o desempenho ou a capacidade de ler/escrever no armazenamento a partir do cluster.

Utilizar Data Lake Storage Gen1 para o armazenamento de clusters do HDInsight

Eis algumas considerações importantes para utilizar o HDInsight com Data Lake Storage Gen1:

  • Opção para criar clusters do HDInsight com acesso a Data Lake Storage Gen1, uma vez que está disponível armazenamento adicional para as versões 3.2, 3.4, 3.5 e 3.6 do HDInsight.

Configurar o HDInsight para trabalhar com Data Lake Storage Gen1 com o PowerShell envolve os seguintes passos:

  • Criar uma conta do Data Lake Storage Gen1
  • Configurar a autenticação para acesso baseado em funções ao Data Lake Storage Gen1
  • Criar um cluster do HDInsight com autenticação para Data Lake Storage Gen1
  • Executar uma tarefa de teste no cluster

Pré-requisitos

Nota

Recomendamos que utilize o módulo do Azure Az PowerShell para interagir com o Azure. Veja Instalar o Azure PowerShell para começar. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.

Antes de começar este tutorial, tem de ter o seguinte:

  • Uma subscrição do Azure. Consulte Obter versão de avaliação gratuita do Azure.

  • Azure PowerShell 1.0 ou superior. Consulte Como instalar e configurar o Azure PowerShell.

  • Windows SDK. Pode instalá-lo a partir daqui. Pode utilizá-lo para criar um certificado de segurança.

  • Microsoft Entra principal de serviço. Os passos neste tutorial fornecem instruções sobre como criar um principal de serviço no Microsoft Entra ID. No entanto, tem de ser um administrador Microsoft Entra para poder criar um principal de serviço. Se for um administrador Microsoft Entra, pode ignorar este pré-requisito e prosseguir com o tutorial.

    Se não for um administrador Microsoft Entra, não poderá executar os passos necessários para criar um principal de serviço. Nesse caso, o administrador de Microsoft Entra tem de criar primeiro um principal de serviço antes de poder criar um cluster do HDInsight com Data Lake Storage Gen1. Além disso, o principal de serviço tem de ser criado com um certificado, conforme descrito em Criar um principal de serviço com certificado.

Criar uma conta do Data Lake Storage Gen1

Siga estes passos para criar uma conta Data Lake Storage Gen1.

  1. A partir do ambiente de trabalho, abra uma nova janela de Azure PowerShell e introduza o seguinte fragmento. Quando lhe for pedido para iniciar sessão, certifique-se de que inicia sessão como um dos administradores/proprietários da subscrição:

    # Log in to your Azure account
    Connect-AzAccount
    
    # List all the subscriptions associated to your account
    Get-AzSubscription
    
    # Select a subscription
    Set-AzContext -SubscriptionId <subscription ID>
    
    # Register for Data Lake Storage Gen1
    Register-AzResourceProvider -ProviderNamespace "Microsoft.DataLakeStore"
    

    Nota

    Se receber um erro semelhante ao ao Register-AzResourceProvider : InvalidResourceNamespace: The resource namespace 'Microsoft.DataLakeStore' is invalid registar o fornecedor de recursos Data Lake Storage Gen1, é possível que a subscrição não seja aprovada para Data Lake Storage Gen1. Certifique-se de que ativa a sua subscrição do Azure para Data Lake Storage Gen1 ao seguir estas instruções.

  2. Uma conta de armazenamento com Data Lake Storage Gen1 está associada a um Grupo de Recursos do Azure. Comece por criar um Grupo de Recursos do Azure.

    $resourceGroupName = "<your new resource group name>"
    New-AzResourceGroup -Name $resourceGroupName -Location "East US 2"
    

    Deverá ver um resultado como este:

    ResourceGroupName : hdiadlgrp
    Location          : eastus2
    ProvisioningState : Succeeded
    Tags              :
    ResourceId        : /subscriptions/<subscription-id>/resourceGroups/hdiadlgrp
    
  3. Crie uma conta de armazenamento com Data Lake Storage Gen1. O nome da conta que especificar só tem de conter letras minúsculas e números.

    $dataLakeStorageGen1Name = "<your new storage account with Data Lake Storage Gen1 name>"
    New-AzDataLakeStoreAccount -ResourceGroupName $resourceGroupName -Name $dataLakeStorageGen1Name -Location "East US 2"
    

    Deve ver um resultado como o seguinte:

    ...
    ProvisioningState           : Succeeded
    State                       : Active
    CreationTime                : 5/5/2017 10:53:56 PM
    EncryptionState             : Enabled
    ...
    LastModifiedTime            : 5/5/2017 10:53:56 PM
    Endpoint                    : hdiadlstore.azuredatalakestore.net
    DefaultGroup                :
    Id                          : /subscriptions/<subscription-id>/resourceGroups/hdiadlgrp/providers/Microsoft.DataLakeStore/accounts/hdiadlstore
    Name                        : hdiadlstore
    Type                        : Microsoft.DataLakeStore/accounts
    Location                    : East US 2
    Tags                        : {}
    
  4. Carregue alguns dados de exemplo para Data Lake Storage Gen1. Vamos utilizar este artigo mais adiante neste artigo para verificar se os dados estão acessíveis a partir de um cluster do HDInsight. Se estiver à procura de alguns dados de exemplo para carregar, pode obter a pasta Ambulance Data a partir do Repositório de Git do Azure Data Lake.

    $myrootdir = "/"
    Import-AzDataLakeStoreItem -AccountName $dataLakeStorageGen1Name -Path "C:\<path to data>\vehicle1_09142014.csv" -Destination $myrootdir\vehicle1_09142014.csv
    

Configurar a autenticação para acesso baseado em funções ao Data Lake Storage Gen1

Cada subscrição do Azure está associada a uma Microsoft Entra ID. Os utilizadores e serviços que acedem aos recursos da subscrição com o portal do Azure ou a API de Resource Manager do Azure têm primeiro de se autenticar com esse Microsoft Entra ID. O acesso é concedido a subscrições e serviços do Azure ao atribuir-lhes a função adequada num recurso do Azure. Para serviços, um principal de serviço identifica o serviço no Microsoft Entra ID. Esta secção ilustra como conceder a um serviço de aplicação, como o HDInsight, acesso a um recurso do Azure (a conta de armazenamento com Data Lake Storage Gen1 criou anteriormente) ao criar um principal de serviço para a aplicação e atribuir funções a esse através de Azure PowerShell.

Para configurar a autenticação do Active Directory para Data Lake Storage Gen1, tem de efetuar as seguintes tarefas.

  • Criar um certificado autoassinado
  • Criar uma aplicação no Microsoft Entra ID e um Principal de Serviço

Criar um certificado autoassinado

Certifique-se de que tem o Windows SDK instalado antes de prosseguir com os passos nesta secção. Também tem de ter criado um diretório, como C:\mycertdir, onde o certificado será criado.

  1. Na janela do PowerShell, navegue para a localização onde instalou o Windows SDK (normalmente, C:\Program Files (x86)\Windows Kits\10\bin\x86 e utilize o utilitário MakeCert para criar um certificado autoassinado e uma chave privada. Utilize os seguintes comandos.

    $certificateFileDir = "<my certificate directory>"
    cd $certificateFileDir
    
    makecert -sv mykey.pvk -n "cn=HDI-ADL-SP" CertFile.cer -r -len 2048
    

    Ser-lhe-á pedido que introduza a palavra-passe da chave privada. Depois de o comando ser executado com êxito, deverá ver um CertFile.cer e mykey.pvk no diretório de certificados que especificou.

  2. Utilize o utilitário Pvk2Pfx para converter os ficheiros .pvk e .cer que o MakeCert criou num ficheiro .pfx. Execute o seguinte comando.

    pvk2pfx -pvk mykey.pvk -spc CertFile.cer -pfx CertFile.pfx -po <password>
    

    Quando lhe for pedido, introduza a palavra-passe da chave privada que especificou anteriormente. O valor especificado para o parâmetro -po é a palavra-passe associada ao ficheiro .pfx. Depois de o comando ser concluído com êxito, também deverá ver um CertFile.pfx no diretório de certificados que especificou.

Criar um Microsoft Entra ID e um principal de serviço

Nesta secção, vai executar os passos para criar um principal de serviço para uma aplicação Microsoft Entra, atribuir uma função ao principal de serviço e autenticar como principal de serviço ao fornecer um certificado. Execute os seguintes comandos para criar uma aplicação no Microsoft Entra ID.

  1. Cole os seguintes cmdlets na janela da consola do PowerShell. Certifique-se de que o valor especificado para a propriedade -DisplayName é exclusivo. Além disso, os valores de -HomePage e -IdentiferUris são valores de marcador de posição e não são verificados.

    $certificateFilePath = "$certificateFileDir\CertFile.pfx"
    
    $password = Read-Host -Prompt "Enter the password" # This is the password you specified for the .pfx file
    
    $certificatePFX = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($certificateFilePath, $password)
    
    $rawCertificateData = $certificatePFX.GetRawCertData()
    
    $credential = [System.Convert]::ToBase64String($rawCertificateData)
    
    $application = New-AzADApplication `
        -DisplayName "HDIADL" `
        -HomePage "https://contoso.com" `
        -IdentifierUris "https://contoso.com" `
        -CertValue $credential  `
        -StartDate $certificatePFX.NotBefore  `
        -EndDate $certificatePFX.NotAfter
    
    $applicationId = $application.ApplicationId
    
  2. Crie um principal de serviço com o ID da aplicação.

    $servicePrincipal = New-AzADServicePrincipal -ApplicationId $applicationId -Role Contributor
    
     $objectId = $servicePrincipal.Id
    
  3. Conceda ao principal de serviço acesso à pasta Data Lake Storage Gen1 e ao ficheiro ao qual irá aceder a partir do cluster do HDInsight. O fragmento abaixo fornece acesso à raiz da conta de armazenamento com Data Lake Storage Gen1 (onde copiou o ficheiro de dados de exemplo) e o próprio ficheiro.

    Set-AzDataLakeStoreItemAclEntry -AccountName $dataLakeStorageGen1Name -Path / -AceType User -Id $objectId -Permissions All
    Set-AzDataLakeStoreItemAclEntry -AccountName $dataLakeStorageGen1Name -Path /vehicle1_09142014.csv -AceType User -Id $objectId -Permissions All
    

Criar um cluster do HDInsight Linux com Data Lake Storage Gen1 como armazenamento adicional

Nesta secção, vamos criar um cluster do HDInsight Hadoop Linux com Data Lake Storage Gen1 como armazenamento adicional. Para esta versão, o cluster do HDInsight e a conta de armazenamento com Data Lake Storage Gen1 têm de estar na mesma localização.

  1. Comece por obter o ID do inquilino da subscrição. Vai precisar disso mais tarde.

    $tenantID = (Get-AzContext).Tenant.TenantId
    
  2. Para esta versão, para um cluster do Hadoop, Data Lake Storage Gen1 só podem ser utilizadas como um armazenamento adicional para o cluster. O armazenamento predefinido continuará a ser o armazenamento de Blobs do Azure (WASB). Por isso, vamos criar primeiro a conta de armazenamento e os contentores de armazenamento necessários para o cluster.

    # Create an Azure storage account
    $location = "East US 2"
    $storageAccountName = "<StorageAccountName>"   # Provide a Storage account name
    
    New-AzStorageAccount -ResourceGroupName $resourceGroupName -StorageAccountName $storageAccountName -Location $location -Type Standard_GRS
    
    # Create an Azure Blob Storage container
    $containerName = "<ContainerName>"              # Provide a container name
    $storageAccountKey = (Get-AzStorageAccountKey -Name $storageAccountName -ResourceGroupName $resourceGroupName)[0].Value
    $destContext = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey
    New-AzStorageContainer -Name $containerName -Context $destContext
    
  3. Crie o cluster do HDInsight. Utilize os seguintes cmdlets.

    # Set these variables
    $clusterName = $containerName                   # As a best practice, have the same name for the cluster and container
    $clusterNodes = <ClusterSizeInNodes>            # The number of nodes in the HDInsight cluster
    $httpCredentials = Get-Credential
    $sshCredentials = Get-Credential
    
    New-AzHDInsightCluster -ClusterName $clusterName -ResourceGroupName $resourceGroupName -HttpCredential $httpCredentials -Location $location -DefaultStorageAccountName "$storageAccountName.blob.core.windows.net" -DefaultStorageAccountKey $storageAccountKey -DefaultStorageContainer $containerName  -ClusterSizeInNodes $clusterNodes -ClusterType Hadoop -Version "3.4" -OSType Linux -SshCredential $sshCredentials -ObjectID $objectId -AadTenantId $tenantID -CertificateFilePath $certificateFilePath -CertificatePassword $password
    

    Depois de o cmdlet ser concluído com êxito, deverá ver uma saída a listar os detalhes do cluster.

Executar tarefas de teste no cluster do HDInsight para utilizar o Data Lake Storage Gen1

Depois de configurar um cluster do HDInsight, pode executar tarefas de teste no cluster para testar se o cluster do HDInsight pode aceder a Data Lake Storage Gen1. Para tal, iremos executar uma tarefa do Hive de exemplo que cria uma tabela com os dados de exemplo que carregou anteriormente para a sua conta de armazenamento com Data Lake Storage Gen1.

Nesta secção, irá entrar no SSH no cluster do HDInsight Linux que criou e executar uma consulta do Hive de exemplo.

  1. Depois de ligar, inicie a CLI do Hive com o seguinte comando:

    hive
    
  2. Com a CLI, introduza as seguintes instruções para criar uma nova tabela denominada veículos com os dados de exemplo no Data Lake Storage Gen1:

    DROP TABLE vehicles;
    CREATE EXTERNAL TABLE vehicles (str string) LOCATION 'adl://<mydatalakestoragegen1>.azuredatalakestore.net:443/';
    SELECT * FROM vehicles LIMIT 10;
    

    Deverá ver um resultado semelhante ao seguinte:

    1,1,2014-09-14 00:00:03,46.81006,-92.08174,51,S,1
    1,2,2014-09-14 00:00:06,46.81006,-92.08174,13,NE,1
    1,3,2014-09-14 00:00:09,46.81006,-92.08174,48,NE,1
    1,4,2014-09-14 00:00:12,46.81006,-92.08174,30,W,1
    1,5,2014-09-14 00:00:15,46.81006,-92.08174,47,S,1
    1,6,2014-09-14 00:00:18,46.81006,-92.08174,9,S,1
    1,7,2014-09-14 00:00:21,46.81006,-92.08174,53,N,1
    1,8,2014-09-14 00:00:24,46.81006,-92.08174,63,SW,1
    1,9,2014-09-14 00:00:27,46.81006,-92.08174,4,NE,1
    1,10,2014-09-14 00:00:30,46.81006,-92.08174,31,N,1
    

Access Data Lake Storage Gen1 using HDFS commands (Aceder a Data Lake Storage Gen1 com comandos HDFS)

Depois de configurar o cluster do HDInsight para utilizar Data Lake Storage Gen1, pode utilizar os comandos da shell do HDFS para aceder ao arquivo.

Nesta secção, irá introduzir o SSH no cluster do HDInsight Linux que criou e executar os comandos HDFS.

Depois de ligado, utilize o seguinte comando do sistema de ficheiros HDFS para listar os ficheiros na conta de armazenamento com Data Lake Storage Gen1.

hdfs dfs -ls adl://<storage account with Data Lake Storage Gen1 name>.azuredatalakestore.net:443/

Esta ação deve listar o ficheiro que carregou anteriormente para Data Lake Storage Gen1.

15/09/17 21:41:15 INFO web.CaboWebHdfsFileSystem: Replacing original urlConnectionFactory with org.apache.hadoop.hdfs.web.URLConnectionFactory@21a728d6
Found 1 items
-rwxrwxrwx   0 NotSupportYet NotSupportYet     671388 2015-09-16 22:16 adl://mydatalakestoragegen1.azuredatalakestore.net:443/mynewfolder

Também pode utilizar o hdfs dfs -put comando para carregar alguns ficheiros para Data Lake Storage Gen1 e, em seguida, utilizar hdfs dfs -ls para verificar se os ficheiros foram carregados com êxito.

Consulte também