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

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

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

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

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

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

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

Примечание

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

Прежде чем приступить к изучению этого руководства, убедитесь, что выполнены следующие требования.

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

  • Azure PowerShell 1.0 или более поздняя версия. Инструкции см. в статье Приступая к работе с командлетами Azure PowerShell.

  • Пакет средств разработки программного обеспечения для Windows (пакет SDK). Инструкции по установке пакета Windows SDK приведены на странице Загружаемые файлы и инструменты для Windows 10. Пакет SDK используется для создания сертификата безопасности.

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

    Примечание

    Субъект-службу можно создать, только если вы являетесь администратором Microsoft Entra. Администратор Microsoft Entra должен создать субъект-службу, прежде чем создавать кластер HDInsight с Data Lake Storage 1-го поколения. При создании субъекта-службы необходимо использовать сертификат, как описано в разделе Создание субъекта-службы с использованием сертификата.

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

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

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

    # Sign 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 1-го поколения и видите сообщение об ошибке, например Register-AzResourceProvider : InvalidResourceNamespace: The resource namespace 'Microsoft.DataLakeStore' is invalid, возможно, ваша подписка не добавлена утверждена для Data Lake Storage 1-го поколения. Чтобы использовать подписку Azure для Data Lake Storage 1-го поколения, следуйте инструкциям в разделе Начало работы с Azure Data Lake Storage 1-го поколения с помощью портала Azure.

  2. Учетная запись Data Lake Storage 1-го поколения связывается с группой ресурсов 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 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-го поколения в качестве хранилища по умолчанию необходимо указать путь к корневой папке, в которую будут скопированы связанные с кластером файлы в процессе создания кластера. Чтобы создать корневой путь, который является /clusters/hdiadlcluster в фрагменте, используйте следующие командлеты:

    $myrootdir = "/"
    New-AzDataLakeStoreItem -Folder -AccountName $dataLakeStorageGen1Name -Path $myrootdir/clusters/hdiadlcluster
    

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

Каждая подписка Azure связана с сущностью Microsoft Entra. Пользователи и службы, которые обращаются к ресурсам подписки с помощью портал Azure или API Resource Manager Azure, должны сначала пройти проверку подлинности с помощью Microsoft Entra ID. Доступ к подпискам и службам Azure предоставляется путем назначения соответствующей роли для ресурса Azure. Для служб субъект-служба определяет службу в Microsoft Entra ID.

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

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

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

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

  1. В окне PowerShell перейдите в расположение, где установлен пакет Windows SDK (обычно это 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-го поколения и всем папкам в ранее указанном корневом пути. Используйте следующие командлеты.

    Set-AzDataLakeStoreItemAclEntry -AccountName $dataLakeStorageGen1Name -Path / -AceType User -Id $objectId -Permissions All
    Set-AzDataLakeStoreItemAclEntry -AccountName $dataLakeStorageGen1Name -Path /clusters -AceType User -Id $objectId -Permissions All
    Set-AzDataLakeStoreItemAclEntry -AccountName $dataLakeStorageGen1Name -Path /clusters/hdiadlcluster -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. Создайте кластер HDInsight с помощью приведенных ниже командлетов.

    # Set these variables
    
    $location = "East US 2"
    $storageAccountName = $dataLakeStorageGen1Name    # Data Lake Storage Gen1 account name
        $storageRootPath = "<Storage root path you specified earlier>"     # e.g. /clusters/hdiadlcluster
        $clusterName = "<unique cluster name>"
    $clusterNodes = <ClusterSizeInNodes>            # The number of nodes in the HDInsight cluster
    $httpCredentials = Get-Credential
    $sshCredentials = Get-Credential
    
    New-AzHDInsightCluster `
           -ClusterType Hadoop `
           -OSType Linux `
           -ClusterSizeInNodes $clusterNodes `
           -ResourceGroupName $resourceGroupName `
           -ClusterName $clusterName `
           -HttpCredential $httpCredentials `
           -Location $location `
           -DefaultStorageAccountType AzureDataLakeStore `
           -DefaultStorageAccountName "$storageAccountName.azuredatalakestore.net" `
           -DefaultStorageRootPath $storageRootPath `
           -Version "3.6" `
           -SshCredential $sshCredentials `
           -AadTenantId $tenantId `
           -ObjectId $objectId `
           -CertificateFilePath $certificateFilePath `
           -CertificatePassword $password
    

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

Выполнение тестовых заданий в кластере HDInsight для использования Data Lake Storage 1-го поколения

После настройки кластера HDInsight выполните в нем тестовые задания, чтобы проверить, может ли он использовать Data Lake Storage 1-го поколения. Для этого запустите пример задания Hive, чтобы создать таблицу, которая использует образцы данных, которые уже доступны в Data Lake Storage 1-го поколения в <корневом> каталоге кластера,example/data/sample.log.

Следуя инструкциям в этом разделе, вы подключитесь по протоколу Secure Shell (SSH) к созданному кластеру HDInsight на платформе Linux и выполните пример запроса Hive.

  1. Установив подключение, запустите интерфейс командной строки Hive, выполнив в командной строке следующую команду.

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

    DROP TABLE log4jLogs;
        CREATE EXTERNAL TABLE log4jLogs (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:///example/data/';
        SELECT t4 AS sev, COUNT(*) AS count FROM log4jLogs WHERE t4 = '[ERROR]' AND INPUT__FILE__NAME LIKE '%.log' GROUP BY t4;
    

Результаты запроса появятся в консоли SSH.

Примечание

Путь к демонстрационным данных в приведенной выше команде CREATE TABLE — adl:///example/data/, где adl:/// является корнем кластера. Используя пример корня кластера, указанный в этом руководстве, получаем команду adl://hdiadlstore.azuredatalakestore.net/clusters/hdiadlcluster. Можно использовать более короткий вариант пути или указать полный путь к корню кластера.

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

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

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

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

hdfs dfs -ls adl:///

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

См. также раздел