我正在尝试为我的Flink程序部署生产群集。我正在使用安装了Flink 1.3.2的标准hadoop-core EMR集群,使用YARN来运行它。
我正在尝试配置我的RocksDB以将我的检查点写入S3存储桶。我正在尝试浏览这些文档:https://ci.apache.org/projects/flink/flink-docs-release-1.3/setup/aws.html#set-s3-filesystem。问题似乎是让依赖项正常工作。尝试运行程序时收到此错误:
java.lang.NoSuchMethodError: org.apache.hadoop.conf.Configuration.addResource(Lorg/apache/hadoop/conf/Configuration;)V
at com.amazon.ws.emr.hadoop.fs.EmrFileSystem.initialize(EmrFileSystem.java:93)
at org.apache.flink.runtime.fs.hdfs.HadoopFileSystem.initialize(HadoopFileSystem.java:328)
at org.apache.flink.core.fs.FileSystem.getUnguardedFileSystem(FileSystem.java:350)
at org.apache.flink.core.fs.FileSystem.get(FileSystem.java:389)
at org.apache.flink.core.fs.Path.getFileSystem(Path.java:293)
at org.apache.flink.runtime.state.filesystem.FsCheckpointStreamFactory.<init>(FsCheckpointStreamFactory.java:99)
at org.apache.flink.runtime.state.filesystem.FsStateBackend.createStreamFactory(FsStateBackend.java:282)
at org.apache.flink.contrib.streaming.state.RocksDBStateBackend.createStreamFactory(RocksDBStateBackend.java:273
我已尝试离开并调整core-site.xml并保持原样。我已经尝试将HADOOP_CLASSPATH
设置为/usr/lib/hadoop/share
包含(我假设的)大多数上述指南中描述的JAR。我尝试下载hadoop 2.7.2二进制文件,并将它们复制到flink / libs目录中。所有导致相同的错误。
有没有人成功让Flink能够在EMR上写入S3?
编辑:我的群集设置
AWS Portal:
1) EMR -> Create Cluster
2) Advanced Options
3) Release = emr-5.8.0
4) Only select Hadoop 2.7.3
5) Next -> Next -> Next -> Create Cluster ( I do fill out names/keys/etc)
群集启动后,我会进入主服务器并执行以下操作:
1 wget http://apache.claz.org/flink/flink-1.3.2/flink-1.3.2-bin-hadoop27-scala_2.11.tgz
2 tar -xzf flink-1.3.2-bin-hadoop27-scala_2.11.tgz
3 cd flink-1.3.2
4 ./bin/yarn-session.sh -n 2 -tm 5120 -s 4 -d
5 Change conf/flink-conf.yaml
6 ./bin/flink run -m yarn-cluster -yn 1 ~/flink-consumer.jar
我的conf / flink-conf.yaml我添加了以下字段:
state.backend: rocksdb
state.backend.fs.checkpointdir: s3:/bucket/location
state.checkpoints.dir: s3:/bucket/location
我的程序的检查点设置:
env.enableCheckpointing(getCheckpointRate,CheckpointingMode.EXACTLY_ONCE)
env.getCheckpointConfig.enableExternalizedCheckpoints(ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION)
env.getCheckpointConfig.setMinPauseBetweenCheckpoints(getCheckpointMinPause)
env.getCheckpointConfig.setCheckpointTimeout(getCheckpointTimeout)
env.getCheckpointConfig.setMaxConcurrentCheckpoints(1)
env.setStateBackend(new RocksDBStateBackend("s3://bucket/location", true))
如果您认为我缺少任何步骤,请告诉我
答案 0 :(得分:1)
我假设你在EMR纱线群集上自己安装了Flink 1.3.2
,因为亚马逊尚未提供Flink 1.3.2
,对吗?
鉴于此,似乎您有依赖冲突。方法org.apache.hadoop.conf.Configuration.addResource(Lorg/apache/hadoop/conf/Configuration)
仅在Hadoop 2.4.0
中引入。因此,我假设您已部署了使用Hadoop 1.3.2
构建的Flink 2.3.0
版本。请部署使用在EMR上运行的Hadoop版本构建的Flink版本。这很可能会解决所有依赖冲突。
将Hadoop依赖项放入lib
文件夹似乎无法可靠地工作,因为flink-shaded-hadoop2-uber.jar
似乎在类路径中具有优先权。