Apache flink 可以将Riak CS与Apache Flink一起使用吗?

Apache flink 可以将Riak CS与Apache Flink一起使用吗?,apache-flink,riak-cs,Apache Flink,Riak Cs,我想配置文件系统状态后端和zookeeper恢复模式: state.backend: filesystem state.backend.fs.checkpointdir: ??? recovery.mode: zookeeper recovery.zookeeper.storageDir: ??? 如您所见,我应该指定checkpointdir和storageDir参数,但我没有任何Apache Flink支持的文件系统(如HDFS或Amazon S3)。但我已经安装了Riak CS集群(似

我想配置
文件系统
状态后端和
zookeeper
恢复模式:

state.backend: filesystem
state.backend.fs.checkpointdir: ???

recovery.mode: zookeeper
recovery.zookeeper.storageDir: ???
如您所见,我应该指定
checkpointdir
storageDir
参数,但我没有任何Apache Flink支持的文件系统(如HDFS或Amazon S3)。但我已经安装了Riak CS集群(似乎是这样)


那么,我可以将Riak CS与Apache Flink一起使用吗?如果可能:如何配置Apache Flink与Riak CS一起使用?

回答:如何加入Apache Flink与Riak CS?

Riak CS具有S3(版本2)兼容接口。因此,可以使用Hadoop中的S3文件系统适配器来处理Riak CS

我不知道为什么,但ApacheFlink在胖jar中只有部分Hadoop文件系统适配器(
lib/Flink-dist_2.11-1.0.1.jar
),也就是说,它有FTP文件系统(
org.Apache.Hadoop.fs.FTP.FTPFileSystem
),但没有S3文件系统(即
org.Apache.Hadoop.fs.s3a.S3AFileSystem
)。因此,有两种方法可以解决这个问题:

  • 使用Hadoop安装中的这些适配器。我没有尝试过这个,但似乎您应该只配置HADOOP_类路径或HADOOP_HOME evn变量
  • monky修补Apache Flink并将所需JAR下载到
    /lib
    目录
所以,我选择第二种方式,因为我不想在我的环境中配置Hadoop。您可以从Hadoop dist或internet复制JAR:

curl http://central.maven.org/maven2/org/apache/hadoop/hadoop-aws/2.7.2/hadoop-aws-2.7.2.jar -o /flink/lib/hadoop-aws-2.7.2.jar
curl http://central.maven.org/maven2/com/amazonaws/aws-java-sdk/1.7.4/aws-java-sdk-1.7.4.jar -o /flink/lib/aws-java-sdk-1.7.4.jar
curl http://central.maven.org/maven2/org/apache/httpcomponents/httpcore/4.2.5/httpcore-4.2.5.jar -o /flink/lib/httpcore-4.2.5.jar
curl http://central.maven.org/maven2/org/apache/httpcomponents/httpclient/4.2.5/httpclient-4.2.5.jar -o /flink/lib/httpclient-4.2.5.jar
正如您所看到的,我使用的是旧版本,因为这种版本在Hadoop 2.7.2中使用,我使用的Flink与此版本的Hadoop兼容

仅供参考:如果您在自己的流中使用这些JAR的最新版本,这种黑客可能会导致问题。为了避免与不同版本相关的问题,当您使用flow构建胖jar时,可以重新定位包,使用类似(我使用的是Gradle):

然后您应该在
flink-conf.yaml
中指定
core site.xml
的路径,因为Hadoop兼容的文件系统使用此配置加载设置:

...
fs.hdfs.hadoopconf: /flink/conf
...
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <property>
        <name>fs.s3a.impl</name>
        <value>org.apache.hadoop.fs.s3a.S3AFileSystem</value> // because S3A better then other: https://wiki.apache.org/hadoop/AmazonS3
    </property>
    <property>
        <name>fs.s3a.endpoint</name>
        <value>my-riak-cs.stage.local</value>  // this is my Riak CS host
    </property>
    <property>
        <name>fs.s3a.connection.ssl.enabled</name> // my Riak CS in staging doesn't support SSL
        <value>false</value>
    </property>
    <property>
        <name>fs.s3a.access.key</name>
        <value>????</value> // this is my access key for Riak CS
    </property>
    <property>
        <name>fs.s3a.secret.key</name>
        <value>????</value> // this is my secret key for Riak CS
    </property>
</configuration>
正如您所看到的,我只是将它放在
/conf
目录中。它具有以下设置:

...
fs.hdfs.hadoopconf: /flink/conf
...
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <property>
        <name>fs.s3a.impl</name>
        <value>org.apache.hadoop.fs.s3a.S3AFileSystem</value> // because S3A better then other: https://wiki.apache.org/hadoop/AmazonS3
    </property>
    <property>
        <name>fs.s3a.endpoint</name>
        <value>my-riak-cs.stage.local</value>  // this is my Riak CS host
    </property>
    <property>
        <name>fs.s3a.connection.ssl.enabled</name> // my Riak CS in staging doesn't support SSL
        <value>false</value>
    </property>
    <property>
        <name>fs.s3a.access.key</name>
        <value>????</value> // this is my access key for Riak CS
    </property>
    <property>
        <name>fs.s3a.secret.key</name>
        <value>????</value> // this is my secret key for Riak CS
    </property>
</configuration>
并在Riak CS中创建桶。我正在使用
s3cmd
(安装在我的OS X开发环境中的
brew
):

仅供参考:在使用
s3cmd
之前,您应该使用
s3cmd--configure
进行配置,然后修复
~/.s3cmd
文件中的一些设置:

signature_v2 = True // because Riak CS using S3 V2 interface
use_https = False // if your don't use SSL
access_key = ???
secret_key = ???
host_base = my-riak-cs.stage.local // your Riak CS host
host_bucket = %(bucket).my-riak-cs.stage.local // format of bucket used by Riak CS

因此,对于Riak CS中独立HA Apache Flink群集的保存/恢复状态,您应该配置这些内容。

回答:如何加入Apache Flink和Riak CS?

Riak CS具有S3(版本2)兼容接口。因此,可以使用Hadoop中的S3文件系统适配器来处理Riak CS

我不知道为什么,但ApacheFlink在胖jar中只有部分Hadoop文件系统适配器(
lib/Flink-dist_2.11-1.0.1.jar
),也就是说,它有FTP文件系统(
org.Apache.Hadoop.fs.FTP.FTPFileSystem
),但没有S3文件系统(即
org.Apache.Hadoop.fs.s3a.S3AFileSystem
)。因此,有两种方法可以解决这个问题:

  • 使用Hadoop安装中的这些适配器。我没有尝试过这个,但似乎您应该只配置HADOOP_类路径或HADOOP_HOME evn变量
  • monky修补Apache Flink并将所需JAR下载到
    /lib
    目录
所以,我选择第二种方式,因为我不想在我的环境中配置Hadoop。您可以从Hadoop dist或internet复制JAR:

curl http://central.maven.org/maven2/org/apache/hadoop/hadoop-aws/2.7.2/hadoop-aws-2.7.2.jar -o /flink/lib/hadoop-aws-2.7.2.jar
curl http://central.maven.org/maven2/com/amazonaws/aws-java-sdk/1.7.4/aws-java-sdk-1.7.4.jar -o /flink/lib/aws-java-sdk-1.7.4.jar
curl http://central.maven.org/maven2/org/apache/httpcomponents/httpcore/4.2.5/httpcore-4.2.5.jar -o /flink/lib/httpcore-4.2.5.jar
curl http://central.maven.org/maven2/org/apache/httpcomponents/httpclient/4.2.5/httpclient-4.2.5.jar -o /flink/lib/httpclient-4.2.5.jar
正如您所看到的,我使用的是旧版本,因为这种版本在Hadoop 2.7.2中使用,我使用的Flink与此版本的Hadoop兼容

仅供参考:如果您在自己的流中使用这些JAR的最新版本,这种黑客可能会导致问题。为了避免与不同版本相关的问题,当您使用flow构建胖jar时,可以重新定位包,使用类似(我使用的是Gradle):

然后您应该在
flink-conf.yaml
中指定
core site.xml
的路径,因为Hadoop兼容的文件系统使用此配置加载设置:

...
fs.hdfs.hadoopconf: /flink/conf
...
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <property>
        <name>fs.s3a.impl</name>
        <value>org.apache.hadoop.fs.s3a.S3AFileSystem</value> // because S3A better then other: https://wiki.apache.org/hadoop/AmazonS3
    </property>
    <property>
        <name>fs.s3a.endpoint</name>
        <value>my-riak-cs.stage.local</value>  // this is my Riak CS host
    </property>
    <property>
        <name>fs.s3a.connection.ssl.enabled</name> // my Riak CS in staging doesn't support SSL
        <value>false</value>
    </property>
    <property>
        <name>fs.s3a.access.key</name>
        <value>????</value> // this is my access key for Riak CS
    </property>
    <property>
        <name>fs.s3a.secret.key</name>
        <value>????</value> // this is my secret key for Riak CS
    </property>
</configuration>
正如您所看到的,我只是将它放在
/conf
目录中。它具有以下设置:

...
fs.hdfs.hadoopconf: /flink/conf
...
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <property>
        <name>fs.s3a.impl</name>
        <value>org.apache.hadoop.fs.s3a.S3AFileSystem</value> // because S3A better then other: https://wiki.apache.org/hadoop/AmazonS3
    </property>
    <property>
        <name>fs.s3a.endpoint</name>
        <value>my-riak-cs.stage.local</value>  // this is my Riak CS host
    </property>
    <property>
        <name>fs.s3a.connection.ssl.enabled</name> // my Riak CS in staging doesn't support SSL
        <value>false</value>
    </property>
    <property>
        <name>fs.s3a.access.key</name>
        <value>????</value> // this is my access key for Riak CS
    </property>
    <property>
        <name>fs.s3a.secret.key</name>
        <value>????</value> // this is my secret key for Riak CS
    </property>
</configuration>
并在Riak CS中创建桶。我正在使用
s3cmd
(安装在我的OS X开发环境中的
brew
):

仅供参考:在使用
s3cmd
之前,您应该使用
s3cmd--configure
进行配置,然后修复
~/.s3cmd
文件中的一些设置:

signature_v2 = True // because Riak CS using S3 V2 interface
use_https = False // if your don't use SSL
access_key = ???
secret_key = ???
host_base = my-riak-cs.stage.local // your Riak CS host
host_bucket = %(bucket).my-riak-cs.stage.local // format of bucket used by Riak CS
所以,对于Riak CS中独立HA Apache Flink集群的保存/恢复状态,您应该配置这些