Использование Data Lake Storage 1-го поколения с кластерами Azure HDInsight
Примечание.
Развертывайте новые кластеры HDInsight с помощью Azure Data Lake Storage 2-го поколения, чтобы повысить их производительность и получить дополнительные функции.
Данные, предназначенные для анализа в кластере HDInsight, можно хранить в Azure Blob storage
, Azure Data Lake Storage 1-го поколения или Azure Data Lake Storage 2-го поколения. Все варианты хранилищ позволяют безопасно и без потери пользовательских данных удалять используемые для расчетов кластеры HDInsight.
Из этой статьи вы узнаете, как Data Lake Storage 1-го поколения работает с кластерами HDInsight. О том, как хранилище BLOB-объектов Azure работает с кластерами HDInsight, см. в статье Использование хранилища BLOB-объектов Azure с кластерами Azure HDInsight. Дополнительные сведения о создании кластера HDInsight см. в статье Установка кластеров в HDInsight с использованием Hadoop, Spark, Kafka и других технологий.
Примечание.
Доступ к Data Lake Storage 1-го поколения всегда осуществляется по безопасному каналу, поэтому никогда не применяется имя схемы файловой системы adls
. Всегда используется adl
.
Примечание.
Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Чтобы начать работу, см. статью Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.
Сведения о доступности кластеров HDInsight
В Apache Hadoop поддерживается концепция файловой системы по умолчанию. Файловая система по умолчанию подразумевает использование центра сертификации и схемы по умолчанию. Она также может использоваться для разрешения относительных путей. В ходе создания кластера HDInsight укажите контейнер BLOB-объектов в качестве файловой системы по умолчанию в службе хранилища Azure. При использовании HDInsight 3.5 и более новых версий вы можете выбрать хранилище BLOB-объектов Azure или Azure Data Lake Storage 1-го поколения в качестве файловой системы по умолчанию за несколькими исключениями. Кластер и учетная запись хранения должны размещаться в одном регионе.
Кластеры HDInsight могут использовать Data Lake Storage 1-го поколения 2 способами:
- в качестве хранилища по умолчанию;
- в качестве дополнительного хранилища (при этом в качестве хранилища по умолчанию используется хранилище BLOB-объектов Azure).
Сейчас только некоторые типы и версии кластеров HDInsight поддерживают использование Data Lake Storage 1-го поколения в качестве хранилища по умолчанию и дополнительных учетных записей хранения.
Тип кластера HDInsight | Использование Data Lake Storage 1-го поколения как хранилища по умолчанию | Использование Data Lake Storage 1-го поколения как дополнительного хранилища | Примечания. |
---|---|---|---|
HDInsight версии 4.0 | No | No | HDInsight 4.0 не поддерживает ADLS 1-го поколения |
HDInsight версии 3.6 | Да | Да | За исключением HBase |
HDInsight версии 3.5 | Да | Да | За исключением HBase |
HDInsight версия 3.4 | No | Да | |
HDInsight версии 3.3 | No | No | |
HDInsight версии 3.2 | No | Да |
Предупреждение
HDInsight HBase не поддерживается в Azure Data Lake Storage 1-го поколения.
Использование Data Lake Storage 1-го поколения в качестве дополнительной учетной записи хранения не влияет на производительность и на возможность чтения и записи в хранилище BLOB-объектов Azure из кластера.
Использование Data Lake Storage 1-го поколения как хранилища по умолчанию
Если для кластера HDInsight в качестве хранилища по умолчанию развернуто Data Lake Storage 1-го поколения, все файлы этого кластера хранятся в расположении adl://mydatalakestore/<cluster_root_path>/
, где <cluster_root_path>
обозначает имя папки, созданной в Data Lake Storage. Указав корневую папку для каждого кластера, вы можете использовать одну и ту же учетную запись Data Lake Storage для нескольких кластеров. Таким образом, у вас могут получиться такие настройки:
- Кластер 1 может использовать путь
adl://mydatalakestore/cluster1storage
- Кластер 2 может использовать путь
adl://mydatalakestore/cluster2storage
Обратите внимание, что оба кластера используют одну учетную запись Data Lake Storage 1-го поколения с именем mydatalakestore. Каждый кластер имеет доступ к собственный корневой файловой системе в Data Lake Storage. При развертывании портала Azure предлагается использовать для корневого пути имя папки вида /clusters/<clustername>.
Чтобы использовать Data Lake Storage 1-го поколения как хранилище по умолчанию, предоставьте субъекту-службе доступ к следующим объектам:
- Корневой каталог учетной записи Data Lake Storage 1-го поколения. Например: adl://mydatalakestore/.
- Папка для всех папок кластера. Например: adl://mydatalakestore/clusters.
- Папка для кластера. Например: adl://mydatalakestore/clusters/cluster1storage.
Дополнительные сведения о создании субъекта-службы и предоставлении доступа см. в разделе "Настройка доступа к Data Lake Storage".
Извлечение сертификата из Azure Key Vault для использования при создании кластера
Если сертификат для вашего субъекта-службы хранится в Azure Key Vault, преобразуйте сертификат в правильный формат. В приведенных ниже фрагментах кода показано, как преобразовать сертификат.
Прежде всего, загрузите сертификат из Key Vault и извлеките SecretValueText
.
$certPassword = Read-Host "Enter Certificate Password"
$cert = (Get-AzureKeyVaultSecret -VaultName 'MY-KEY-VAULT' -Name 'MY-SECRET-NAME')
$certValue = [System.Convert]::FromBase64String($cert.SecretValueText)
Затем преобразуйте SecretValueText
в сертификат.
$certObject = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 -ArgumentList $certValue,$null,"Exportable, PersistKeySet"
$certBytes = $certObject.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, $certPassword.SecretValueText);
$identityCertificate = [System.Convert]::ToBase64String($certBytes)
После этого можно используйте $identityCertificate
для развертывания нового кластера, как показано в следующем фрагменте.
New-AzResourceGroupDeployment `
-ResourceGroupName $resourceGroupName `
-TemplateFile $pathToArmTemplate `
-identityCertificate $identityCertificate `
-identityCertificatePassword $certPassword.SecretValueText `
-clusterName $clusterName `
-clusterLoginPassword $SSHpassword `
-sshPassword $SSHpassword `
-servicePrincipalApplicationId $application.ApplicationId
Использование Data Lake Storage 1-го поколения как дополнительного хранилища
Data Lake Storage 1-го поколения можно использовать в качестве дополнительного хранилища кластера. В таких случаях хранилище кластера по умолчанию может быть хранилищем BLOB-объектов Azure или учетной записью Data Lake Storage 1-го поколения Azure. При выполнении заданий HDInsight с данными, которые хранятся в Azure Data Lake Storage 1-го поколения как в дополнительном хранилище, используйте полный путь к файлам. Например:
adl://mydatalakestore.azuredatalakestore.net/<file_path>
В URL-адресе отсутствует cluster_root_path, так как в этом случае Data Lake Storage не является хранилищем по умолчанию. Поэтому вам достаточно указать путь к файлам.
Чтобы использовать Data Lake Storage 1-го поколения как дополнительное хранилище, предоставьте субъекту-службе доступ к расположениям, в которых хранятся файлы. Например:
adl://mydatalakestore.azuredatalakestore.net/<file_path>
Дополнительные сведения о создании субъекта-службы и предоставлении доступа см. в разделе "Настройка доступа к Data Lake Storage".
Использование нескольких учетных записей Data Lake Storage 1-го поколения
Можно добавить учетную запись Data Lake Storage в качестве дополнительной или добавить несколько учетных записей Data Lake Storage. Предоставьте кластеру HDInsight разрешение на данные в одной или нескольких учетных записях Data Lake Storage. Ознакомьтесь с разделом "Настройка доступа к Data Lake Storage 1-го поколения".
Настройка доступа к Data Lake Storage 1-го поколения
Чтобы настроить доступ к Azure Data Lake Storage 1-го поколения из кластера HDInsight, необходимо иметь субъект-службу Microsoft Entra. Только администратор Microsoft Entra может создать субъект-службу. Для создания субъекта-службы необходим сертификат. Дополнительные сведения см. в разделах Краткое руководство. Настройка кластеров в HDInsight и Создание субъекта-службы с самозаверяющим сертификатом.
Примечание.
Если вы собираетесь добавить Azure Data Lake Storage 1-го поколения в качестве дополнительного хранилища для кластера HDInsight, мы настоятельно рекомендуем сделать это во время создания кластера, как описано в этой статье. Сценарий с добавлением Azure Data Lake Storage 1-го поколения в качестве дополнительного хранилища для существующего кластера HDInsight не поддерживается.
Сведения о модели управления доступом см. в статье Управление доступом в Azure Data Lake Storage 1-го поколения.
Доступ к файлам из кластера
Существует несколько способов доступа к файлам в Data Lake Storage из кластера HDInsight.
С помощью полного доменного имени. При таком подходе необходимо указать полный путь к файлу, к которому требуется доступ.
adl://<data_lake_account>.azuredatalakestore.net/<cluster_root_path>/<file_path>
Используя сокращенный формат пути. При таком подходе путь до корня кластера заменяется на следующий:
adl:///<file path>
С помощью относительного пути. При таком подходе указывается только относительный путь к файлу, к которому требуется доступ.
/<file.path>/
Примеры доступа к данным
Примеры основаны на SSH-подключении к головному узлу кластера. В примерах используются все три схемы URI. Замените DATALAKEACCOUNT
и CLUSTERNAME
соответствующими значениями.
Несколько команд HDFS
Создайте файл в локальном хранилище.
touch testFile.txt
Создайте каталог в хранилище кластера.
hdfs dfs -mkdir adl://DATALAKEACCOUNT.azuredatalakestore.net/clusters/CLUSTERNAME/sampledata1/ hdfs dfs -mkdir adl:///sampledata2/ hdfs dfs -mkdir /sampledata3/
Скопируйте данные из локального хранилища в хранилище кластера.
hdfs dfs -copyFromLocal testFile.txt adl://DATALAKEACCOUNT.azuredatalakestore.net/clusters/CLUSTERNAME/sampledata1/ hdfs dfs -copyFromLocal testFile.txt adl:///sampledata2/ hdfs dfs -copyFromLocal testFile.txt /sampledata3/
Перечислите содержимое каталога в хранилище кластера.
hdfs dfs -ls adl://DATALAKEACCOUNT.azuredatalakestore.net/clusters/CLUSTERNAME/sampledata1/ hdfs dfs -ls adl:///sampledata2/ hdfs dfs -ls /sampledata3/
Создание таблицы Hive
Для наглядности показаны три расположения файлов. Для фактического выполнения используйте только одну из записей LOCATION
.
DROP TABLE myTable;
CREATE EXTERNAL TABLE myTable (
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://DATALAKEACCOUNT.azuredatalakestore.net/clusters/CLUSTERNAME/example/data/';
LOCATION 'adl:///example/data/';
LOCATION '/example/data/';
Указание пути к хранилищу из Ambari
Чтобы указать полный путь к настроенному хранилищу по умолчанию, выберите HDFS>Конфигурации и в поле ввода фильтра введите fs.defaultFS
.
Создание кластеров HDInsight с доступом к Data Lake Storage 1-го поколения
По указанным ниже ссылкам вы найдете подробные инструкции по созданию кластеров HDInsight с доступом к Data Lake Storage 1-го поколения.
- Использование портала
- Создание кластеров HDInsight, использующих Azure Data Lake Storage 1-го поколения в качестве хранилища по умолчанию, с помощью PowerShell
- Использование Azure PowerShell для создания кластера HDInsight с Azure Data Lake Storage 1-го поколения (в качестве дополнительного хранилища)
- Создание кластера HDInsight с Data Lake Store с помощью шаблона Azure Resource Manager
Обновление сертификата HDInsight для получения доступа к Data Lake Storage 1-го поколения
Следующий фрагмент кода PowerShell считывает сертификат из локального файла или Azure Key Vault и настраивает его в кластере HDInsight для доступа к Azure Data Lake Storage 1-го поколения. Укажите имена для кластера HDInsight и группы ресурсов, идентификатор подписки, app ID
и локальный путь к сертификату. Когда отобразится соответствующий запрос, введите пароль.
$clusterName = '<clustername>'
$resourceGroupName = '<resourcegroupname>'
$subscriptionId = '01234567-8a6c-43bc-83d3-6b318c6c7305'
$appId = '01234567-e100-4118-8ba6-c25834f4e938'
$addNewCertKeyCredential = $true
$certFilePath = 'C:\localfolder\adls.pfx'
$KeyVaultName = "my-key-vault-name"
$KeyVaultSecretName = "my-key-vault-secret-name"
$certPassword = Read-Host "Enter Certificate Password"
# certSource
# 0 - create self signed cert
# 1 - read cert from file path
# 2 - read cert from key vault
$certSource = 0
Login-AzAccount
Select-AzSubscription -SubscriptionId $subscriptionId
if($certSource -eq 0)
{
Write-Host "Generating new SelfSigned certificate"
$cert = New-SelfSignedCertificate -CertStoreLocation "cert:\CurrentUser\My" -Subject "CN=hdinsightAdlsCert" -KeySpec KeyExchange
$certBytes = $cert.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, $certPassword);
$certString = [System.Convert]::ToBase64String($certBytes)
}
elseif($certSource -eq 1)
{
Write-Host "Reading the cert file from path $certFilePath"
$cert = new-object System.Security.Cryptography.X509Certificates.X509Certificate2($certFilePath, $certPassword)
$certString = [System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes($certFilePath))
}
elseif($certSource -eq 2)
{
Write-Host "Reading the cert file from Azure Key Vault $KeyVaultName"
$cert = (Get-AzureKeyVaultSecret -VaultName $KeyVaultName -Name $KeyVaultSecretName)
$certValue = [System.Convert]::FromBase64String($cert.SecretValueText)
$certObject = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 -ArgumentList $certValue, $null,"Exportable, PersistKeySet"
$certBytes = $certObject.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, $certPassword.SecretValueText);
$certString =[System.Convert]::ToBase64String($certBytes)
}
if($addNewCertKeyCredential)
{
Write-Host "Creating new KeyCredential for the app"
$keyValue = [System.Convert]::ToBase64String($cert.GetRawCertData())
New-AzADAppCredential -ApplicationId $appId -CertValue $keyValue -EndDate $cert.NotAfter -StartDate $cert.NotBefore
Write-Host "Waiting for 7 minutes for the permissions to get propagated"
Start-Sleep -s 420 #7 minutes
}
Write-Host "Updating the certificate on HDInsight cluster..."
Invoke-AzResourceAction `
-ResourceGroupName $resourceGroupName `
-ResourceType 'Microsoft.HDInsight/clusters' `
-ResourceName $clusterName `
-ApiVersion '2015-03-01-preview' `
-Action 'updateclusteridentitycertificate' `
-Parameters @{ ApplicationId = $appId; Certificate = $certString; CertificatePassword = $certPassword.ToString() } `
-Force
Следующие шаги
Из этой статьи вы узнали, как использовать HDFS-совместимую службу Azure Data Lake Storage 1-го поколения с HDInsight. Это хранилище позволяет создавать адаптируемые долгосрочные решения для сбора архивных данных. А также использовать HDInsight для разблокирования информации внутри структурированных и неструктурированных данных.
Дополнительные сведения см. в разделе:
- Краткое руководство по установке кластеров в HDInsight
- Использование Azure PowerShell для создания кластера HDInsight с Azure Data Lake Storage 1-го поколения (в качестве дополнительного хранилища).
- Отправка данных в HDInsight
- Использование подписанных URL-адресов хранилища BLOB-объектов Azure для ограничения доступа к данным с использованием HDInsight