Usar o Data Lake Storage Gen1 com clusters do Azure HDInsight

Nota

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

Para analisar dados no cluster HDInsight, você pode armazená-los no Azure Data Lake Storage Gen1 ou no Azure Blob storageAzure Data Lake Storage Gen2. Todas as opções de armazenamento permitem excluir com segurança clusters HDInsight usados para computação sem perder dados do usuário.

Neste artigo, você aprenderá como o Data Lake Storage Gen1 funciona com clusters HDInsight. Para saber como o armazenamento de Blob do Azure funciona com clusters HDInsight, consulte Usar o armazenamento de Blob do Azure com clusters do Azure HDInsight. Para obter mais informações sobre como criar um cluster HDInsight, consulte Criar clusters Apache Hadoop no HDInsight.

Nota

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

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.

Disponibilidade para clusters HDInsight

O Apache Hadoop suporta uma noção do sistema de arquivos padrão. O sistema de ficheiros predefinido implica um esquema e uma autoridade predefinidos. Também pode ser utilizado para resolver caminhos relativos. Durante o processo de criação do cluster HDInsight, especifique um contêiner de blob no Armazenamento do Azure como o sistema de arquivos padrão. Ou com o HDInsight 3.5 e versões mais recentes, você pode selecionar o armazenamento de Blob 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 do Storage têm de estar alojados na mesma região.

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

  • Como armazenamento predefinido
  • Como armazenamento adicional, com o armazenamento de Blob do Azure como armazenamento padrão.

Atualmente, apenas alguns dos tipos/versões de cluster HDInsight suportam o uso do Data Lake Storage Gen1 como armazenamento padrão e contas de armazenamento adicionais:

Tipo de cluster do HDInsight Data Lake Storage Gen1 como armazenamento padrão Data Lake Storage Gen1 como armazenamento adicional Notas
HDInsight versão 4.0 No Não O ADLS Gen1 não é compatível com o 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 No Não
HDInsight versão 3.2 Não Sim

Aviso

O HDInsight HBase não é suportado 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 , onde <cluster_root_path> é o nome de uma pasta criada no adl://mydatalakestore/<cluster_root_path>/Armazenamento Data Lake. Ao especificar um caminho raiz para cada cluster, você pode usar a mesma conta de armazenamento Data Lake para mais de um cluster. Por isso, pode 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 ambos os clusters usam a mesma conta do Data Lake Storage Gen1 mydatalakestore. Cada cluster tem acesso ao seu próprio sistema de arquivos raiz no Armazenamento Data Lake. 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, você deve conceder à entidade de serviço acesso aos seguintes caminhos:

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

Para obter mais informações sobre como criar a entidade de serviço e conceder acesso, consulte Configurar o acesso ao Armazenamento Data Lake.

Extraindo um certificado do Azure Keyvault para uso na criação de cluster

Se o certificado da entidade de serviço estiver armazenado no Cofre de Chaves do Azure, você deverá convertê-lo para o formato correto. Os trechos de código a seguir mostram como fazer a conversão.

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

$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)

Em seguida, você pode usar o $identityCertificate para implantar um novo cluster como no seguinte trecho:

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

Você também pode usar o Data Lake Storage Gen1 como armazenamento adicional para o cluster. Nesses casos, o armazenamento padrão do cluster pode ser um armazenamento de Blob do Azure ou uma conta do Azure Data Lake Storage Gen1. Ao executar trabalhos do HDInsight nos dados armazenados no Azure Data Lake Storage Gen1 como armazenamento adicional, use o caminho totalmente qualificado. Por exemplo:

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

Não há nenhuma cluster_root_path no URL agora. Isso porque o Armazenamento Data Lake não é um armazenamento padrão nesse caso. Então, tudo o que você precisa fazer é fornecer o caminho para os arquivos.

Para usar um Data Lake Storage Gen1 como armazenamento adicional, conceda à entidade de serviço acesso aos caminhos onde seus arquivos são armazenados. Por exemplo:

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

Para obter mais informações sobre como criar a entidade de serviço e conceder acesso, consulte Configurar o acesso ao Armazenamento Data Lake.

Usar mais de uma conta do Data Lake Storage Gen1

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

Configurar o acesso ao Data Lake Storage Gen1

Para configurar o acesso ao Azure Data Lake Storage Gen1 a partir do cluster HDInsight, tem de ter uma entidade de serviço Microsoft Entra. Apenas um administrador do Microsoft Entra pode criar uma entidade de serviço. O principal de serviço tem de ser criado com um certificado. Para obter mais informações, veja Início Rápido: Configurar clusters no HDInsight e Criar um principal de serviço com certificado autoassinado.

Nota

Se você for usar o Azure Data Lake Storage Gen1 como armazenamento adicional para cluster HDInsight, é altamente recomendável fazer isso enquanto cria o cluster, conforme descrito neste artigo. Adicionar o Azure Data Lake Storage Gen1 como armazenamento adicional a um cluster HDInsight existente não é um cenário suportado.

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

Aceder a ficheiros a partir do cluster

Há várias maneiras de acessar os arquivos no Armazenamento Data Lake a partir de um cluster HDInsight.

  • Utilizar o nome completamente qualificado. Com esta abordagem, fornece o caminho completo para o ficheiro ao qual pretende aceder.

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

    adl:///<file path>
    
  • Utilizar o caminho relativo. Com esta abordagem, fornece apenas o caminho relativo para o ficheiro ao qual pretende aceder.

    /<file.path>/
    

Exemplos de acesso a dados

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

Alguns comandos hdfs

  1. Crie um arquivo no armazenamento local.

    touch testFile.txt
    
  2. Crie 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. Copie dados do armazenamento local para o armazenamento em 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/
    

Criando uma tabela do Hive

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

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é Configurações do HDFS>e insira fs.defaultFS na caixa de entrada do filtro.

Crie 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 ao Data Lake Storage Gen1

O código PowerShell de exemplo 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 de cluster HDInsight, nome do grupo de recursos, ID da assinatura, app IDcaminho 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óximos passos

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

Para obter mais informações, consulte: