Použití Azure PowerShell k vytvoření clusteru HDInsight s Azure Data Lake Storage Gen1 (jako další úložiště)

Zjistěte, jak pomocí Azure PowerShell nakonfigurovat cluster HDInsight s Azure Data Lake Storage Gen1 jako dodatečné úložiště. Pokyny k vytvoření clusteru HDInsight s Data Lake Storage Gen1 jako výchozím úložištěm najdete v tématu Vytvoření clusteru HDInsight s Data Lake Storage Gen1 jako výchozím úložištěm.

Poznámka

Pokud budete Data Lake Storage Gen1 používat jako další úložiště pro cluster HDInsight, důrazně doporučujeme, abyste to udělali při vytváření clusteru, jak je popsáno v tomto článku. Přidání Data Lake Storage Gen1 jako dalšího úložiště do existujícího clusteru HDInsight je složitý proces a náchylný k chybám.

U podporovaných typů clusterů je možné Data Lake Storage Gen1 použít jako výchozí úložiště nebo jako další účet úložiště. Pokud se Data Lake Storage Gen1 použije jako další úložiště, bude výchozím účtem úložiště pro clustery stále Azure Blob Storage (WASB) a soubory související s clusterem (například protokoly atd.) se pořád zapisují do výchozího úložiště, zatímco data, která chcete zpracovat, můžete uložit do Data Lake Storage Gen1. Použití Data Lake Storage Gen1 jako dalšího účtu úložiště nemá vliv na výkon ani na schopnost číst a zapisovat do úložiště z clusteru.

Použití Data Lake Storage Gen1 pro úložiště clusteru HDInsight

Tady jsou některé důležité informace o používání SLUŽBY HDInsight s Data Lake Storage Gen1:

  • Možnost vytvořit clustery HDInsight s přístupem k Data Lake Storage Gen1, protože pro HDInsight verze 3.2, 3.4, 3.5 a 3.6 je k dispozici další úložiště.

Konfigurace SLUŽBY HDInsight pro práci s Data Lake Storage Gen1 pomocí PowerShellu zahrnuje následující kroky:

  • Vytvoření účtu Data Lake Storage Gen1
  • Nastavení ověřování pro přístup na základě role k Data Lake Storage Gen1
  • Vytvoření clusteru HDInsight s ověřováním pro Data Lake Storage Gen1
  • Spuštění testovací úlohy v clusteru

Požadavky

Poznámka

Při práci s Azure doporučujeme používat modul Azure Az PowerShellu. Začněte tím, že si projdete téma Instalace Azure PowerShellu. Informace o tom, jak migrovat na modul Az PowerShell, najdete v tématu Migrace Azure PowerShellu z AzureRM na Az.

Je nutné, abyste před zahájením tohoto kurzu měli tyto položky:

  • Předplatné Azure. Viz Získání bezplatné zkušební verze Azure.

  • Azure PowerShell 1.0 nebo vyšší. Viz téma Instalace a konfigurace prostředí Azure PowerShell.

  • Windows SDK. Můžete si ji nainstalovat odtud. Použijete ho k vytvoření certifikátu zabezpečení.

  • Microsoft Entra instančního objektu. Kroky v tomto kurzu obsahují pokyny k vytvoření instančního objektu v Microsoft Entra ID. Abyste však mohli vytvořit instanční objekt, musíte být správcem Microsoft Entra. Pokud jste správcem Microsoft Entra, můžete tuto podmínku přeskočit a pokračovat v kurzu.

    Pokud nejste správcem Microsoft Entra, nebudete moct provést kroky potřebné k vytvoření instančního objektu. V takovém případě musí správce Microsoft Entra nejprve vytvořit instanční objekt, abyste mohli vytvořit cluster HDInsight s Data Lake Storage Gen1. Instanční objekt musí být také vytvořen pomocí certifikátu, jak je popsáno v tématu Vytvoření instančního objektu s certifikátem.

Vytvoření účtu Data Lake Storage Gen1

Pomocí těchto kroků vytvořte účet Data Lake Storage Gen1.

  1. Na ploše otevřete nové okno Azure PowerShell a zadejte následující fragment kódu. Po zobrazení výzvy k přihlášení se ujistěte, že se přihlašujete jako správce nebo vlastník předplatného:

    # 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"
    

    Poznámka

    Pokud se zobrazí podobná chyba Register-AzResourceProvider : InvalidResourceNamespace: The resource namespace 'Microsoft.DataLakeStore' is invalid jako při registraci poskytovatele prostředků Data Lake Storage Gen1, je možné, že vaše předplatné není schválené pro Data Lake Storage Gen1. Podle těchto pokynů nezapomeňte povolit předplatné Azure pro Data Lake Storage Gen1.

  2. Účet úložiště s Data Lake Storage Gen1 je přidružený ke skupině prostředků Azure. Začněte vytvořením skupiny prostředků Azure.

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

    Měl by se zobrazit výstup podobný tomuto:

    ResourceGroupName : hdiadlgrp
    Location          : eastus2
    ProvisioningState : Succeeded
    Tags              :
    ResourceId        : /subscriptions/<subscription-id>/resourceGroups/hdiadlgrp
    
  3. Vytvořte účet úložiště pomocí Data Lake Storage Gen1. Zadaný název účtu musí obsahovat pouze malá písmena a číslice.

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

    Zobrazený výstup by měl vypadat asi takto:

    ...
    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. Nahrajte ukázková data do Data Lake Storage Gen1. Později v tomto článku to použijeme k ověření, že jsou data přístupná z clusteru HDInsight. Pokud hledáte ukázková data, která byste mohli nahrát, můžete použít složku Ambulance Data z úložiště Git Azure Data Lake.

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

Nastavení ověřování pro přístup na základě role k Data Lake Storage Gen1

Každé předplatné Azure je přidružené k Microsoft Entra ID. Uživatelé a služby, které přistupují k prostředkům předplatného pomocí Azure Portal nebo rozhraní API azure Resource Manager, se musí nejprve ověřit pomocí tohoto Microsoft Entra ID. Přístup k předplatným a službám Azure se uděluje přiřazením příslušné role k prostředku Azure. U služeb instanční objekt identifikuje službu v Microsoft Entra ID. Tato část ukazuje, jak aplikační službě, jako je HDInsight, udělit přístup k prostředku Azure (účtu úložiště s Data Lake Storage Gen1 jste vytvořili dříve) vytvořením instančního objektu pro aplikaci a přiřazením rolí k tomuto prostředku prostřednictvím Azure PowerShell.

Pokud chcete nastavit ověřování active directory pro Data Lake Storage Gen1, musíte provést následující úlohy.

  • Vytvoření certifikátu podepsaného svým držitelem (self-signed certificate)
  • Vytvoření aplikace v Microsoft Entra ID a instančním objektu

Vytvoření certifikátu podepsaného svým držitelem (self-signed certificate)

Než budete pokračovat v postupu v této části, ujistěte se, že máte nainstalovanou sadu Windows SDK . Musíte také vytvořit adresář, například C:\mycertdir, kde se certifikát vytvoří.

  1. V okně PowerShellu přejděte do umístění, kam jste nainstalovali sadu Windows SDK (obvykle, C:\Program Files (x86)\Windows Kits\10\bin\x86 a pomocí nástroje MakeCert vytvořte certifikát podepsaný svým držitelem a privátní klíč. Použijte následující příkazy.

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

    Zobrazí se výzva k zadání hesla privátního klíče. Po úspěšném spuštění příkazu by se v zadaném adresáři certifikátů měly zobrazit CertFile.cer a mykey.pvk .

  2. Pomocí nástroje Pvk2Pfx převeďte soubory .pvk a .cer vytvořené nástrojem MakeCert na soubor .pfx. Spusťte následující příkaz.

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

    Po zobrazení výzvy zadejte heslo privátního klíče, které jste zadali dříve. Hodnota, kterou zadáte pro parametr -po , je heslo, které je přidruženo k souboru .pfx. Po úspěšném dokončení příkazu by se měl v zadaném adresáři certifikátů zobrazit také soubor CertFile.pfx.

Vytvoření Microsoft Entra ID a instančního objektu

V této části provedete kroky k vytvoření instančního objektu pro aplikaci Microsoft Entra, přiřazení role instančnímu objektu a ověření jako instančního objektu poskytnutím certifikátu. Spuštěním následujících příkazů vytvořte aplikaci v Microsoft Entra ID.

  1. Do okna konzoly PowerShellu vložte následující rutiny. Ujistěte se, že hodnota zadaná pro vlastnost -DisplayName je jedinečná. Také hodnoty pro -HomePage a -IdentiferUris jsou zástupné hodnoty a nejsou ověřeny.

    $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. Pomocí ID aplikace vytvořte instanční objekt.

    $servicePrincipal = New-AzADServicePrincipal -ApplicationId $applicationId -Role Contributor
    
     $objectId = $servicePrincipal.Id
    
  3. Udělte instančnímu objektu přístup ke složce Data Lake Storage Gen1 a souboru, ke kterému budete přistupovat z clusteru HDInsight. Následující fragment kódu poskytuje přístup ke kořenovému adresáři účtu úložiště s Data Lake Storage Gen1 (kam jste zkopírovali ukázkový datový soubor) a k samotnému souboru.

    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
    

Vytvoření clusteru HDInsight s Linuxem s Data Lake Storage Gen1 jako dalším úložištěm

V této části vytvoříme linuxový cluster HDInsight Hadoop s Data Lake Storage Gen1 jako dalším úložištěm. V této verzi musí být cluster HDInsight a účet úložiště s Data Lake Storage Gen1 ve stejném umístění.

  1. Začněte načtením ID tenanta předplatného. Budete ho potřebovat později.

    $tenantID = (Get-AzContext).Tenant.TenantId
    
  2. V této verzi se pro cluster Hadoop dá Data Lake Storage Gen1 použít jenom jako další úložiště clusteru. Výchozím úložištěm bude stále Azure Blob Storage (WASB). Proto nejprve vytvoříme účet úložiště a kontejnery úložiště vyžadované pro cluster.

    # 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. Vytvořte cluster HDInsight. Použijte následující rutiny.

    # 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 úspěšném dokončení rutiny by se měl zobrazit výstup s podrobnostmi o clusteru.

Spuštění testovacích úloh v clusteru HDInsight pro použití Data Lake Storage Gen1

Po nakonfigurování clusteru HDInsight můžete v clusteru spustit testovací úlohy a otestovat, že cluster HDInsight má přístup k Data Lake Storage Gen1. Provedeme to tak, že spustíme ukázkovou úlohu Hive, která vytvoří tabulku s použitím ukázkových dat, která jste předtím nahráli do svého účtu úložiště s Data Lake Storage Gen1.

V této části se přes SSH připojíte ke clusteru HDInsight Linux, který jste vytvořili, a spustíte ukázkový dotaz Hive.

  1. Po připojení spusťte rozhraní příkazového řádku Hive pomocí následujícího příkazu:

    hive
    
  2. Pomocí rozhraní příkazového řádku zadejte následující příkazy, které vytvoří novou tabulku s názvem vozidla pomocí ukázkových dat v Data Lake Storage Gen1:

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

    Zobrazený výstup by měl vypadat přibližně takto:

    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
    

Přístup k Data Lake Storage Gen1 pomocí příkazů HDFS

Jakmile cluster HDInsight nakonfigurujete tak, aby používal Data Lake Storage Gen1, můžete pro přístup k úložišti použít příkazy prostředí HDFS.

V této části se přes SSH připojíte ke clusteru HDInsight Linux, který jste vytvořili, a spustíte příkazy HDFS.

Po připojení použijte následující příkaz systému souborů HDFS k zobrazení seznamu souborů v účtu úložiště s Data Lake Storage Gen1.

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

Měl by se zobrazit soubor, který jste předtím nahráli 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

Pomocí příkazu můžete také hdfs dfs -put nahrát některé soubory do Data Lake Storage Gen1 a pak pomocí příkazu hdfs dfs -ls ověřit, jestli se soubory úspěšně nahrály.

Viz také