azure - Hadoop 客户端 Azure Data Lake Gen2 token 访问 - AADToken : HTTP connection failed for getting token from AzureAD. Http 响应:400 错误请求

标签 azure hadoop azure-data-lake

尝试通过控制台中的 Hadoop 客户端使用 token 连接到 Azure Data Lake Storage Gen2 并收到错误

ls: AADToken: HTTP connection failed for getting token from AzureAD. Http response: 400 Bad Request

如果我将 token 放入“”,错误会有所不同

id_token:<TOKEN VALUE>: Unknown command
Usage: hadoop fs [generic options]

做了什么:

  1. 使用 https://learn.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-quickstart-create-account 创建存储帐户

  2. 使用 https://learn.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal 创建了 Azure AD 应用程序

  3. 从第二步开始就已授予管理员对申请的同意 - /image/8LtSb.png

  4. 还向名称为步骤 2 中的应用的企业应用授予管理员同意 /image/u8LkW.png

第 3 步和第 4 步已按照此处所述完成 - https://learn.microsoft.com/en-us/azure/active-directory/manage-apps/configure-user-consent#grant-admin-consent-when-registering-an-app-in-the-azure-portal

  • 然后我生成了一个授权代码
  • https://login.microsoftonline.com/<TENANT ID>/oauth2/authorize?client_id=<CLIENT ID>&response_type=code&redirect_uri=https%3A%2F%2Flocalhost%2Fmyapp%2F&response_mode=query&resource=https://datalake.azure.net/&state=12345
    
  • 并获得了 token
  • curl -X POST https://login.microsoftonline.com/<TENANT ID>/oauth2/token \
     -F redirect_uri=https://localhost/myapp/ \
     -F grant_type=authorization_code \
     -F resource=https://datalake.azure.net \
     -F client_id=<CLIENT ID> \
     -F client_secret=<CLIENT SECRET> \
     -F code=OAQABAAIAAAAP0wLlqdLVToOpA4kwzSnxLhHJrARX8557... (Authorization code)
    

    根据Apache documentation我创建了一个控制台命令

    hadoop fs -Dfs.azure.ssl.channel.mode=Default_JSSE
    -Dfs.azure.account.auth.type=OAuth
    -Dfs.azure.account.oauth.provider.type=org.apache.hadoop.fs.azurebfs.oauth2.RefreshTokenBasedTokenProvider
    -Dfs.azure.account.oauth2.client.id=<CLIENT ID>
    -Dfs.azure.account.oauth2.refresh.token=<TOKEN>
    -ls abfss://<CONTAINER NAME>@<STORAGE ACCOUNT>.dfs.core.windows.net/
    

    因此下面的命令应该显示容器中的文件夹和文件的列表。 Azure 中的命令或容器配置有问题吗?请指教。

    最佳答案

    您使用的是社区版的databricks吗?我遇到了同样的问题,因为我的空间不足或超出了 dbfs 上的文件数量,所以我想我只需在 azure 上安装我自己的存储帐户即可,并遇到了与您相同的问题。

    我启动了自己的 databricks 实例,并能够成功挂载自己的存储,但在社区版上运行相同的代码会导致错误。

    关于azure - Hadoop 客户端 Azure Data Lake Gen2 token 访问 - AADToken : HTTP connection failed for getting token from AzureAD. Http 响应:400 错误请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57788504/

    相关文章:

    hadoop - 如何根据给定格式在Pig中合并两行?

    hadoop - 在 hdfs 文件上运行 mapreduce 并将 reducer 结果存储在 hbase 表中的示例

    hadoop - Spark 1.6.2 & yarn : diagnostics: Application failed 2 times due to AM Container for exited with exitCode: -1

    python - databricks dbfs 是否支持文件元数据,例如文件/文件夹创建日期或修改日期

    java - 如何压缩Azure数据湖存储上的文件

    azure - Service Fabric 无状态单例服务失败时是否会重新启动?

    Azure 媒体服务/播放器自动启动直播事件

    azure - Azure 上的列存储索引有何优势?

    Azure 终结点 'resourceTargetId' 的 'vm1-TF' 属性无效或丢失

    hadoop - 将数据从 Hadoop(本地)加载到 Azure Data Lake 的不同方法