ApacheFlink和pureconfig—在作业启动时传递java属性

ttp71kqs  于 2021-06-21  发布在  Flink
关注(0)|答案(1)|浏览(209)

我想将pureconfig与apache flink一起使用。
如何在启动作业时传递其他java属性?
我试着通过: -yD env.java.opts="-Dconfig.file='config/jobs/twitter-analysis.conf'" 但不被接受:
https://github.com/geoheil/streaming-reference/blob/5-basic-flink-setup/makefile#l21

flink run --class com.github.geoheil.streamingreference.tweets.TweetsAnalysis \
      "usecases/tweets/build/libs/tweets_${SCALA_VERSION}-${VERSION}-all.jar"

-yd env.java.opts=“-dconfig.file='config/jobs/twitter analysis.conf'”
而主类在尝试从配置文件示例化配置时失败。
请注意,完整的参考资料可在https://github.com/geoheil/streaming-reference. 您可以通过以下方式再现上述错误:

git clone git@github.com:geoHeil/streaming-reference.git
cd streaming-reference
git checkout 5-basic-flink-setup
make run-local-Tweets

应该看到以下例外情况:

ConfigurationException: Failed to start. There is a problem with the configuration: ConfigReaderFailures(ConvertFailure(KeyNotFound(foo,Set()),None,),List())

在spark中,此属性称为: extraJavaOptions .

编辑

i、 例如,我尝试使用flink的方法:如何将额外的jvm选项传递给taskmanager和jobmanager,但到目前为止,它对flink的当前版本(1.10.1)不起作用
这个属性相当于 spark.driver.extraJavaOptions 在Apache星火。我相信,这需要交给工作经理。
如果我看了文件 -yD ,只对Yarn有效。但我也需要一些在当地也能起作用的东西。
其他相关文章:
http://apache-flink-user-mailing-list-archive.2336050.n4.nabble.com/how-can-i-pass-multiple-java-options-in-standalone-mode-td29354.html

bqujaahr

bqujaahr1#

从邮件列表中复制答案。
如果您为多个作业重用集群,则它们需要共享 JVM_ARGS 因为这是同样的过程[1] 在spark上,每个阶段都会产生新的进程。
但是,当前的建议是每个作业/应用程序只使用一个临时集群(这更接近spark的工作方式)。因此,如果您使用yarn,每个作业/应用程序都会生成一个新的集群,其大小正好适合它。然后,您可以提供新的参数提交新的Yarn与

flink run -m yarn-cluster -yD env.java.opts="-Dconfig.file='config/jobs/twitter-analysis.conf'" -class com.github.geoheil.streamingreference.tweets.TweetsAnalysis 
"usecases/tweets/build/libs/tweets_${SCALA_VERSION}-${VERSION}-all.jar"

但是,请确保路径可以从您的yarn集群中访问,因为驱动程序可能是在集群上执行的(不是100%确定)。
若要将文件添加到部署,请使用

-yt,--yarnship <arg>                 Ship files in the specified directory
                                      (t for transfer)

如果您想在共享集群上进行每作业级别的配置,我建议您使用普通参数并手动初始化pureconfig(还没有使用它,所以不确定如何使用)。然后,您可能会如下调用您的程序。

flink run -class com.github.geoheil.streamingreference.tweets.TweetsAnalysis "usecases/tweets/build/libs/tweets_${SCALA_VERSION}-${VERSION}-all.jar" config.file='config/jobs/twitter-analysis.conf'

对于本地执行,我在配置它时也遇到了一些问题(用您的代码进行了尝试)。问题是,当您的代码直接在cli中执行时,我们以前尝试的所有参数都只传递给新生成的进程。

FLINK_ENV_JAVA_OPTS=-Dconfig.file="`pwd`/config/jobs/twitter-analysis.conf" flink run -class com.github.geoheil.streamingreference.tweets.TweetsAnalysis     "usecases/tweets/build/libs/tweets_${SCALA_VERSION}-${VERSION}-all.jar"
``` `FLINK_ENV_JAVA_OPTS` 通常使用env.java.opts从flink-conf.yaml解析,但不尊重 `-Denv.java.opts` . 我不确定这是不是故意的。
如果你能把 `env.java.opts` 在flink-conf.yaml中,它很可能同时适用于yarn和local。与 `FLINK_CONF_DIR` 您可以为每个作业设置不同的conf dir。或者,也可以同时指定两者 `FLINK_ENV_JAVA_OPTS` 以及 `-yD` 注入属性。

相关问题