如何将 Azure Data Lake Gen1 和 Gen2 连接到单个 Spark HD Insight 集群?

How can I attach both Azure Data Lake Gen1 and Gen2 to a single Spark HD Insight cluster?

我想创建一个可以访问 ADLSg1 和 ADLSg2 数据湖的 Azure HDI 集群。支持吗?

这对于 Spark 2.4 (HDI 4.0) 是可行的,但有以下限制:

  1. 集群的主存储必须是Azure Blob
  2. 集群将通过服务主体 + 客户端密钥向 ADLSg1 和 ADLSg2 进行身份验证。服务主体和机密必须手动管理。
  3. 这无法通过 Azure 门户完成。您必须通过 Ambari UI 或通过 ssh 手动更改集群的 core-site.xml 配置。

步骤:

  1. Find your Azure AD tenant ID
  2. Register an application with Azure AD and create a service principal 每个 ADLS 帐户。记下应用程序 ID。
  3. Create a new application secret 对于在步骤 1 中创建的每个 AAD 应用程序。记下生成的客户端密码。
  4. Grant Owner role 到与 ADLSg1 帐户关联的服务主体。
  5. Grant Storage Blob Data Owner role 到与 ADLSg2 帐户关联的服务主体。
  6. 仅将 Azure Blob 用作主要存储来部署 HDI 集群。
  7. 为 HDI 集群打开 Ambari UI
  8. 导航到 HDFS → 配置选项卡 UI → 高级选项卡
  9. 展开“自定义核心站点”部分
  10. 添加以下设置:

对于第 1 代 ADLS:

fs.adl.oauth2.access.token.provider.type = ClientCredential
fs.adl.oauth2.client.id = <ADLSg1 Application ID>
fs.adl.oauth2.credential = <ADLSg1 Client Secret>
fs.adl.oauth2.refresh.url = https://login.microsoftonline.com/<Tenant ID>/oauth2/token

对于第 2 代 ADLS:

fs.azure.account.auth.type.<ADLSg2 storage account name>.dfs.core.windows.net = OAuth
fs.azure.account.oauth.provider.type.<ADLSg2 storage account name>.dfs.core.windows.net = org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider
fs.azure.account.oauth2.client.id.<ADLSg2 storage account name>.dfs.core.windows.net = <ADLSg2 Application ID>
fs.azure.account.oauth2.client.secret.<ADLSg2 storage account name>.dfs.core.windows.net = <ADLSg1 Client Secret>
fs.azure.account.oauth2.client.endpoint.<ADLSg2 storage account name>.dfs.core.windows.net = https://login.microsoftonline.com/<Tenant ID>/oauth2/token
  1. 保存更改
  2. 重启集群中所有受影响的服务(HDFS、YARN 等)

从集群访问文件:

使用完全限定名称。使用这种方法,您可以提供要访问的文件的完整路径。

  • ADLSg1: adl://<data_lake_account>.azuredatalakestore.net/<cluster_root_path>/<file_path>
  • ADLSg2:abfs://<containername>@<accountname>.dfs.core.windows.net/<file.path>/