Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flink 从IDE运行flink时如何设置presto.s3.xxx属性?_Apache Flink - Fatal编程技术网

Apache flink 从IDE运行flink时如何设置presto.s3.xxx属性?

Apache flink 从IDE运行flink时如何设置presto.s3.xxx属性?,apache-flink,Apache Flink,我能够使用/bin/flink run…成功运行保存到S3的flink作业 为此,我必须将flink-s3-fs-presto jar复制到我的$flink_HOME/lib文件夹中,还必须在flink-conf.yaml中配置我的s3连接详细信息: 您需要在Flink中同时配置s3.access-key和s3.secret-key flink-conf.yaml: s3.access-key: your-access-key s3.secret-key: your-secret-key 资料

我能够使用
/bin/flink run…
成功运行保存到S3的flink作业

为此,我必须将flink-s3-fs-presto jar复制到我的
$flink_HOME/lib
文件夹中,还必须在
flink-conf.yaml
中配置我的s3连接详细信息:

您需要在Flink中同时配置s3.access-key和s3.secret-key flink-conf.yaml:

s3.access-key: your-access-key
s3.secret-key: your-secret-key
资料来源:

我还必须设置一个属性
s3.endpoint
,因为我使用的是来自IBMCloud的s3

当我使用
/bin/flink run
运行时,这一切都很好

但是,当我尝试从IDE(IntelliJ)运行作业时,会出现以下错误:

org.apache.flink.runtime.client.JobExecutionException:无法初始化任务“DataSink(TextOutputFormat(s3://xxxx/folder)-UTF-8)”:无法从服务端点加载凭据

我在IDE运行作业中设置了一个环境变量,
FLINK\u CONF\u DIR
指向我的FLINK-CONF.yaml,我可以看到我的配置属性被选中:

11:04:39,487 INFO  org.apache.flink.configuration.GlobalConfiguration - Loading configuration property: s3.access-key, ****
11:04:39,487 INFO  org.apache.flink.configuration.GlobalConfiguration - Loading configuration property: s3.secret-key, ****
11:04:39,487 INFO  org.apache.flink.configuration.GlobalConfiguration - Loading configuration property: s3.endpoint, s3-api.us-geo.objectstorage.softlayer.net
但是,我收到一个错误,表明当我从IDE运行时,这些属性没有传递到presto库:

Caused by: org.apache.flink.fs.s3presto.shaded.com.amazonaws.SdkClientException: Unable to load credentials from service endpoint
此外,为了验证这一理论,如果我在从IDE运行时单步执行代码,我可以看到我的endpoint属性没有被应用:

。。。深入到Hadoop配置中,我可以看到flink配置是一个空映射:

再深入一点,我可以看到
org.apache.flink.core.fs.FileSystem#getunguaredfilesystem()
正在创建一个新的空配置:

        // this "default" initialization makes sure that the FileSystem class works
        // even when not configured with an explicit Flink configuration, like on
        // JobManager or TaskManager setup
        if (FS_FACTORIES.isEmpty()) {
            initialize(new Configuration());
        }
从IDE运行时,如何配置
s3.access key
s3.secret key
s3.endpoint
属性?

创建core-site.xml

<configuration>
    <property>
        <name>fs.s3.impl</name>
        <value>org.apache.hadoop.fs.s3a.S3AFileSystem</value>
    </property>
    <property>
        <name>fs.s3a.access.key</name>
        <value>xxxx</value>
    </property>

    <property>
        <name>fs.s3a.secret.key</name>
        <value>xxxxx</value>
    </property>

</configuration>
创建core-site.xml

<configuration>
    <property>
        <name>fs.s3.impl</name>
        <value>org.apache.hadoop.fs.s3a.S3AFileSystem</value>
    </property>
    <property>
        <name>fs.s3a.access.key</name>
        <value>xxxx</value>
    </property>

    <property>
        <name>fs.s3a.secret.key</name>
        <value>xxxxx</value>
    </property>

</configuration>
就叫

FileSystem.initialize(GlobalConfiguration.loadConfiguration(System.getenv("FLINK_CONF_DIR")));
以前

env.execute()
这将解决问题

请记住,您仍然必须将密钥和访问密钥放入flink-conf.yaml中。

只需调用

FileSystem.initialize(GlobalConfiguration.loadConfiguration(System.getenv("FLINK_CONF_DIR")));
以前

env.execute()
这将解决问题

记住,您仍然必须将密钥和访问密钥放在flink-conf.yaml中