繁体   English   中英

Flink S3 写入失败无法从链中的任何提供商加载 AWS 凭证

[英]Flink S3 Write Fails Unable to load AWS credentials from any provider in the chains

当我使用 flinks streaming API 写入 S3 时:

// Set StreamExecutionEnvironment
final StreamExecutionEnvironment env = 
StreamExecutionEnvironment.getExecutionEnvironment();

// Set checkpoints in ms
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);

// Add source (input stream)
DataStream<String> dataStream = StreamUtil.getDataStream(env, params);

// Sink to S3 Bucket
dataStream.writeAsText("s3a://test-flink/test.txt").setParallelism(1);

我收到以下错误:

Unable to load AWS credentials from any provider in the chain

我的配置是:

# flink --version
Version: 1.3.1, Commit ID: 1ca6e5b

flink-conf.yaml 添加了 Hadoop config 目录

# cat flink/config/flink-conf.yaml | head -n1
fs.hdfs.hadoopconf: /root/hadoop-config

flink-conf.yaml 内容中的 rest 与 release 版本一致。

以下添加到/root/hadoop-config/core-site.xml

# cat  /root/hadoop-config/core-site.xml
<configuration>
<property>
    <name>fs.s3a.impl</name>
    <value>org.apache.hadoop.fs.s3a.S3AFileSystem</value>
</property>

<property>
    <name>fs.s3a.buffer.dir</name>
    <value>/tmp</value>
</property>

<property>
    <name>fs.s3a.access.key</name>
    <value>MY_ACCESS_KEY</value>
</property>

<property>
    <name>fs.s3a.secret.key</name>
    <value>MY_SECRET_KEY</value>
</property>
</configuration>

JAR的AWS-JAVA-SDK-1.7.4.jar,HADOOP-AWS-2.7.4.jar,HTTPCLIENT-4.2.5.8820287890101088,HTTPCORE- 4.2.5.882878888888888888888.8888.88788.1088.1088; /hadoop/common/hadoop-2.7.4/hadoop-2.7.4.tar.gz

# ls flink/lib/
aws-java-sdk-1.7.4.jar
flink-dist_2.11-1.3.1.jar
flink-python_2.11-1.3.1.jar
flink-shaded-hadoop2-uber-1.3.1.jar
hadoop-aws-2.7.4.jar
httpclient-4.2.5.jar
httpcore-4.2.5.jar
log4j-1.2.17.jar
slf4j-log4j12-1.7.7.jar

请注意 aws-java-sdk-1.7.4.jar 是 1.7.4,而不是此处文档中的 1.7.2

pom.xml 具有以下构建依赖项。

    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-connector-filesystem_2.10</artifactId>
        <version>1.3.1</version>
    </dependency>

    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-aws</artifactId>
        <version>2.7.2</version>
    </dependency>

我的参考是( https://ci.apache.org/projects/flink/flink-docs-release-1.3/setup/aws.html#set-s3-filesystem

我可以使用带有 awscli 的 core-site.xml 中的凭据写入 S3 存储桶。

我使用 DataStream API 写入 S3,在我的例子中,core-site.xml 实际上存在于具有相同配置的 jar 中。 你能试试这个方法吗?

当 S3 API 无法从以下链接中所述的任何提供程序获取凭据时发生错误

这里定义了其他方法来提供凭证: http://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html

使用DefaultAWSCredentialsProviderChain ,因为它可以在本地和 AWS EMR / EC2 / ECS 上运行。

它不仅会查找您的默认凭证文件 ( ~/.aws/credentials ),还会查看常见的环境变量、java 系统属性和其他常见来源。 请在此处查看完整列表和精确查找顺序

如果有帮助,这里是src/main/resources/core-site.xml的全部内容:

<configuration>
  <property>
    <name>fs.s3.impl</name>
    <value>org.apache.hadoop.fs.s3a.S3AFileSystem</value>
  </property>
  <property>
    <name>fs.s3a.aws.credentials.provider</name>
    <value>com.amazonaws.auth.DefaultAWSCredentialsProviderChain</value>
  </property>
  <property>
    <name>fs.s3a.buffer.dir</name>
    <value>/tmp</value>
  </property>
</configuration>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM