Создание кластеров 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-го поколения, выполните следующее.
На своем компьютере откройте окно 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.Учетная запись 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
Создайте учетную запись 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 : {}
При использовании 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, для создания сертификата.
В окне 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.
С помощью служебной программы 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, выполните следующие команды:
В окне консоли 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
С помощью идентификатора приложения создайте субъект-службу.
$servicePrincipal = New-AzADServicePrincipal -ApplicationId $applicationId -Role Contributor $objectId = $servicePrincipal.Id
Предоставьте субъекту-службе доступ к корневой папке 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-го поколения должны находиться в одном расположении.
Получите идентификатор клиента для подписки и сохраните его для последующего использования.
$tenantID = (Get-AzContext).Tenant.TenantId
Создайте кластер 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.
- Если вы используете клиент Windows для подключения к кластеру по протоколу SSH, ознакомьтесь со статьей Использование SSH с HDInsight (Hadoop) в PuTTY на базе Windows.
- Если вы используете клиент Linux для подключения к кластеру по SSH, ознакомьтесь со статьей Использование SSH с HDInsight (Hadoop) на платформе Windows, Linux, Unix или OS X.
Установив подключение, запустите интерфейс командной строки Hive, выполнив в командной строке следующую команду.
hive
Используя интерфейс командной строки, введите приведенные ниже инструкции, чтобы создать таблицу 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.
- Если вы используете клиент Windows для подключения к кластеру по протоколу SSH, ознакомьтесь со статьей Использование SSH с HDInsight (Hadoop) в PuTTY на базе Windows.
- Если вы используете клиент Linux для подключения к кластеру по SSH, ознакомьтесь со статьей Использование SSH с HDInsight (Hadoop) на платформе Windows, Linux, Unix или OS X.
Когда подключение будет установлено, выведите список файлов в Data Lake Storage 1-го поколения, используя приведенную ниже команду файловой системы HDFS.
hdfs dfs -ls adl:///
С помощью команды hdfs dfs -put
вы можете передать несколько файлов в Data Lake Storage 1-го поколения, а затем с помощью команды hdfs dfs -ls
проверить, успешно ли они передались.