Amazon s3 Flink S3写入失败无法从链中的任何提供程序加载AWS凭据

Amazon s3 Flink S3写入失败无法从链中的任何提供程序加载AWS凭据,amazon-s3,apache-flink,flink-streaming,Amazon S3,Apache Flink,Flink Streaming,当我使用flinks流式API写入S3时: // Set StreamExecutionEnvironment final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // Set checkpoints in ms env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime); // Add sou

当我使用flinks流式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);
我的配置是:

# flink --version
Version: 1.3.1, Commit ID: 1ca6e5b
Hadoop配置目录被添加到flink-conf.yaml中

# cat flink/config/flink-conf.yaml | head -n1
fs.hdfs.hadoopconf: /root/hadoop-config
flink-conf.yaml的其余内容与发行版相同

以下内容已添加到/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>
注意aws-java-sdk-1.7.4.jar是1.7.4,而不是文档中的1.7.2

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>

org.apache.flink
)


我能够使用core-site.xml和awscli中的凭据写入S3 bucket。

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

当S3API无法从以下链接中描述的任何提供程序获取凭据时,就会发生此错误


这里还定义了其他方法来提供凭证:

谢谢Vinay,在
jar xf jar文件
jar文件之后,然后是
find-名称“*.xml”
,我只能找到./core-default.xml,更新此文件并不能解决问题,我是否遗漏了什么?是否应将
core site.xml
放在jar的根目录中或其他位置?这意味着您运行的节点配置不正确。请检查正在运行flink作业的节点上是否存在.aws/credentials文件。如果没有,您必须运行aws s3 configure命令,如图所示。是的,核心站点应该保存在src/main/resources中,因此当jar被创建时,它将转到根目录,运行flink作业的节点存在
/root/.aws/credentials/
,我可以从该节点使用
awscli
来读/写s3。
# 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
    <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>