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 | Sì | Sì | Except HBase |
HDInsight versione 3.5 | Sì | Sì | Except HBase |
HDInsight versione 3.4 | No | Sì | |
HDInsight versione 3.3 | No | No | |
HDInsight versione 3.2 | No | Sì |
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
Creare un file nell'archiviazione locale.
touch testFile.txt
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/
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/
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.
- Uso del portale
- Uso di PowerShell con Data Lake Storage Gen1 come risorsa di archiviazione predefinita
- Uso di PowerShell con Data Lake Storage Gen1 come risorsa di archiviazione aggiuntiva
- Uso di modelli di Azure
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 ID
il 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: