使用 DefaultAWSCredentialsProviderChain 将 Apache Drill 连接到 Amazon S3

Connecting Apache Drill to Amazon S3 using DefaultAWSCredentialsProviderChain

我试图将 apache drill 连接到我的 aws s3,但没有在配置中指定我的访问密钥和密钥,所以我添加了

"fs.s3a.aws.credentials.provider": "com.amazonaws.auth.DefaultAWSCredentialsProviderChain"

在配置中希望它将从我的 PC 中的默认凭证配置文件中获取凭证,并在我部署它时获取 IAM 角色。

当我在配置中指定访问密钥和密钥时,连接工作正常,但在我更改为使用配置后 DefaultAWSCredentialsProviderChain 它没有工作

当我尝试使用 s3 存储时,钻头显示了这个

Error: SYSTEM ERROR: AmazonClientException: Unable to load AWS credentials from any provider in the chain

我可以使用 DefaultAWSCredentialsProviderChainorg.apache.parquet.hadoop.ParquetWriter 写入 s3,并且可以使用 awscli 毫无问题地读取 s3 存储桶

这是我的存储插件配置

{
  "type": "file",
  "connection": "s3a://my-bucket",
  "config": {
    "fs.s3a.endpoint": "s3.REGION.amazonaws.com",
    "fs.s3a.aws.credentials.provider": "com.amazonaws.auth.DefaultAWSCredentialsProviderChain"
  },
  "workspaces": {
    "tmp": {
      "location": "/tmp",
      "writable": true,
      "defaultInputFormat": null,
      "allowAccessOutsideWorkspace": false
    },
    "root": {
      "location": "/",
      "writable": false,
      "defaultInputFormat": null,
      "allowAccessOutsideWorkspace": false
    }
  },
  "formats": {
    "parquet": {
      "type": "parquet"
    }
  },
  "enabled": true
}

Apache Drill 不支持 ~/.aws/credentials,但支持 Hadoop CredentialProvider API. To be able to use it, you need to create an external credentials provider 并在 Drill 的 "config" 部分设置 "hadoop.security.credential.provider.path" 属性(指向提供商) S3 存储插件。

或者,您可以将您的凭据存储在 Drill 的 core-site.xml 中。