Criar clusters do HDInsight com o Azure Data Lake Storage Gen1 como armazenamento predefinido com o PowerShell

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

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

  • A opção para criar clusters do HDInsight com acesso a Data Lake Storage Gen1, uma vez que o armazenamento predefinido está disponível para a versão 3.5 e 3.6 do HDInsight.

  • A opção para criar clusters do HDInsight com acesso a Data Lake Storage Gen1 uma vez que o armazenamento predefinido não está disponível para clusters do HDInsight Premium.

Para configurar o HDInsight para trabalhar com Data Lake Storage Gen1 com o PowerShell, siga as instruções nas cinco secções seguintes.

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, certifique-se de que cumpre os seguintes requisitos:

  • Uma subscrição do Azure: aceda a Obter a avaliação gratuita do Azure.

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

  • Windows Software Development Kit (SDK): para instalar o Windows SDK, aceda a Transferências e ferramentas para Windows 10. O SDK é utilizado para criar um certificado de segurança.

  • Microsoft Entra principal de serviço: este tutorial descreve como criar um principal de serviço no Microsoft Entra ID. No entanto, para criar um principal de serviço, tem de ser um administrador Microsoft Entra. Se for administrador, pode ignorar este pré-requisito e prosseguir com o tutorial.

    Nota

    Só pode criar um principal de serviço se for um administrador Microsoft Entra. O administrador de Microsoft Entra tem de criar um principal de serviço antes de poder criar um cluster do HDInsight com Data Lake Storage Gen1. 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 Azure Data Lake Storage Gen1

Para criar uma conta Data Lake Storage Gen1, faça o seguinte:

  1. A partir do ambiente de trabalho, abra uma janela do PowerShell e, em seguida, introduza os fragmentos abaixo. Quando lhe for pedido para iniciar sessão, inicie sessão como um dos administradores ou proprietários da subscrição.

    # Sign 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 registar o Data Lake Storage Gen1 fornecedor de recursos e receber um erro semelhante a , a Register-AzResourceProvider : InvalidResourceNamespace: The resource namespace 'Microsoft.DataLakeStore' is invalidsua subscrição poderá não ser aprovada para Data Lake Storage Gen1. Para ativar a sua subscrição do Azure para Data Lake Storage Gen1, siga as instruções em Introdução ao Azure Data Lake Storage Gen1 com o portal do Azure.

  2. Uma conta Data Lake Storage Gen1 está associada a um grupo de recursos do Azure. Comece por criar um grupo de recursos.

    $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 Data Lake Storage Gen1. O nome da conta que especificar tem de conter apenas letras minúsculas e números.

    $dataLakeStorageGen1Name = "<your new 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. Utilizar Data Lake Storage Gen1 como armazenamento predefinido requer que especifique um caminho de raiz para o qual os ficheiros específicos do cluster são copiados durante a criação do cluster. Para criar um caminho de raiz, que é /clusters/hdiadlcluster no fragmento, utilize os seguintes cmdlets:

    $myrootdir = "/"
    New-AzDataLakeStoreItem -Folder -AccountName $dataLakeStorageGen1Name -Path $myrootdir/clusters/hdiadlcluster
    

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

Cada subscrição do Azure está associada a uma entidade Microsoft Entra. Os utilizadores e serviços que acedem aos recursos de subscrição com o portal do Azure ou a API de Resource Manager do Azure têm primeiro de se autenticar com 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 Data Lake Storage Gen1 que criou anteriormente). Pode fazê-lo ao criar um principal de serviço para a aplicação e ao atribuir-lhe funções através do PowerShell.

Para configurar a autenticação do Active Directory para Data Lake Storage Gen1, execute as tarefas nas duas secções seguintes.

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 cria o certificado.

  1. Na janela do PowerShell, aceda à localização onde instalou o Windows SDK (normalmente, C:\Programas (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 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 ter sido 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 criar um principal de serviço para uma aplicação Microsoft Entra, atribuir uma função ao principal de serviço e autenticar-se como principal de serviço ao fornecer um certificado. Para criar uma aplicação no Microsoft Entra ID, execute os seguintes comandos:

  1. Cole os seguintes cmdlets na janela da consola do PowerShell. Certifique-se de que o valor especificado para a propriedade -DisplayName é exclusivo. 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 à raiz Data Lake Storage Gen1 e a todas as pastas no caminho de raiz que especificou anteriormente. Utilize os seguintes cmdlets:

    Set-AzDataLakeStoreItemAclEntry -AccountName $dataLakeStorageGen1Name -Path / -AceType User -Id $objectId -Permissions All
    Set-AzDataLakeStoreItemAclEntry -AccountName $dataLakeStorageGen1Name -Path /clusters -AceType User -Id $objectId -Permissions All
    Set-AzDataLakeStoreItemAclEntry -AccountName $dataLakeStorageGen1Name -Path /clusters/hdiadlcluster -AceType User -Id $objectId -Permissions All
    

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

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

  1. Obtenha o ID do inquilino da subscrição e armazene-o para utilizar mais tarde.

    $tenantID = (Get-AzContext).Tenant.TenantId
    
  2. Crie o cluster do HDInsight com os seguintes cmdlets:

    # Set these variables
    
    $location = "East US 2"
    $storageAccountName = $dataLakeStorageGen1Name    # Data Lake Storage Gen1 account name
        $storageRootPath = "<Storage root path you specified earlier>"     # e.g. /clusters/hdiadlcluster
        $clusterName = "<unique cluster name>"
    $clusterNodes = <ClusterSizeInNodes>            # The number of nodes in the HDInsight cluster
    $httpCredentials = Get-Credential
    $sshCredentials = Get-Credential
    
    New-AzHDInsightCluster `
           -ClusterType Hadoop `
           -OSType Linux `
           -ClusterSizeInNodes $clusterNodes `
           -ResourceGroupName $resourceGroupName `
           -ClusterName $clusterName `
           -HttpCredential $httpCredentials `
           -Location $location `
           -DefaultStorageAccountType AzureDataLakeStore `
           -DefaultStorageAccountName "$storageAccountName.azuredatalakestore.net" `
           -DefaultStorageRootPath $storageRootPath `
           -Version "3.6" `
           -SshCredential $sshCredentials `
           -AadTenantId $tenantId `
           -ObjectId $objectId `
           -CertificateFilePath $certificateFilePath `
           -CertificatePassword $password
    

    Depois de o cmdlet ter sido concluído com êxito, deverá ver uma saída que lista os detalhes do cluster.

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

Depois de configurar um cluster do HDInsight, pode executar tarefas de teste no mesmo para garantir que consegue aceder a Data Lake Storage Gen1. Para tal, execute uma tarefa do Hive de exemplo para criar uma tabela que utilize os dados de exemplo que já estão disponíveis no Data Lake Storage Gen1 em <raiz>/exemplo/dados/sample.log do cluster.

Nesta secção, vai criar uma ligação Secure Shell (SSH) ao cluster do HDInsight Linux que criou e, em seguida, executar uma consulta do Hive de exemplo.

  1. Depois de efetuar a ligação, inicie a interface de linha de comandos (CLI) do Hive com o seguinte comando:

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

    DROP TABLE log4jLogs;
        CREATE EXTERNAL TABLE log4jLogs (t1 string, t2 string, t3 string, t4 string, t5 string, t6 string, t7 string)
        ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
        STORED AS TEXTFILE LOCATION 'adl:///example/data/';
        SELECT t4 AS sev, COUNT(*) AS count FROM log4jLogs WHERE t4 = '[ERROR]' AND INPUT__FILE__NAME LIKE '%.log' GROUP BY t4;
    

Deverá ver a saída da consulta na consola SSH.

Nota

O caminho para os dados de exemplo no comando CREATE TABLE anterior é adl:///example/data/, onde adl:/// está a raiz do cluster. Seguindo o exemplo da raiz do cluster especificada neste tutorial, o comando é adl://hdiadlstore.azuredatalakestore.net/clusters/hdiadlcluster. Pode utilizar a alternativa mais curta ou fornecer o caminho completo para a raiz do cluster.

Aceder Data Lake Storage Gen1 através de comandos HDFS

Depois de configurar o cluster do HDInsight para utilizar Data Lake Storage Gen1, pode utilizar os comandos da shell do Sistema de Ficheiros Distribuído hadoop (HDFS) para aceder ao arquivo.

Nesta secção, vai fazer uma ligação SSH ao cluster do HDInsight Linux que criou e, em seguida, executa os comandos HDFS.

Depois de efetuar a ligação, liste os ficheiros no Data Lake Storage Gen1 com o seguinte comando do sistema de ficheiros HDFS.

hdfs dfs -ls adl:///

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.

Ver também