Używanie usługi Data Lake Storage Gen1 z klastrami usługi Azure HDInsight

Uwaga

Wdróż nowe klastry usługi HDInsight przy użyciu usługi Azure Data Lake Storage Gen2 , aby uzyskać lepszą wydajność i nowe funkcje.

Aby analizować dane w klastrze usługi HDInsight, możesz przechowywać dane w usłudze Azure Data Lake Storage Gen1 lub Azure Data Lake Storage Gen2.Azure Blob storage Wszystkie opcje magazynu umożliwiają bezpieczne usuwanie klastrów usługi HDInsight używanych do obliczeń bez utraty danych użytkownika.

Z tego artykułu dowiesz się, jak usługa Data Lake Storage Gen1 współpracuje z klastrami usługi HDInsight. Aby dowiedzieć się, jak usługa Azure Blob Storage współpracuje z klastrami usługi HDInsight, zobacz Używanie usługi Azure Blob Storage z klastrami usługi Azure HDInsight. Aby uzyskać więcej informacji na temat tworzenia klastra usługi HDInsight, zobacz Tworzenie klastrów Apache Hadoop w usłudze HDInsight.

Uwaga

Dostęp do usługi Data Lake Storage Gen1 jest zawsze uzyskiwany za pośrednictwem bezpiecznego kanału, więc nie adls ma nazwy schematu systemu plików. Zawsze używaj nazwy adl.

Uwaga

Do interakcji z platformą Azure zalecamy używanie modułu Azure Az w programie PowerShell. Zobacz Instalowanie programu Azure PowerShell, aby rozpocząć. Aby dowiedzieć się, jak przeprowadzić migrację do modułu Az PowerShell, zobacz Migracja programu Azure PowerShell z modułu AzureRM do modułu Az.

Dostępność klastrów usługi HDInsight

Platforma Apache Hadoop obsługuje pojęcie domyślnego systemu plików. Domyślny system plików wyznacza domyślny schemat i element authority. Może również służyć do rozpoznawania ścieżek względnych. Podczas procesu tworzenia klastra usługi HDInsight określ kontener obiektów blob w usłudze Azure Storage jako domyślny system plików. W przypadku usługi HDInsight 3.5 i nowszych wersji możesz wybrać usługę Azure Blob Storage lub Azure Data Lake Storage Gen1 jako domyślny system plików z kilkoma wyjątkami. Klaster i konto magazynu muszą być hostowane w tym samym regionie.

Klastry usługi HDInsight mogą używać usługi Data Lake Storage Gen1 na 2 sposoby:

  • Jako magazyn domyślny
  • Jako dodatkowy magazyn z usługą Azure Blob Storage jako magazynem domyślnym.

Obecnie tylko niektóre typy/wersje klastra usługi HDInsight obsługują używanie usługi Data Lake Storage Gen1 jako domyślnego magazynu i dodatkowych kont magazynu:

Typ klastra usługi HDInsight Magazyn usługi Data Lake Storage Gen1 jako magazyn domyślny Data Lake Storage Gen1 jako dodatkowy magazyn Uwagi
HDInsight w wersji 4.0 Nie Nie. Usługa ADLS Gen1 nie jest obsługiwana w usłudze HDInsight 4.0
HDInsight w wersji 3.6 Tak Tak Z wyjątkiem bazy danych HBase
HDInsight w wersji 3.5 Tak Tak Z wyjątkiem bazy danych HBase
HDInsight w wersji 3.4 Nie. Tak
HDInsight w wersji 3.3 Nie Nie.
HDInsight w wersji 3.2 Nie. Tak

Ostrzeżenie

Baza danych HBase usługi HDInsight nie jest obsługiwana w usłudze Azure Data Lake Storage Gen1

Użycie usługi Data Lake Storage Gen1 jako dodatkowego konta magazynu nie wpływa na wydajność. Lub możliwość odczytu lub zapisu w usłudze Azure Blob Storage z klastra.

Używanie usługi Data Lake Storage Gen1 jako magazynu domyślnego

Gdy usługa HDInsight jest wdrażana w usłudze Data Lake Storage Gen1 jako magazyn domyślny, pliki związane z klastrem są przechowywane w adl://mydatalakestore/<cluster_root_path>/lokalizacji , gdzie <cluster_root_path> jest nazwą folderu utworzonego w usłudze Data Lake Storage. Określając ścieżkę główną dla każdego klastra, można użyć tego samego konta usługi Data Lake Storage dla więcej niż jednego klastra. Dlatego jest możliwa następująca konfiguracja:

  • Klaster 1 może używać ścieżki adl://mydatalakestore/cluster1storage
  • Klaster 2 może używać ścieżki adl://mydatalakestore/cluster2storage

Zwróć uwagę, że oba klastry używają tego samego konta usługi Data Lake Storage Gen1 mydatalakestore. Każdy klaster ma dostęp do własnego głównego systemu plików w usłudze Data Lake Storage. Środowisko wdrażania witryny Azure Portal wyświetla monit o użycie nazwy folderu, takiego jak /clusters/<clustername> dla ścieżki głównej.

Aby użyć usługi Data Lake Storage Gen1 jako magazynu domyślnego, należy udzielić jednostce usługi dostępu do następujących ścieżek:

  • Katalog główny konta usługi Data Lake Storage Gen1. na przykład: adl://mydatalakestore/.
  • Folder zawierający wszystkie foldery klastra, na przykład: adl://mydatalakestore/clusters.
  • Folder klastra, na przykład: adl://mydatalakestore/clusters/cluster1storage.

Aby uzyskać więcej informacji na temat tworzenia jednostki usługi i udzielania dostępu, zobacz Konfigurowanie dostępu do usługi Data Lake Storage.

Wyodrębnianie certyfikatu z usługi Azure Keyvault do użycia podczas tworzenia klastra

Jeśli certyfikat jednostki usługi jest przechowywany w usłudze Azure Key Vault, należy przekonwertować certyfikat na poprawny format. Poniższe fragmenty kodu pokazują, jak przeprowadzić konwersję.

Najpierw pobierz certyfikat z usługi Key Vault i wyodrębnij element SecretValueText.

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

Następnie przekonwertuj element SecretValueText na certyfikat.

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

Następnie możesz użyć polecenia $identityCertificate , aby wdrożyć nowy klaster, tak jak w poniższym fragmencie kodu:

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

Używanie usługi Data Lake Storage Gen1 jako dodatkowego magazynu

Możesz również użyć usługi Data Lake Storage Gen1 jako dodatkowego magazynu dla klastra. W takich przypadkach domyślnym magazynem klastra może być usługa Azure Blob Storage lub konto usługi Azure Data Lake Storage Gen1. W przypadku uruchamiania zadań usługi HDInsight względem danych przechowywanych w usłudze Azure Data Lake Storage Gen1 jako dodatkowego magazynu użyj w pełni kwalifikowanej ścieżki. Na przykład:

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

Nie ma teraz cluster_root_path w adresie URL. Dzieje się tak, ponieważ usługa Data Lake Storage nie jest magazynem domyślnym w tym przypadku. Dlatego wystarczy podać ścieżkę do plików.

Aby użyć usługi Data Lake Storage Gen1 jako dodatkowego magazynu, przyznaj jednostce usługi dostęp do ścieżek, w których są przechowywane pliki. Na przykład:

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

Aby uzyskać więcej informacji na temat tworzenia jednostki usługi i udzielania dostępu, zobacz Konfigurowanie dostępu do usługi Data Lake Storage.

Użyj więcej niż jednego konta usługi Data Lake Storage Gen1

Dodanie konta usługi Data Lake Storage jako dodatkowego i dodanie więcej niż jednego konta usługi Data Lake Storage można wykonać. Nadaj klastrowi usługi HDInsight uprawnienie do danych na co najmniej jednym koncie usługi Data Lake Storage. Zobacz Konfigurowanie dostępu usługi Data Lake Storage Gen1.

Konfigurowanie dostępu do usługi Data Lake Storage Gen1

Aby skonfigurować dostęp usługi Azure Data Lake Storage Gen1 z klastra usługi HDInsight, musisz mieć jednostkę usługi Microsoft Entra. Tylko administrator firmy Microsoft Entra może utworzyć jednostkę usługi. Jednostkę usługi należy utworzyć przy użyciu certyfikatu. Aby uzyskać więcej informacji, zobacz Szybki start: konfigurowanie klastrów w usłudze HDInsight i Tworzenie jednostki usługi przy użyciu certyfikatu z podpisem własnym.

Uwaga

Jeśli zamierzasz użyć usługi Azure Data Lake Storage Gen1 jako dodatkowego magazynu dla klastra usługi HDInsight, zdecydowanie zalecamy wykonanie tej czynności podczas tworzenia klastra zgodnie z opisem w tym artykule. Dodanie usługi Azure Data Lake Storage Gen1 jako dodatkowego magazynu do istniejącego klastra usługi HDInsight nie jest obsługiwanym scenariuszem.

Aby uzyskać więcej informacji na temat modelu kontroli dostępu, zobacz Kontrola dostępu w usłudze Azure Data Lake Storage Gen1.

Dostęp do plików z klastra

Istnieje kilka sposobów uzyskiwania dostępu do plików w usłudze Data Lake Storage z klastra usługi HDInsight.

  • Przy użyciu w pełni kwalifikowanej nazwy. W przypadku tej metody należy podać pełną ścieżkę do pliku, do którego chcesz uzyskać dostęp.

    adl://<data_lake_account>.azuredatalakestore.net/<cluster_root_path>/<file_path>
    
  • Przy użyciu skróconego formatu ścieżki. Dzięki temu podejściu należy zastąpić ścieżkę do katalogu głównego klastra następującymi elementami:

    adl:///<file path>
    
  • Przy użyciu ścieżki względnej. W przypadku tej metody należy podać tylko względną ścieżkę do pliku, do którego chcesz uzyskać dostęp.

    /<file.path>/
    

Przykłady dostępu do danych

Przykłady są oparte na połączeniu SSH z węzłem głównym klastra. W przykładach są używane wszystkie trzy schematy identyfikatorów URI. Zastąp DATALAKEACCOUNT wartości i CLUSTERNAME odpowiednimi wartościami.

Kilka poleceń hdfs

  1. Utwórz plik w magazynie lokalnym.

    touch testFile.txt
    
  2. Tworzenie katalogów w magazynie klastra.

    hdfs dfs -mkdir adl://DATALAKEACCOUNT.azuredatalakestore.net/clusters/CLUSTERNAME/sampledata1/
    hdfs dfs -mkdir adl:///sampledata2/
    hdfs dfs -mkdir /sampledata3/
    
  3. Kopiowanie danych z magazynu lokalnego do magazynu klastra.

    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. Wyświetlanie listy zawartości katalogu w magazynie klastra.

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

Tworzenie tabeli programu Hive

Trzy lokalizacje plików są wyświetlane w celach ilustracyjnych. W przypadku rzeczywistego wykonania użyj tylko jednego z LOCATION wpisów.

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/';

Identyfikowanie ścieżki magazynu z systemu Ambari

Aby zidentyfikować pełną ścieżkę do skonfigurowanego magazynu domyślnego, przejdź do pozycji Konfiguracje systemu plików HDFS>i wprowadź fs.defaultFS wartość w polu wejściowym filtru.

Tworzenie klastrów usługi HDInsight z dostępem do usługi Data Lake Storage Gen1

Skorzystaj z poniższych linków, aby uzyskać szczegółowe instrukcje dotyczące tworzenia klastrów usługi HDInsight z dostępem do usługi Data Lake Storage Gen1.

Odświeżanie certyfikatu usługi HDInsight na potrzeby dostępu usługi Data Lake Storage Gen1

Poniższy przykładowy kod programu PowerShell odczytuje certyfikat z pliku lokalnego lub usługi Azure Key Vault i aktualizuje klaster usługi HDInsight przy użyciu nowego certyfikatu w celu uzyskania dostępu do usługi Azure Data Lake Storage Gen1. Podaj własną nazwę klastra usługi HDInsight, nazwę grupy zasobów, identyfikator subskrypcji, app IDścieżkę lokalną do certyfikatu. Wpisz hasło po wyświetleniu monitu.

$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

Następne kroki

W tym artykule przedstawiono sposób używania usługi Azure Data Lake Storage Gen1 zgodnej z systemem plików HDFS z usługą HDInsight. Ten magazyn umożliwia tworzenie elastycznych, długoterminowych rozwiązań do pozyskiwania danych archiwalnych. Użyj usługi HDInsight, aby odblokować informacje wewnątrz przechowywanych danych ustrukturyzowanych i nieustrukturyzowanych.

Aby uzyskać więcej informacji, zobacz: