Usar Data Lake Storage Gen1 com clusters Azure HDInsight

Observação

Implante novos clusters HDInsight usando o Azure Data Lake Storage Gen2 para ter um melhor desempenho e novos recursos.

Para analisar dados no cluster HDInsight, é possível armazenar os dados em Azure Blob storage, Azure Data Lake Storage Gen1 ou no Azure Data Lake Storage Gen2. Todas as opções de armazenamento permitem que os clusters HDInsight usados para cálculo sejam excluídos com segurança sem que ocorra perda de dados do usuário.

Neste artigo, você aprenderá como funciona o Data Lake Storage Gen1 com clusters HDInsight. Para saber como o Armazenamento de Blobs do Azure funciona com clusters HDInsight, consulte Usar o Armazenamento de Blobs do Azure com clusters do Azure HDInsight. Para saber mais sobre a criação de um cluster HDInsight, consulte Criar clusters do Apache Hadoop no HDInsight.

Observação

O Data Lake Storage Gen1 é sempre acessado por meio de um canal seguro, portanto não há nenhum nome do esquema de sistema de arquivos adls. Use sempre adl.

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.

Disponibilidade para clusters do HDInsight

O Apache Hadoop dá suporte a uma noção do sistema de arquivos padrão. O sistema de arquivos padrão implica esquema e autoridade padrões. Ele também pode ser usado para resolver caminhos relativos. Durante o processo de criação do cluster HDInsight, você pode especificar um contêiner de blobs no Armazenamento do Azure como o sistema de arquivos padrão. Ou, com o HDInsight 3.5 e versões mais novas, é possível selecionar o Armazenamento de Blobs do Azure ou o Azure Data Lake Storage Gen1 como o sistema de arquivos padrão com algumas exceções. O cluster e a conta de armazenamento devem ser hospedados na mesma região.

Os clusters HDInsight podem usar o Data Lake Storage Gen1 de 2 maneiras:

  • Como armazenamento padrão
  • Como armazenamento adicional, com o Armazenamento de Blobs do Azure como armazenamento padrão.

Atualmente, apenas alguns tipos/versões de cluster HDInsight dão suporte ao uso do Data Lake Storage Gen1 como armazenamento padrão e contas de armazenamento adicional:

Tipo de cluster HDInsight Data Lake Storage Gen1 como armazenamento padrão Data Lake Storage Gen1 como armazenamento adicional Observações
HDInsight versão 4.0 Não Não Não há suporte para ADLS Gen1 com HDInsight 4.0
HDInsight versão 3.6 Sim Sim Exceto HBase
HDInsight versão 3.5 Sim Sim Exceto HBase
HDInsight versão 3.4 Não Sim
HDInsight versão 3.3 Não Não
HDInsight versão 3.2 Não Sim

Aviso

O HDInsight HBase não é compatível com o Azure Data Lake Storage Gen1

Usar o Data Lake Storage Gen1 como uma conta de armazenamento adicional não afeta o desempenho. Ou a capacidade de ler ou gravar no Armazenamento de Blobs do Azure a partir do cluster.

Usar o Data Lake Storage Gen1 como armazenamento padrão

Quando o HDInsight é implantado com o Data Lake Storage Gen1 como armazenamento padrão, os arquivos relacionados ao cluster são armazenados no adl://mydatalakestore/<cluster_root_path>/, em que <cluster_root_path> é o nome de uma pasta que você cria no Data Lake Storage. Ao especificar um caminho raiz para cada cluster, você pode usar a mesma conta do Data Lake Storage para mais de um cluster. Portanto, você terá uma configuração em que:

  • O cluster 1 pode usar o caminho adl://mydatalakestore/cluster1storage
  • O cluster 2 pode usar o caminho adl://mydatalakestore/cluster2storage

Observe que os dois clusters usam a mesma conta mydatalakestore do Data Lake Storage Gen1. Cada cluster tem acesso ao seu próprio sistema de arquivos raiz no Data Lake Storage. A experiência de implantação do portal do Azure solicita que você use um nome de pasta como /clusters/<clustername> para o caminho raiz.

Para usar o Data Lake Storage Gen1 como armazenamento padrão, é necessário conceder acesso à entidade de serviço para os seguintes caminhos:

  • A raiz da conta do Data Lake Storage Gen1. Por exemplo: adl://mydatalakestore/.
  • A pasta para todas as pastas de cluster. Por exemplo: adl://mydatalakestore/clusters.
  • A pasta para o cluster. Por exemplo: adl://mydatalakestore/clusters/cluster1storage.

Para saber mais sobre como criar a entidade de serviço e conceder acesso, confira Configurar acesso ao Data Lake Storage.

Extrair um certificado do Azure Key Vault para uso na criação do cluster

Se o certificado para a entidade de serviço for armazenado no Azure Key Vault, será necessário converter o certificado para o formato correto. Os snippets de código a seguir mostram como fazer a conversão.

Primeiro, baixe o certificado do Key Vault e extraia o SecretValueText.

$certPassword = Read-Host "Enter Certificate Password"
$cert = (Get-AzureKeyVaultSecret -VaultName 'MY-KEY-VAULT' -Name 'MY-SECRET-NAME')
$certValue = [System.Convert]::FromBase64String($cert.SecretValueText)

Em seguida, converta o SecretValueText em um certificado.

$certObject = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 -ArgumentList $certValue,$null,"Exportable, PersistKeySet"
$certBytes = $certObject.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, $certPassword.SecretValueText);
$identityCertificate = [System.Convert]::ToBase64String($certBytes)

Depois, use o $identityCertificate para implantar um novo cluster, como no snippet a seguir:

New-AzResourceGroupDeployment `
    -ResourceGroupName $resourceGroupName `
    -TemplateFile $pathToArmTemplate `
    -identityCertificate $identityCertificate `
    -identityCertificatePassword $certPassword.SecretValueText `
    -clusterName  $clusterName `
    -clusterLoginPassword $SSHpassword `
    -sshPassword $SSHpassword `
    -servicePrincipalApplicationId $application.ApplicationId

Usar o Data Lake Storage Gen1 como armazenamento adicional

É possível usar o Data Lake Storage Gen1 como armazenamento adicional para o cluster também. Nesses casos, o armazenamento padrão do cluster pode ser um Armazenamento de Blobs do Azure ou uma conta do Azure Data Lake Storage Gen1. Quando estiver executando trabalhos do HDInsight com os dados armazenados no Azure Data Lake Storage Gen1 como armazenamento adicional, use o caminho totalmente qualificado para os arquivos. Por exemplo:

adl://mydatalakestore.azuredatalakestore.net/<file_path>

Agora não há cluster_root_path na URL. Isso é porque Data Lake Storage não é um armazenamento padrão nesse caso. Assim, tudo o que você precisa fazer é fornecer o caminho para os arquivos.

Para poder usar um Data Lake Storage Gen1 como armazenamento adicional, só é necessário conceder acesso da entidade de serviço aos caminhos onde os arquivos estão armazenados. Por exemplo:

adl://mydatalakestore.azuredatalakestore.net/<file_path>

Para saber mais sobre como criar a entidade de serviço e conceder acesso, confira Configurar acesso ao Data Lake Storage.

Usar mais de uma conta do Data Lake Storage Gen1

É possível adicionar uma Data Lake Storage como adicional e adicionar mais de uma conta do Data Lake Storage. Conceda ao cluster HDInsight permissão sobre dados em uma ou mais contas do Data Lake Storage. Confira Configurar o acesso ao Data Lake Storage Gen1.

Configurar o acesso ao Data Lake armazenamento Gen1

Para configurar o acesso do Azure Data Lake Storage Gen1 do cluster do HDInsight, você deve ter uma entidade de serviço do Microsoft Entra. Somente um administrador do Microsoft Entra pode criar uma entidade de serviço. A entidade de serviço deve ser criada com um certificado. Para obter mais informações, consulte Início rápido: configurar clusters no HDInsight, e Criar entidade de serviço com certificado autoassinado.

Observação

Se você pretende usar o Azure Data Lake Storage Gen1 como armazenamento adicional para o cluster HDInsight, é altamente recomendável que faça isso ao criar o cluster, conforme descrito neste artigo. Não há suporte à adição do Azure Data Lake Storage Gen1 como armazenamento adicional a um cluster HDInsight.

Para obter mais informações sobre o modelo de controle de acesso, consulte Controle de acesso no Azure Data Lake Storage Gen1.

Acessar arquivos do cluster

Há várias maneiras de acessar os arquivos no Data Lake Storage em um cluster HDInsight.

  • Usando o nome totalmente qualificado. Com essa abordagem, é necessário fornecer o caminho completo para o arquivo que você deseja acessar.

    adl://<data_lake_account>.azuredatalakestore.net/<cluster_root_path>/<file_path>
    
  • Usando o formato de caminho encurtado. Com essa abordagem, você substitui o caminho até a raiz do cluster com:

    adl:///<file path>
    
  • Usando o caminho relativo. Com essa abordagem, você só fornece o caminho relativo para o arquivo que deseja acessar.

    /<file.path>/
    

Exemplos de acesso a dados

Os exemplos são baseados em uma conexão SSH ao nó principal do cluster. Os exemplos usam todos os três esquemas de URI. Substitua DATALAKEACCOUNT e CLUSTERNAME pelos valores relevantes.

Alguns comandos do HDFS

  1. Criar um arquivo no armazenamento local.

    touch testFile.txt
    
  2. Criar diretórios no armazenamento de cluster.

    hdfs dfs -mkdir adl://DATALAKEACCOUNT.azuredatalakestore.net/clusters/CLUSTERNAME/sampledata1/
    hdfs dfs -mkdir adl:///sampledata2/
    hdfs dfs -mkdir /sampledata3/
    
  3. Copiar dados do armazenamento local para o armazenamento de cluster.

    hdfs dfs -copyFromLocal testFile.txt adl://DATALAKEACCOUNT.azuredatalakestore.net/clusters/CLUSTERNAME/sampledata1/
    hdfs dfs -copyFromLocal testFile.txt adl:///sampledata2/
    hdfs dfs -copyFromLocal testFile.txt /sampledata3/
    
  4. Listar o conteúdo do diretório no armazenamento de cluster.

    hdfs dfs -ls adl://DATALAKEACCOUNT.azuredatalakestore.net/clusters/CLUSTERNAME/sampledata1/
    hdfs dfs -ls adl:///sampledata2/
    hdfs dfs -ls /sampledata3/
    

Como criar uma tabela Hive

Três locais de arquivo são mostrados para fins ilustrativos. Para a execução real, use apenas uma das entradas LOCATION.

DROP TABLE myTable;
CREATE EXTERNAL TABLE myTable (
    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://DATALAKEACCOUNT.azuredatalakestore.net/clusters/CLUSTERNAME/example/data/';
LOCATION 'adl:///example/data/';
LOCATION '/example/data/';

Identificar o caminho de armazenamento do Ambari

Para identificar o caminho completo para o armazenamento padrão configurado, navegue até do HDFS>Configurações e insira fs.defaultFS na caixa de entrada do filtro.

Criar clusters HDInsight com acesso ao Data Lake Storage Gen1

Use os links a seguir para obter instruções detalhadas sobre como criar clusters HDInsight com acesso ao Data Lake Storage Gen1.

Atualizar o certificado do HDInsight para acesso do Data Lake Storage Gen1

O código de exemplo do PowerShell a seguir lê um certificado de um arquivo local ou do Azure Key Vault e atualiza seu cluster HDInsight com o novo certificado para acessar o Azure Data Lake Storage Gen1. Forneça seu próprio nome do cluster HDInsight, nome do grupo de recursos, ID da assinatura, app ID, caminho local para o certificado. Digite a senha quando solicitado.

$clusterName = '<clustername>'
$resourceGroupName = '<resourcegroupname>'
$subscriptionId = '01234567-8a6c-43bc-83d3-6b318c6c7305'
$appId = '01234567-e100-4118-8ba6-c25834f4e938'
$addNewCertKeyCredential = $true
$certFilePath = 'C:\localfolder\adls.pfx'
$KeyVaultName = "my-key-vault-name"
$KeyVaultSecretName = "my-key-vault-secret-name"
$certPassword = Read-Host "Enter Certificate Password"
# certSource
# 0 - create self signed cert
# 1 - read cert from file path
# 2 - read cert from key vault
$certSource = 0

Login-AzAccount
Select-AzSubscription -SubscriptionId $subscriptionId

if($certSource -eq 0)
{
    Write-Host "Generating new SelfSigned certificate"

    $cert = New-SelfSignedCertificate -CertStoreLocation "cert:\CurrentUser\My" -Subject "CN=hdinsightAdlsCert" -KeySpec KeyExchange
    $certBytes = $cert.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, $certPassword);
    $certString = [System.Convert]::ToBase64String($certBytes)
}
elseif($certSource -eq 1)
{

    Write-Host "Reading the cert file from path $certFilePath"

    $cert = new-object System.Security.Cryptography.X509Certificates.X509Certificate2($certFilePath, $certPassword)
    $certString = [System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes($certFilePath))
}
elseif($certSource -eq 2)
{

    Write-Host "Reading the cert file from Azure Key Vault $KeyVaultName"

    $cert = (Get-AzureKeyVaultSecret -VaultName $KeyVaultName -Name $KeyVaultSecretName)
    $certValue = [System.Convert]::FromBase64String($cert.SecretValueText)
    $certObject = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 -ArgumentList $certValue, $null,"Exportable, PersistKeySet"

    $certBytes = $certObject.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, $certPassword.SecretValueText);

    $certString =[System.Convert]::ToBase64String($certBytes)
}

if($addNewCertKeyCredential)
{
    Write-Host "Creating new KeyCredential for the app"
    $keyValue = [System.Convert]::ToBase64String($cert.GetRawCertData())
    New-AzADAppCredential -ApplicationId $appId -CertValue $keyValue -EndDate $cert.NotAfter -StartDate $cert.NotBefore
    Write-Host "Waiting for 7 minutes for the permissions to get propagated"
    Start-Sleep -s 420 #7 minutes
}

Write-Host "Updating the certificate on HDInsight cluster..."

Invoke-AzResourceAction `
    -ResourceGroupName $resourceGroupName `
    -ResourceType 'Microsoft.HDInsight/clusters' `
    -ResourceName $clusterName `
    -ApiVersion '2015-03-01-preview' `
    -Action 'updateclusteridentitycertificate' `
    -Parameters @{ ApplicationId = $appId; Certificate = $certString; CertificatePassword = $certPassword.ToString() } `
    -Force

Próximas etapas

Neste artigo, você aprendeu a usar o Azure Data Lake Storage Gen1 compatível com HDFS com o HDInsight. Este armazenamento permite compilar soluções de aquisição de dados de arquivamento adaptáveis e de longo prazo. E usar o HDInsight para desbloquear as informações dentro dos dados estruturados e dados não estruturados.

Para obter mais informações, consulte: