Użyj Azure PowerShell, aby utworzyć klaster usługi HDInsight z usługą Azure Data Lake Storage Gen1 (jako dodatkowy magazyn)

Dowiedz się, jak używać Azure PowerShell do konfigurowania klastra usługi HDInsight przy użyciu usługi Azure Data Lake Storage Gen1 jako dodatkowego magazynu. Aby uzyskać instrukcje dotyczące tworzenia klastra usługi HDInsight z Data Lake Storage Gen1 jako magazynu domyślnego, zobacz Tworzenie klastra usługi HDInsight przy użyciu Data Lake Storage Gen1 jako magazynu domyślnego.

Uwaga

Jeśli zamierzasz użyć 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 Data Lake Storage Gen1 jako dodatkowego magazynu do istniejącego klastra usługi HDInsight jest skomplikowanym procesem i podatnym na błędy.

W przypadku obsługiwanych typów klastrów można użyć Data Lake Storage Gen1 jako domyślnego magazynu lub dodatkowego konta magazynu. Gdy Data Lake Storage Gen1 jest używany jako dodatkowy magazyn, domyślne konto magazynu klastrów będzie nadal przechowywane w usłudze Azure Blob Storage (WASB), a pliki związane z klastrem (takie jak dzienniki itp.) są nadal zapisywane w magazynie domyślnym, podczas gdy dane, które chcesz przetworzyć, mogą być przechowywane w Data Lake Storage Gen1. Użycie Data Lake Storage Gen1 jako dodatkowego konta magazynu nie ma wpływu na wydajność ani możliwość odczytu/zapisu w magazynie z klastra.

Korzystanie z Data Lake Storage Gen1 dla magazynu klastra usługi HDInsight

Poniżej przedstawiono kilka ważnych zagadnień dotyczących korzystania z usługi HDInsight z Data Lake Storage Gen1:

  • Opcja tworzenia klastrów usługi HDInsight z dostępem do Data Lake Storage Gen1, ponieważ jest dostępny dodatkowy magazyn dla usługi HDInsight w wersji 3.2, 3.4, 3.5 i 3.6.

Skonfigurowanie usługi HDInsight do pracy z Data Lake Storage Gen1 przy użyciu programu PowerShell obejmuje następujące kroki:

  • Tworzenie konta usługi Data Lake Storage Gen1
  • Konfigurowanie uwierzytelniania na potrzeby dostępu opartego na rolach do Data Lake Storage Gen1
  • Tworzenie klastra usługi HDInsight z uwierzytelnianiem w celu Data Lake Storage Gen1
  • Uruchamianie zadania testowego w klastrze

Wymagania wstępne

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.

Przed przystąpieniem do wykonania kroków opisanych w tym samouczku należy dysponować następującymi elementami:

  • Subskrypcja platformy Azure. Zobacz temat Uzyskiwanie bezpłatnej wersji próbnej platformy Azure.

  • Program Azure PowerShell 1.0 lub nowszy. Zobacz artykuł Instalowanie i konfigurowanie programu Azure PowerShell.

  • Zestaw WINDOWS SDK. Możesz je zainstalować, klikając tutaj. Służy do tworzenia certyfikatu zabezpieczeń.

  • Microsoft Entra jednostka usługi. Kroki opisane w tym samouczku zawierają instrukcje dotyczące tworzenia jednostki usługi w Tożsamość Microsoft Entra. Musisz jednak być administratorem Microsoft Entra, aby móc utworzyć jednostkę usługi. Jeśli jesteś administratorem Microsoft Entra, możesz pominąć to wymaganie wstępne i przejść do samouczka.

    Jeśli nie jesteś administratorem Microsoft Entra, nie będzie można wykonać kroków wymaganych do utworzenia jednostki usługi. W takim przypadku administrator Microsoft Entra musi najpierw utworzyć jednostkę usługi, zanim będzie można utworzyć klaster usługi HDInsight przy użyciu Data Lake Storage Gen1. Ponadto jednostka usługi musi zostać utworzona przy użyciu certyfikatu, zgodnie z opisem w temacie Tworzenie jednostki usługi z certyfikatem.

Tworzenie konta usługi Data Lake Storage Gen1

Wykonaj następujące kroki, aby utworzyć konto Data Lake Storage Gen1.

  1. Na pulpicie otwórz nowe okno Azure PowerShell i wprowadź następujący fragment kodu. Po wyświetleniu monitu o zalogowanie się upewnij się, że zalogowano się jako jeden z administratorów/właściciela subskrypcji:

    # Log in to your Azure account
    Connect-AzAccount
    
    # List all the subscriptions associated to your account
    Get-AzSubscription
    
    # Select a subscription
    Set-AzContext -SubscriptionId <subscription ID>
    
    # Register for Data Lake Storage Gen1
    Register-AzResourceProvider -ProviderNamespace "Microsoft.DataLakeStore"
    

    Uwaga

    Jeśli podczas rejestrowania dostawcy zasobów Data Lake Storage Gen1 wystąpi błąd podobny do Register-AzResourceProvider : InvalidResourceNamespace: The resource namespace 'Microsoft.DataLakeStore' is invalid tego, możliwe, że subskrypcja nie zostanie zatwierdzona dla Data Lake Storage Gen1. Upewnij się, że subskrypcja platformy Azure dla Data Lake Storage Gen1 jest włączona, postępując zgodnie z tymi instrukcjami.

  2. Konto magazynu z Data Lake Storage Gen1 jest skojarzone z grupą zasobów platformy Azure. Rozpocznij od utworzenia grupy zasobów platformy Azure.

    $resourceGroupName = "<your new resource group name>"
    New-AzResourceGroup -Name $resourceGroupName -Location "East US 2"
    

    Powinny pojawić się następujące dane wyjściowe:

    ResourceGroupName : hdiadlgrp
    Location          : eastus2
    ProvisioningState : Succeeded
    Tags              :
    ResourceId        : /subscriptions/<subscription-id>/resourceGroups/hdiadlgrp
    
  3. Utwórz konto magazynu z Data Lake Storage Gen1. Określona nazwa konta musi zawierać tylko małe litery i cyfry.

    $dataLakeStorageGen1Name = "<your new storage account with Data Lake Storage Gen1 name>"
    New-AzDataLakeStoreAccount -ResourceGroupName $resourceGroupName -Name $dataLakeStorageGen1Name -Location "East US 2"
    

    Powinny pojawić się dane wyjściowe podobne do następujących:

    ...
    ProvisioningState           : Succeeded
    State                       : Active
    CreationTime                : 5/5/2017 10:53:56 PM
    EncryptionState             : Enabled
    ...
    LastModifiedTime            : 5/5/2017 10:53:56 PM
    Endpoint                    : hdiadlstore.azuredatalakestore.net
    DefaultGroup                :
    Id                          : /subscriptions/<subscription-id>/resourceGroups/hdiadlgrp/providers/Microsoft.DataLakeStore/accounts/hdiadlstore
    Name                        : hdiadlstore
    Type                        : Microsoft.DataLakeStore/accounts
    Location                    : East US 2
    Tags                        : {}
    
  4. Przekaż przykładowe dane do Data Lake Storage Gen1. Użyjemy tego w dalszej części tego artykułu, aby sprawdzić, czy dane są dostępne z klastra usługi HDInsight. Jeśli szukasz przykładowych danych do przekazania, możesz pobrać folder Ambulance Data z repozytorium Git usługi Azure Data Lake.

    $myrootdir = "/"
    Import-AzDataLakeStoreItem -AccountName $dataLakeStorageGen1Name -Path "C:\<path to data>\vehicle1_09142014.csv" -Destination $myrootdir\vehicle1_09142014.csv
    

Konfigurowanie uwierzytelniania na potrzeby dostępu opartego na rolach do Data Lake Storage Gen1

Każda subskrypcja platformy Azure jest skojarzona z Tożsamość Microsoft Entra. Użytkownicy i usługi, które uzyskują dostęp do zasobów subskrypcji przy użyciu interfejsu API Azure Portal lub Azure Resource Manager, muszą najpierw uwierzytelniać się przy użyciu tego Tożsamość Microsoft Entra. Dostęp jest przyznawany subskrypcjom i usługom platformy Azure przez przypisanie im odpowiedniej roli w zasobie platformy Azure. W przypadku usług jednostka usługi identyfikuje usługę w Tożsamość Microsoft Entra. W tej sekcji pokazano, jak udzielić usłudze aplikacji, takiej jak HDInsight, dostępu do zasobu platformy Azure (konta magazynu z utworzonym wcześniej Data Lake Storage Gen1), tworząc jednostkę usługi dla aplikacji i przypisując do niego role za pośrednictwem Azure PowerShell.

Aby skonfigurować uwierzytelnianie usługi Active Directory dla Data Lake Storage Gen1, należy wykonać następujące zadania.

  • Tworzenie certyfikatu z podpisem własnym
  • Tworzenie aplikacji w Tożsamość Microsoft Entra i jednostce usługi

Tworzenie certyfikatu z podpisem własnym

Przed kontynuowaniem czynności opisanych w tej sekcji upewnij się, że masz zainstalowany zestaw Windows SDK . Musisz również utworzyć katalog, taki jak C:\mycertdir, w którym zostanie utworzony certyfikat.

  1. W oknie programu PowerShell przejdź do lokalizacji, w której zainstalowano zestaw Windows SDK (zazwyczaj C:\Program Files (x86)\Windows Kits\10\bin\x86 i użyj narzędzia MakeCert , aby utworzyć certyfikat z podpisem własnym i klucz prywatny. Użyj następujących poleceń.

    $certificateFileDir = "<my certificate directory>"
    cd $certificateFileDir
    
    makecert -sv mykey.pvk -n "cn=HDI-ADL-SP" CertFile.cer -r -len 2048
    

    Zostanie wyświetlony monit o wprowadzenie hasła klucza prywatnego. Po pomyślnym wykonaniu polecenia powinien zostać wyświetlony CertFile.cer i mykey.pvk w określonym katalogu certyfikatów.

  2. Użyj narzędzia Pvk2Pfx , aby przekonwertować pliki pvk i .cer utworzone przez aplikację MakeCert do pliku pfx. Uruchom następujące polecenie.

    pvk2pfx -pvk mykey.pvk -spc CertFile.cer -pfx CertFile.pfx -po <password>
    

    Po wyświetleniu monitu wprowadź podane wcześniej hasło klucza prywatnego. Wartość określona dla parametru -po jest hasłem skojarzonym z plikiem pfx. Po pomyślnym zakończeniu polecenia w określonym katalogu certyfikatu powinien zostać również wyświetlony plik CertFile.pfx.

Tworzenie Tożsamość Microsoft Entra i jednostki usługi

W tej sekcji wykonasz kroki tworzenia jednostki usługi dla aplikacji Microsoft Entra, przypisywania roli do jednostki usługi i uwierzytelniania jako jednostki usługi przez podanie certyfikatu. Uruchom następujące polecenia, aby utworzyć aplikację w Tożsamość Microsoft Entra.

  1. Wklej następujące polecenia cmdlet w oknie konsoli programu PowerShell. Upewnij się, że wartość określona dla właściwości -DisplayName jest unikatowa. Ponadto wartości -HomePage i -IdentiferUris są wartościami zastępczymi i nie są weryfikowane.

    $certificateFilePath = "$certificateFileDir\CertFile.pfx"
    
    $password = Read-Host -Prompt "Enter the password" # This is the password you specified for the .pfx file
    
    $certificatePFX = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($certificateFilePath, $password)
    
    $rawCertificateData = $certificatePFX.GetRawCertData()
    
    $credential = [System.Convert]::ToBase64String($rawCertificateData)
    
    $application = New-AzADApplication `
        -DisplayName "HDIADL" `
        -HomePage "https://contoso.com" `
        -IdentifierUris "https://contoso.com" `
        -CertValue $credential  `
        -StartDate $certificatePFX.NotBefore  `
        -EndDate $certificatePFX.NotAfter
    
    $applicationId = $application.ApplicationId
    
  2. Utwórz jednostkę usługi przy użyciu identyfikatora aplikacji.

    $servicePrincipal = New-AzADServicePrincipal -ApplicationId $applicationId -Role Contributor
    
     $objectId = $servicePrincipal.Id
    
  3. Udziel jednostce usługi dostępu do folderu Data Lake Storage Gen1 i pliku, do którego będziesz uzyskiwać dostęp z klastra usługi HDInsight. Poniższy fragment kodu zapewnia dostęp do katalogu głównego konta magazynu z Data Lake Storage Gen1 (gdzie skopiowano przykładowy plik danych) i sam plik.

    Set-AzDataLakeStoreItemAclEntry -AccountName $dataLakeStorageGen1Name -Path / -AceType User -Id $objectId -Permissions All
    Set-AzDataLakeStoreItemAclEntry -AccountName $dataLakeStorageGen1Name -Path /vehicle1_09142014.csv -AceType User -Id $objectId -Permissions All
    

Tworzenie klastra usługi HDInsight z systemem Linux przy użyciu Data Lake Storage Gen1 jako dodatkowego magazynu

W tej sekcji utworzymy klaster usługi HDInsight Hadoop Linux z Data Lake Storage Gen1 jako dodatkowy magazyn. W tej wersji klaster usługi HDInsight i konto magazynu z Data Lake Storage Gen1 muszą znajdować się w tej samej lokalizacji.

  1. Zacznij od pobrania identyfikatora dzierżawy subskrypcji. Będzie to potrzebne później.

    $tenantID = (Get-AzContext).Tenant.TenantId
    
  2. W tej wersji dla klastra Hadoop Data Lake Storage Gen1 można używać tylko jako dodatkowego magazynu dla klastra. Domyślnym magazynem będzie nadal usługa Azure Blob Storage (WASB). Najpierw utworzymy konto magazynu i kontenery magazynu wymagane dla klastra.

    # Create an Azure storage account
    $location = "East US 2"
    $storageAccountName = "<StorageAccountName>"   # Provide a Storage account name
    
    New-AzStorageAccount -ResourceGroupName $resourceGroupName -StorageAccountName $storageAccountName -Location $location -Type Standard_GRS
    
    # Create an Azure Blob Storage container
    $containerName = "<ContainerName>"              # Provide a container name
    $storageAccountKey = (Get-AzStorageAccountKey -Name $storageAccountName -ResourceGroupName $resourceGroupName)[0].Value
    $destContext = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey
    New-AzStorageContainer -Name $containerName -Context $destContext
    
  3. Utwórz klaster usługi HDInsight. Użyj następujących poleceń cmdlet.

    # Set these variables
    $clusterName = $containerName                   # As a best practice, have the same name for the cluster and container
    $clusterNodes = <ClusterSizeInNodes>            # The number of nodes in the HDInsight cluster
    $httpCredentials = Get-Credential
    $sshCredentials = Get-Credential
    
    New-AzHDInsightCluster -ClusterName $clusterName -ResourceGroupName $resourceGroupName -HttpCredential $httpCredentials -Location $location -DefaultStorageAccountName "$storageAccountName.blob.core.windows.net" -DefaultStorageAccountKey $storageAccountKey -DefaultStorageContainer $containerName  -ClusterSizeInNodes $clusterNodes -ClusterType Hadoop -Version "3.4" -OSType Linux -SshCredential $sshCredentials -ObjectID $objectId -AadTenantId $tenantID -CertificateFilePath $certificateFilePath -CertificatePassword $password
    

    Po pomyślnym zakończeniu polecenia cmdlet powinny zostać wyświetlone dane wyjściowe zawierające szczegóły klastra.

Uruchamianie zadań testowych w klastrze usługi HDInsight w celu korzystania z Data Lake Storage Gen1

Po skonfigurowaniu klastra usługi HDInsight można uruchamiać zadania testowe w klastrze, aby przetestować, czy klaster usługi HDInsight może uzyskać dostęp do Data Lake Storage Gen1. W tym celu uruchomimy przykładowe zadanie hive, które tworzy tabelę przy użyciu przykładowych danych przekazanych wcześniej do konta magazynu przy użyciu Data Lake Storage Gen1.

W tej sekcji utworzysz protokół SSH w utworzonym klastrze usługi HDInsight z systemem Linux i uruchomisz przykładowe zapytanie Hive.

  1. Po nawiązaniu połączenia uruchom interfejs wiersza polecenia programu Hive przy użyciu następującego polecenia:

    hive
    
  2. Za pomocą interfejsu wiersza polecenia wprowadź następujące instrukcje, aby utworzyć nową tabelę o nazwie vehicles przy użyciu przykładowych danych w Data Lake Storage Gen1:

    DROP TABLE vehicles;
    CREATE EXTERNAL TABLE vehicles (str string) LOCATION 'adl://<mydatalakestoragegen1>.azuredatalakestore.net:443/';
    SELECT * FROM vehicles LIMIT 10;
    

    Powinny pojawić się dane wyjściowe podobne do następujących:

    1,1,2014-09-14 00:00:03,46.81006,-92.08174,51,S,1
    1,2,2014-09-14 00:00:06,46.81006,-92.08174,13,NE,1
    1,3,2014-09-14 00:00:09,46.81006,-92.08174,48,NE,1
    1,4,2014-09-14 00:00:12,46.81006,-92.08174,30,W,1
    1,5,2014-09-14 00:00:15,46.81006,-92.08174,47,S,1
    1,6,2014-09-14 00:00:18,46.81006,-92.08174,9,S,1
    1,7,2014-09-14 00:00:21,46.81006,-92.08174,53,N,1
    1,8,2014-09-14 00:00:24,46.81006,-92.08174,63,SW,1
    1,9,2014-09-14 00:00:27,46.81006,-92.08174,4,NE,1
    1,10,2014-09-14 00:00:30,46.81006,-92.08174,31,N,1
    

Uzyskiwanie dostępu do Data Lake Storage Gen1 przy użyciu poleceń hdFS

Po skonfigurowaniu klastra usługi HDInsight do używania Data Lake Storage Gen1 można użyć poleceń powłoki HDFS w celu uzyskania dostępu do magazynu.

W tej sekcji utworzysz protokół SSH w utworzonym klastrze usługi HDInsight z systemem Linux i uruchomisz polecenia hdFS.

Po nawiązaniu połączenia użyj następującego polecenia systemu plików HDFS, aby wyświetlić listę plików na koncie magazynu z Data Lake Storage Gen1.

hdfs dfs -ls adl://<storage account with Data Lake Storage Gen1 name>.azuredatalakestore.net:443/

Powinno to zawierać listę przekazanych wcześniej plików do Data Lake Storage Gen1.

15/09/17 21:41:15 INFO web.CaboWebHdfsFileSystem: Replacing original urlConnectionFactory with org.apache.hadoop.hdfs.web.URLConnectionFactory@21a728d6
Found 1 items
-rwxrwxrwx   0 NotSupportYet NotSupportYet     671388 2015-09-16 22:16 adl://mydatalakestoragegen1.azuredatalakestore.net:443/mynewfolder

Możesz również użyć hdfs dfs -put polecenia , aby przekazać niektóre pliki do Data Lake Storage Gen1, a następnie użyć polecenia hdfs dfs -ls , aby sprawdzić, czy pliki zostały pomyślnie przekazane.

Zobacz też