如何将Azure数据湖Gen1和Gen2连接到单个Spark HD Insight集群?



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

这在Spark 2.4 (HDI 4.0)有限制的情况下是可能的:

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

步骤:

  1. 查找Azure AD租户ID
  2. 在Azure AD中注册应用程序,并为每个ADLS帐户创建服务主体。请注意申请ID。
  3. 为步骤1中创建的每个AAD应用程序创建一个新的应用程序秘密。注意生成的客户端秘密。
  4. 将Owner角色授予与ADLSg1帐户关联的服务主体
  5. 将存储Blob数据所有者角色授予与ADLSg2帐户关联的服务主体。
  6. 部署HDI集群,仅将Azure Blob作为主存储。
  7. 打开HDI集群的Ambari UI
  8. 导航到HDFS→配置选项卡UI→高级选项卡
  9. 展开"自定义核心站点"部分
  10. 添加以下设置:

For ADLS Gen 1:

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

对于ADLS Gen 2:

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>/

相关内容

  • 没有找到相关文章

最新更新