Usare Data Lake Storage Gen1 con i cluster Azure HDInsight

Nota

Distribuire i nuovi cluster HDInsight usando Azure Data Lake Storage Gen2 per ottenere prestazioni migliori e nuove funzionalità.

Per analizzare i dati nel cluster HDInsight, è possibile archiviare i dati in Azure Blob storage, Azure Data Lake Archiviazione Gen1 o Azure Data Lake Archiviazione Gen2. Tutte le opzioni di archiviazione consentono l'eliminazione sicura dei cluster HDInsight utilizzati per i calcoli, senza perdita di dati utente.

Questo articolo illustra come funziona Data Lake Storage Gen1 con i cluster HDInsight. Per informazioni sul funzionamento dell'archiviazione BLOB di Azure con i cluster HDInsight, vedere Usare l'archiviazione BLOB di Azure con i cluster Azure HDInsight. Per altre informazioni sulla creazione di un cluster HDInsight, vedere Configurare i cluster di HDInsight con Hadoop, Spark, Kafka e altro ancora.

Nota

L'accesso a Data Lake Storage Gen1 avviene sempre tramite un canale sicuro e quindi non è presente un nome di schema del file system adls. Viene usato sempre adl.

Nota

È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

Disponibilità per i cluster HDInsight

Apache Hadoop supporta una nozione del file system predefinito. Il file system predefinito implica uno schema e un'autorità predefiniti e può essere usato anche per risolvere percorsi relativi. Durante il processo di creazione del cluster HDInsight, specificare un contenitore BLOB in Archiviazione di Azure come file system predefinito. In alternativa, con HDInsight 3.5 e versioni più recenti, è possibile selezionare Archiviazione BLOB di Azure o Azure Data Lake Archiviazione Gen1 come sistema di file predefinito con alcune eccezioni. L'account di archiviazione deve trovarsi nella stessa area del cluster.

I cluster HDInsight possono usare Data Lake Archiviazione Gen1 in 2 modi:

  • Come risorsa di archiviazione predefinita
  • Come risorsa di archiviazione aggiuntiva, con Archiviazione BLOB di Azure come risorsa di archiviazione predefinita.

Attualmente, solo alcuni dei tipi/versioni di cluster HDInsight supportano l'uso di Data Lake Archiviazione Gen1 come risorsa di archiviazione predefinita e account di archiviazione aggiuntivi:

Tipo di cluster HDInsight Data Lake Storage Gen1 come risorsa di archiviazione predefinita Data Lake Storage Gen1 come risorsa di archiviazione aggiuntiva Note
HDInsight versione 4.0 No No ADLS Gen1 non è supportato con HDInsight 4.0
HDInsight versione 3.6 Except HBase
HDInsight versione 3.5 Except HBase
HDInsight versione 3.4 No
HDInsight versione 3.3 No No
HDInsight versione 3.2 No

Avviso

HDInsight HBase non è supportato con Azure Data Lake Storage Gen1

L'uso di Data Lake Archiviazione Gen1 come account di archiviazione aggiuntivo non influisce sulle prestazioni. In alternativa, è possibile leggere o scrivere nell'archivio BLOB di Azure dal cluster.

Usare Data Lake Storage Gen1 come risorsa di archiviazione predefinita

Quando si distribuisce HDInsight con Data Lake Storage Gen1 come risorsa di archiviazione predefinita, i file correlati al cluster vengono archiviati in adl://mydatalakestore/<cluster_root_path>/, dove <cluster_root_path> è il nome di una cartella creata in Data Lake Storage. Specificando un percorso radice per ogni cluster, è possibile usare lo stesso account Data Lake Storage per più di un cluster. Pertanto, è possibile disporre di una configurazione in cui:

  • Il cluster 1 può usare il percorso adl://mydatalakestore/cluster1storage
  • Il cluster 2 può usare il percorso adl://mydatalakestore/cluster2storage

Si noti che entrambi i cluster usano lo stesso account di Data Lake Storage Gen1, mydatalakestore. Ogni cluster ha accesso al proprio file system radice in Data Lake Storage. L'esperienza di distribuzione portale di Azure richiede di usare un nome di cartella, ad esempio /clusters/<clustername> per il percorso radice.

Per usare Data Lake Archiviazione Gen1 come risorsa di archiviazione predefinita, è necessario concedere all'entità servizio l'accesso ai percorsi seguenti:

  • Radice dell'account Data Lake Storage Gen1. ad esempio adl://mydatalakestore/.
  • Cartella per tutte le cartelle del cluster, ad esempio adl://mydatalakestore/clusters.
  • Cartella per il cluster, ad esempio adl://mydatalakestore/clusters/cluster1storage.

Per altre informazioni su come creare un'entità servizio e concedere l'accesso, consultare la sezione Configurare l'accesso a Data Lake Storage.

Estrazione di un certificato da Azure Key Vault per l'uso nella creazione di cluster

Se il certificato per l'entità servizio viene archiviato in Azure Key Vault, è necessario convertire il certificato nel formato corretto. I frammenti di codice seguenti illustrano come eseguire la conversione.

Prima di tutto, scaricare il certificato da Key Vault ed estrarre il SecretValueText.

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

Convertire quindi il SecretValueText in un certificato.

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

È quindi possibile usare il $identityCertificate per distribuire un nuovo cluster, come illustrato nel frammento di codice seguente:

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

Usare Data Lake Storage Gen1 come risorsa di archiviazione aggiuntiva

È possibile usare Data Lake Storage Gen1 anche come risorsa di archiviazione aggiuntiva per il cluster. In questi casi, l'archiviazione predefinita del cluster può essere un archivio BLOB di Azure o un account Azure Data Lake Archiviazione Gen1. Quando si eseguono processi HDInsight sui dati archiviati in Azure Data Lake Archiviazione Gen1 come risorsa di archiviazione aggiuntiva, usare il percorso completo. Ad esempio:

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

Non c'è cluster_root_path nell'URL. Questo perché Data Lake Archiviazione non è una risorsa di archiviazione predefinita in questo caso. Quindi tutto quello che devi fare è fornire il percorso dei file.

Per usare un data lake Archiviazione Gen1 come risorsa di archiviazione aggiuntiva, concedere all'entità servizio l'accesso ai percorsi in cui sono archiviati i file. Ad esempio:

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

Per altre informazioni su come creare un'entità servizio e concedere l'accesso, consultare la sezione Configurare l'accesso a Data Lake Storage.

Usare più di un account Data Lake Archiviazione Gen1

È possibile aggiungere un account di Archiviazione Data Lake come aggiuntivo e aggiungere più account data lake Archiviazione. Concedere al cluster HDInsight l'autorizzazione per i dati in uno o più account di Archiviazione Data Lake. Vedere Configurare l'accesso a Data Lake Storage Gen1.

Configurare l'accesso a Data Lake Storage Gen1

Per configurare l'accesso di Azure Data Lake Archiviazione Gen1 dal cluster HDInsight, è necessario disporre di un'entità servizio Microsoft Entra. Solo un amministratore di Microsoft Entra può creare un'entità servizio. L'entità servizio deve essere creata con un certificato. Per altre informazioni, vedi Avvio rapido: impostazione dei cluster in HDInsight e Creare un'entità servizio con certificato autofirmato.

Nota

Se si prevede di usare Azure Data Lake Storage Gen1 come risorsa di archiviazione aggiuntiva per il cluster HDInsight, è consigliabile aggiungere questa risorsa durante la creazione del cluster, come descritto in questo articolo. L'aggiunta di Azure Data Lake Storage Gen1 come risorsa di archiviazione aggiuntiva a un cluster HDInsight esistente non è supportata.

Per altre informazioni sul modello di controllo di accesso, vedere Controllo di accesso in Azure Data Lake Archiviazione Gen1.

Accedere ai file dal cluster

Esistono diversi modi per accedere ai file in Data Lake Storage da un cluster HDInsight.

  • Uso di nomi completi. Con questo approccio viene fornito il percorso completo al file a cui si desidera accedere.

    adl://<data_lake_account>.azuredatalakestore.net/<cluster_root_path>/<file_path>
    
  • Uso del formato con percorso abbreviato. Con questo approccio si sostituisce il percorso fino alla radice del cluster con:

    adl:///<file path>
    
  • Uso del percorso relativo. Con questo approccio viene fornito unicamente il percorso relativo al file a cui si desidera accedere.

    /<file.path>/
    

Esempi di accesso ai dati

Gli esempi sono basati su una connessione SSH al nodo head del cluster. Negli esempi vengono usati tutti e tre gli schemi URI. Sostituire DATALAKEACCOUNT e CLUSTERNAME con i valori pertinenti.

Alcuni comandi HDFS

  1. Creare un file nell'archiviazione locale.

    touch testFile.txt
    
  2. Creare directory nell'archiviazione del cluster.

    hdfs dfs -mkdir adl://DATALAKEACCOUNT.azuredatalakestore.net/clusters/CLUSTERNAME/sampledata1/
    hdfs dfs -mkdir adl:///sampledata2/
    hdfs dfs -mkdir /sampledata3/
    
  3. Copiare i dati dall'archiviazione locale all'archiviazione del 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. Elencare il contenuto della directory nell'archiviazione del cluster.

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

Creazione di una tabella Hive

Per scopi illustrativi, vengono visualizzati tre percorsi di file. Per l'esecuzione effettiva, usare solo una delle voci 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/';

Identificare il percorso di archiviazione da Ambari

Per identificare il percorso completo dell'archivio predefinito configurato, passare a Configurazioni HDFS>e immettere fs.defaultFS nella casella di input del filtro.

Creare cluster HDInsight con accesso a Data Lake Storage Gen1

Usare i collegamenti seguenti per informazioni dettagliate su come creare cluster HDInsight con accesso a Data Lake Storage Gen1.

Aggiornare il certificato di HDInsight per l'accesso a Data Lake Storage Gen1

Il codice di PowerShell di esempio seguente legge un certificato da un file locale o da Azure Key Vault e aggiorna il cluster HDInsight con il nuovo certificato per accedere ad Azure Data Lake Storage Gen1. Specificare il nome del cluster HDInsight, il nome del gruppo di risorse, l'ID sottoscrizione, app IDil percorso locale del certificato. Scrivere la password quando richiesto.

$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

Passaggi successivi

In questo articolo si è appreso come usare Azure Data Lake Storage Gen1, compatibile con Hadoop Distributed File System (HDFS), con HDInsight. Questa risorsa di archiviazione consente di creare soluzioni di acquisizione dei dati adattabili, a lungo termine e di archiviazione. Usare HDInsight per sbloccare le informazioni all'interno dei dati strutturati e non strutturati archiviati.

Per altre informazioni, vedere: