Использование Azure PowerShell для создания кластера HDInsight с Azure Data Lake Storage 1-го поколения (в качестве дополнительного хранилища)

Узнайте, как с помощью Azure PowerShell настроить кластер HDInsight с Azure Data Lake Storage 1-го поколения в качестве дополнительного хранилища. Инструкции по созданию кластера HDInsight с Data Lake Storage 1-го поколения в качестве хранилища по умолчанию см. в статье Создание кластеров, использующих Data Lake Storage 1-го в качестве хранилища по умолчанию, с помощью PowerShell.

Примечание

Если вы собираетесь добавить Data Lake Storage 1-го поколения в качестве дополнительного хранилища для кластера HDInsight, настоятельно рекомендуется сделать это во время создания кластера, как описано в этой статье. Добавление Data Lake Storage 1-го поколения в качестве дополнительного хранилища для существующего кластера HDInsight — очень сложный процесс, который может привести к ошибкам.

В поддерживаемых типах кластеров Data Lake Storage 1-го поколения можно использовать в качестве хранилища по умолчанию или дополнительной учетной записи хранения. Когда Data Lake Storage 1-го поколения используется в качестве дополнительного хранилища, учетной записью хранилища по умолчанию для кластеров по-прежнему будет хранилище BLOB-объектов Azure (WASB), а файлы, связанные с кластером (например, журналы и т. д.), по-прежнему будут записаны в хранилище по умолчанию, в то время как данные, которые вы хотите обработать, могут храниться в Data Lake Storage 1-го поколения. Использование Data Lake Storage 1-го поколения в качестве дополнительной учетной записи хранения не влияет на производительность или возможность выполнять чтение и запись в хранилище из кластера.

Использование Data Lake Storage 1-го поколения в качестве хранилища кластера HDInsight

Ниже приведены некоторые важные сведения об использовании HDInsight с Data Lake Storage 1-го поколения.

  • Возможность создавать кластеры HDInsight с доступом к Data Lake Storage 1-го поколения в качестве дополнительного хранилища поддерживается для версий HDInsight 3.2, 3.4, 3.5 и 3.6.

Настройка HDInsight для использования Data Lake Storage 1-го поколения с помощью PowerShell состоит из нескольких этапов.

  • Создание учетной записи Data Lake Storage 1-го поколения
  • Настройка проверки подлинности для доступа к Data Lake Storage 1-го поколения на основе ролей
  • Создание кластера HDInsight с проверкой подлинности в Data Lake Storage 1-го поколения
  • выполнение тестового задания в кластере.

Предварительные требования

Примечание

Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Чтобы начать работу, см. статью Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.

Перед началом работы с этим учебником необходимо иметь следующее:

  • Подписка Azure. См. страницу бесплатной пробной версии Azure.

  • Azure PowerShell 1.0 или более поздней версии. Ознакомьтесь со статьей Установка и настройка Azure PowerShell.

  • Пакет SDK Windows. Его можно установить отсюда. Пакет используется для создания сертификата безопасности.

  • Microsoft Entra субъект-службу. В этом руководстве приведены инструкции по созданию субъекта-службы в Microsoft Entra ID. Однако для создания субъекта-службы необходимо быть администратором Microsoft Entra. Если вы являетесь администратором Microsoft Entra, вы можете пропустить это необходимое условие и продолжить работу с руководством.

    Если вы не являетесь администратором Microsoft Entra, вы не сможете выполнить действия, необходимые для создания субъекта-службы. В этом случае администратор Microsoft Entra должен сначала создать субъект-службу, прежде чем создавать кластер HDInsight с Data Lake Storage 1-го поколения. При создании субъекта-службы также необходимо использовать сертификат, как описано в разделе Create a service principal with certificate (Создание субъекта-службы с сертификатом).

Создание учетной записи Data Lake Storage 1-го поколения

Чтобы создать учетную запись Data Lake Storage 1-го поколения, сделайте следующее.

  1. На своем компьютере откройте новое окно Azure PowerShell и введите следующий фрагмент кода. Когда вам будет предложено войти, введите учетные данные администратора или владельца подписки:

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

    Примечание

    Если при регистрации поставщика ресурсов Data Lake Storage Gen1 вы получаете сообщение об ошибке, подобное Register-AzResourceProvider : InvalidResourceNamespace: The resource namespace 'Microsoft.DataLakeStore' is invalid, возможно, ваша подписка не одобрена для Data Lake Storage 1-го поколения. Убедитесь, что подписка Azure для Data Lake Storage 1-го поколения включена, выполнив указанные инструкции.

  2. Учетная запись хранения с Data Lake Storage 1-го поколения связана с группой ресурсов Azure. Для начала создайте группу ресурсов Azure.

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

    Вы должны увидеть такие выходные данные:

    ResourceGroupName : hdiadlgrp
    Location          : eastus2
    ProvisioningState : Succeeded
    Tags              :
    ResourceId        : /subscriptions/<subscription-id>/resourceGroups/hdiadlgrp
    
  3. Создайте учетную запись хранения с Data Lake Storage 1-го поколения. Имя новой учетной записи должно содержать только строчные буквы и цифры.

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

    Вы должны увидеть подобные выходные данные:

    ...
    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. Отправьте пример данных в Data Lake Storage 1-го поколения. Позже мы проверим, доступны ли эти данные из кластера HDInsight. Если у вас нет под рукой подходящих для этих целей данных, передайте папку Ambulance Data из репозитория Git для озера данных Azure.

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

Настройка проверки подлинности для доступа к Data Lake Storage 1-го поколения на основе ролей

Каждая подписка Azure связана с Microsoft Entra ID. Пользователи и службы, которые обращаются к ресурсам подписки с помощью портал Azure или API Resource Manager Azure, должны сначала пройти проверку подлинности с помощью этого Microsoft Entra ID. Доступ к подпискам и службам Azure предоставляется путем назначения соответствующей роли для ресурса Azure. Для служб субъект-служба определяет службу в Microsoft Entra ID. В этом разделе показано, как предоставить службе приложения, такой как HDInsight, доступ к ресурсу Azure (учетная запись хранения с Data Lake Storage 1-го поколения, созданная вами ранее) путем создания субъекта-службы для приложения и назначения ему ролей через Azure PowerShell.

Чтобы настроить для Data Lake Storage 1-го поколения проверку подлинности в Active Directory, вам необходимо сделать следующее.

  • Создание самозаверяющего сертификата
  • Создание приложения в Microsoft Entra ID и субъекта-службы

Создание самозаверяющего сертификата

Прежде чем выполнять дальнейшие действия, описанные в этом разделе, убедитесь, что на вашем компьютере установлен пакет SDK Windows. Вам также необходимо создать каталог, например C:\mycertdir, в котором будет создан сертификат.

  1. В окне PowerShell перейдите в расположение, где установлен пакет SDK Windows (обычно это C:\Program Files (x86)\Windows Kits\10\bin\x86), и с помощью служебной программы MakeCert создайте самозаверяющий сертификат и закрытый ключ. Используйте такие команды:

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

    Вам будет предложено ввести пароль для закрытого ключа. После успешного выполнения команды в указанном каталоге сертификатов должны появиться файлы CertFile.cer и mykey.pvk.

  2. С помощью служебной программы Pvk2Pfx преобразуйте созданные программой MakeCert PVK- и CER-файлы в PFX-файл. Выполните следующую команду.

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

    При появлении соответствующего запроса введите указанный ранее пароль для закрытого ключа. Значение, указываемое для параметра -po — это пароль, связанный с PFX-файлом. После успешного выполнения команды вы должны увидеть в указанном каталоге сертификата файл CertFile.pfx.

Создание Microsoft Entra ID и субъекта-службы

В этом разделе описано, как создать субъект-службу для приложения Microsoft Entra, назначить роль субъекту-службе и выполнить проверку подлинности в качестве субъекта-службы, предоставив сертификат. Выполните следующие команды, чтобы создать приложение в Microsoft Entra ID.

  1. В окне консоли PowerShell вставьте из буфера обмена следующие командлеты. Укажите для свойства -DisplayName уникальное значение. Значения свойств -HomePage b -IdentiferUris — это заполнители, которые не проверяются.

    $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. С помощью идентификатора приложения создайте субъект-службу.

    $servicePrincipal = New-AzADServicePrincipal -ApplicationId $applicationId -Role Contributor
    
     $objectId = $servicePrincipal.Id
    
  3. Предоставьте субъекту-службе доступ к файлу и папке Data Lake Storage 1-го поколения, к которым будете обращаться из кластера HDInsight. Приведенный ниже фрагмент обеспечивает доступ к корневому каталогу учетной записи хранения с Data Lake Storage 1-го поколения (куда вы скопировали образец файла данных) и к самому файлу.

    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
    

Создание кластера HDInsight на платформе Linux с Data Lake Storage 1-го поколения в качестве дополнительного хранилища

В этом разделе показано, как создать кластер HDInsight Hadoop на платформе Linux с Data Lake Storage 1-го поколения в качестве дополнительного хранилища. В этом выпуске кластер HDInsight и учетная запись хранения с Data Lake Storage 1-го поколения должны находиться в одном месте.

  1. Сначала получите идентификатор клиента подписки. Позже он вам понадобится.

    $tenantID = (Get-AzContext).Tenant.TenantId
    
  2. В этом выпуске в кластере Hadoop Data Lake Storage 1-го поколения может использоваться только как дополнительное хранилище кластера. Хранилищем по умолчанию по-прежнему будет хранилище BLOB-объектов Azure (WASB). Поэтому мы сначала создадим учетную запись хранения и контейнеры хранилища, необходимые для кластера.

    # 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. Создайте кластер HDInsight, выполнив следующие командлеты.

    # 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
    

    В случае успешного выполнения командлета должен отобразиться список сведений о кластере.

Запустите тестовые задания в кластере HDInsight, чтобы использовать Data Lake Storage 1-го поколения

После настройки кластера HDInsight выполните в нем тестовые задания, чтобы проверить, доступно ли ему Data Lake Storage 1-го поколения. Для этого мы запустим примерное задание Hive, которое создает таблицу с использованием образцов данных, которые вы ранее загрузили в свою учетную запись хранения с помощью Data Lake Storage 1-го поколения.

В этом разделе вы подключитесь к созданному кластеру HDInsight под управлением Linux по протоколу SSH и выполните пример запроса Hive.

  1. После подключения запустите интерфейс командной строки Hive с помощью следующей команды:

    hive
    
  2. Используя интерфейс командной строки, введите следующие инструкции, чтобы создать таблицу с именем vehicles с помощью примера данных в Data Lake Storage 1-го поколения:

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

    Должен отобразиться результат, аналогичный приведенному ниже:

    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
    

Доступ к Data Lake Storage 1-го поколения с помощью команд HDFS

Настроив в кластере HDInsight параметры для работы с Data Lake Storage 1-го поколения, используйте для доступа к хранилищу команды оболочки HDFS.

В этом разделе вы подключитесь к созданному кластеру HDInsight под управлением Linux по протоколу SSH и выполните команды HDFS.

После подключения используйте следующую команду файловой системы HDFS, чтобы вывести список файлов в учетной записи хранения с Data Lake Storage 1-го поколения.

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

Эта команда должна показать файл, который вы ранее отправили в Data Lake Storage 1-го поколения.

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

С помощью команды hdfs dfs -put вы можете передать несколько файлов в Data Lake Storage 1-го поколения, а затем с помощью команды hdfs dfs -ls проверить, успешно ли они передались.

См. также: