在Flink中以编程方式配置S3选项

4

显然,Flink 1.14.0在以编程方式设置S3选项时无法正确翻译。我正在创建一个本地环境,以连接到本地的MinIO实例:

  val flinkConf = new Configuration()
  flinkConf.setString("s3.endpoint", "http://127.0.0.1:9000")
  flinkConf.setString("s3.aws.credentials.provider", "org.apache.hadoop.fs.s3a.AnonymousAWSCredentialsProvider")

  val env = StreamExecutionEnvironment.createLocalEnvironmentWithWebUI(flinkConf)

如果您使用的是StreamingFileSink,并且遇到了以下错误信息:Caused by: org.apache.hadoop.fs.s3a.auth.NoAuthWithAWSException: No AWS Credentials provided by SimpleAWSCredentialsProvider EnvironmentVariableCredentialsProvider InstanceProfileCredentialsProvider : com.amazonaws.SdkClientException: Failed to connect to service endpoint: 那么这意味着Hadoop尝试枚举所有凭证提供程序而不是使用配置中设置的凭证提供程序。请检查您的配置是否正确。

1个回答

6

我也尝试了很长时间才搞明白这个问题。我找不到以编程方式设置它的方法,但最终在我的Flink Java项目根目录中的src/main/resources/core-site.xml中添加以下内容起作用:

<?xml version="1.0"?>
<configuration>
    <property>
        <name>fs.s3a.aws.credentials.provider</name>
        <value>com.amazonaws.auth.profile.ProfileCredentialsProvider</value>
    </property>
</configuration>

那么我可以使用 AWS_PROFILE 环境变量来选择存储的凭据。 这是用于 Flink 和 flink-s3-fs-hadoop 1.13.2 的。


感谢您发布这个。它救了我的一天。 - lucy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接