Criar clusters do HDInsight com o Armazenamento de Data Lake do Azure Gen1 como armazenamento padrão usando o PowerShell

Aprenda a usar o Azure PowerShell para configurar clusters do Azure HDInsight com o Armazenamento de Data Lake do Azure Gen1, como armazenamento padrão. Para obter instruções sobre como criar um cluster do HDInsight com o Data Lake Storage Gen1 como armazenamento adicional, consulte Crie um cluster do HDInsight com o Data Lake Storage Gen1 como armazenamento adicional.

Aqui estão algumas considerações importantes para usar HDInsight com Data Lake Storage Gen1:

  • A opção para criar clusters HDInsight com acesso ao Data Lake Storage Gen1 como armazenamento padrão está disponível para as versões 3.5 e 3.6 do HDInsight.

  • A opção para criar clusters HDInsight com acesso ao Data Lake Storage Gen1 como armazenamento padrão é não disponível para clusters HDInsight Premium.

Para configurar o HDInsight para trabalhar com Data Lake armazenamento Gen1 usando o PowerShell, siga as instruções nas próximas cinco seções.

Pré-requisitos

Observação

Recomendamos que você use o módulo Az PowerShell do Azure para interagir com o Azure. Confira Instalar o Azure PowerShell para começar. Para saber como migrar para o módulo Az PowerShell, confira Migrar o Azure PowerShell do AzureRM para o Az.

Antes de começar este tutorial, verifique se você atende aos seguintes requisitos:

  • Uma assinatura do Azure: acesse Obter uma avaliação gratuita do Azure.

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

  • Software Development Kit do Windows (SDK do Windows): para instalar o SDK do Windows, acesse Downloads e ferramentas para o Windows 10. O SDK é usado para criar um certificado de segurança.

  • Microsoft Entra entidade de serviço: este tutorial descreve como criar uma entidade de serviço no Microsoft Entra ID. No entanto, para criar uma entidade de serviço, você deve ser um administrador Microsoft Entra. Se você for um administrador, ignore esse pré-requisito e continue com o tutorial.

    Observação

    Você só poderá criar uma entidade de serviço se for um administrador Microsoft Entra. O administrador do Microsoft Entra deve criar uma entidade de serviço para que você possa criar um cluster HDInsight com Data Lake Storage Gen1. A entidade de serviço deve ser criada com um certificado, conforme descrito em Criar uma entidade de serviço com certificado.

Criar uma conta do Azure Data Lake Storage Gen1

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

  1. Na área de trabalho, abra uma janela do PowerShell e insira os snippets abaixo. Quando receber uma solicitação para se conectar, conecte-se como um dos administradores ou proprietários da assinatura.

    # 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"
    

    Observação

    Se você registrar o provedor de recursos do Data Lake Storage Gen1 e receber um erro semelhante a Register-AzResourceProvider : InvalidResourceNamespace: The resource namespace 'Microsoft.DataLakeStore' is invalid, sua assinatura poderá não estar aprovada para o Data Lake Storage Gen1. Para habilitar sua assinatura do Azure para o Data Lake Storage Gen1, siga as instruções em Introdução ao Azure Data Lake Storage Gen1 usando o portal do Azure.

  2. Uma conta do Data Lake armazenamento Gen1 está associada um grupo de recursos do Azure. Comece criando um grupo de recursos.

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

    Você deverá ver uma saída como esta:

    ResourceGroupName : hdiadlgrp
    Location          : eastus2
    ProvisioningState : Succeeded
    Tags              :
    ResourceId        : /subscriptions/<subscription-id>/resourceGroups/hdiadlgrp
    
  3. Crie uma conta do Azure Data Lake Storage Gen1. O nome de conta especificado deve 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"
    

    Você verá algo semelhante ao mostrado a seguir:

    ...
    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. Usar o Data Lake Storage Gen1 como armazenamento padrão requer que você especifique um caminho raiz no qual os arquivos específicos do cluster são copiados durante a criação do cluster. Para criar um caminho raiz, que é /clusters/hdiadlcluster no snippet, use os seguintes cmdlets:

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

Configurar a autenticação para acesso baseado em função para o Data Lake armazenamento Gen1

Cada assinatura do Azure está associada a uma entidade Microsoft Entra. Os usuários e serviços que acessam recursos de assinatura usando o portal do Azure ou a API de Resource Manager do Azure devem primeiro se autenticar com Microsoft Entra ID. O acesso é concedido às assinaturas e serviços do Azure atribuindo a função apropriada para eles em um recurso do Azure. Para serviços, uma entidade de serviço identifica o serviço em Microsoft Entra ID.

Esta seção ilustra como conceder a um serviço de aplicativo, como o HDInsight, acesso a um recurso do Azure (a conta Data Lake Storage Gen1 criada anteriormente). Isso é feito pela criação de uma entidade de serviço para o aplicativo e pela atribuição de funções a ela por meio do PowerShell.

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

Crie um certificado autoassinado

Verifique se o SDK do Windows está instalado antes de continuar com as etapas nesta seção. Também é necessário ter criado um diretório, como C:\mycertdir, no qual o certificado é criado.

  1. Na janela do PowerShell, acesse a localização em que você instalou o SDK do Windows (normalmente, C:\Program Files (x86)\Windows Kits\10\bin\x86) e use o utilitário MakeCert para criar um certificado autoassinado e uma chave privada. Use os seguintes comandos:

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

    Você receberá uma solicitação para inserir a senha da chave privada. Após a execução bem-sucedida do comando, você deverá ver CertFile.cer e mykey.pvk no diretório de certificado especificado.

  2. Use o utilitário Pvk2Pfx para converter os arquivos .pvk e .cer criados pelo MakeCert em um arquivo .pfx. Execute o comando a seguir:

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

    Quando receber a solicitação, insira a senha da chave privada especificada anteriormente. O valor especificado para o parâmetro -po é a senha associada ao arquivo .pfx. Após a conclusão bem-sucedida do comando, você também deverá ver um arquivo CertFile.pfx no diretório de certificado especificado.

Criar um Microsoft Entra ID e uma entidade de serviço

Nesta seção, você criará uma entidade de serviço para um aplicativo Microsoft Entra, atribuirá uma função à entidade de serviço e autenticará como a entidade de serviço fornecendo um certificado. Para criar um aplicativo no Microsoft Entra ID, execute os seguintes comandos:

  1. Cole os seguintes cmdlets na janela do console do PowerShell. Verifique se o valor especificado para a propriedade -DisplayName é exclusivo. Os valores de -HomePage e -IdentiferUris são valores de espaço reservado 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 uma entidade de serviço usando a ID do aplicativo.

    $servicePrincipal = New-AzADServicePrincipal -ApplicationId $applicationId -Role Contributor
    
    $objectId = $servicePrincipal.Id
    
  3. Conceda ao serviço principal acesso à raiz do Data Lake Storage Gen1 e a todas as pastas no caminho raiz que você especificou anteriormente. Use 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 o Data Lake Storage Gen1 como armazenamento padrão

Nesta seção, você cria um cluster do HDInsight Hadoop Linux com o Data Lake Storage Gen1 como o armazenamento padrão. Para esta versão, o cluster HDInsight e o Data Lake Storage Gen1 devem estar no mesmo local.

  1. Recupere a ID de locatário da assinatura e armazene-a para uso futuro.

    $tenantID = (Get-AzContext).Tenant.TenantId
    
  2. Crie o cluster HDInsight usando 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
    

    Após a conclusão bem-sucedida do cmdlet, você deverá ver uma saída que lista os detalhes do cluster.

Executar trabalhos de teste no cluster HDInsight para usar Data Lake Storage Gen1

Depois de configurar um cluster do HDInsight, você poderá executar tarefas de teste nele para garantir que ele possa acessar o Data Lake Storage Gen1. Para fazer isso, execute um exemplo de trabalho do Hive para criar uma tabela que use os dados de exemplo que já estão disponíveis no Data Lake Storage Gen1 em <raiz do cluster>/example/data/sample.log.

Nesta seção, você estabelece uma conexão SSH (Secure Shell) com o cluster Linux HDInsight criado e, em seguida, executa uma consulta do Hive de exemplo.

  1. Depois de estabelecer a conexão, inicie a CLI (interface de linha de comando) do Hive usando o seguinte comando:

    hive
    
  2. Use a CLI para inserir as instruções a seguir para criar uma nova tabela denominada veículos usando os dados de amostra 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;
    

Você deve ver a saída da consulta no console do SSH.

Observação

O caminho para os dados de exemplo no comando CREATE TABLE anterior é adl:///example/data/, em que adl:/// é a raiz do cluster. Seguindo o exemplo da raiz do cluster especificada neste tutorial, o comando é adl://hdiadlstore.azuredatalakestore.net/clusters/hdiadlcluster. É possível usar a alternativa mais curta ou fornecer o caminho completo para a raiz do cluster.

Acesse o Data Lake Storage Gen1 usando os comandos do HDFS

Depois de configurar o cluster do HDInsight para usar o Data Lake Storage Gen1, você pode usar os comandos do shell do Hadoop Distributed File System (HDFS) para acessar o armazenamento.

Nesta seção, você estabelece uma conexão SSH com o cluster Linux HDInsight criado e, em seguida, executa os comandos do HDFS.

Depois de estabelecer a conexão, liste os arquivos no Data Lake Storage Gen1 usando o seguinte comando do sistema de arquivos HDFS.

hdfs dfs -ls adl:///

Também é possível usar o comando hdfs dfs -put para carregar alguns arquivos no Data Lake Storage Gen1 e, em seguida, usar hdfs dfs -ls para verificar se os arquivos foram carregados com êxito.

Confira também