使用分布式缓存时,Flink 1.9无法运行程序,为什么?

问题:

我在EMR上运行了纱线长时间运行的会话后,例如:flink-yarn-session -d(带有其他内存配置)

应用程序处于运行状态,一切正常。 然后当我想运行flink程序例如flink运行-d flink-app.jar --someparams 我的flink应用似乎无法卡住,因为它从不发送该程序在群集上执行。

即使在分离模式下,我也有Starting execution of program处于空闲状态。

(长时间运行的会话处于运行状态,并且确实分配了资源)

那么什么时候开始发生呢?

我想在我的flink应用程序中集成一些ML模型,并希望通过分布式缓存来做到这一点,所以我这样实现了它: env.registerCachedFile(GENERAL_MODEL_PATH,"general",true);,其中通过(尝试s3(s3://mybucket/general.model)加载了GENERAL_MODEL_PATH,但我确保ec2实例具有IAM角色来访问此存储区,并且我还尝试了先将文件加载到hdfs,然后通过引用来加载文件hdfs://general.model

  • 我通过控制台hdfs dfs -put general.model(已检查文件在那里)将文件加载到hdfs

然后我尝试通过运行时上下文在键控流程函数中加载该模型,如下所示:

File fileGeneral = getRuntimeContext().getDistributedCache().getFile("general");

对我来说奇怪的是,当我运行完全相同的程序但跳过env.registerCachedFile程序被接受并开始在集群上执行时。否则,它永远不会发送执行? (或发生其他事情?)

我认为可能需要一些时间来本地化所有资源并将其分配到工作程序节点上,但这从未发生。一段时间后,命令失败并显示以下输出:

 The program finished with the following exception:

org.apache.flink.client.program.PrograminvocationException: Could not submit job (JobID: f1592fd2fea2a2457df1a5e1d667a168)
    at org.apache.flink.client.program.rest.RestClusterClient.submitJob(RestClusterClient.java:244)
    at org.apache.flink.client.program.ClusterClient.run(ClusterClient.java:338)
    at org.apache.flink.client.program.DetachedEnvironment.finalizeExecute(DetachedEnvironment.java:77)
    at org.apache.flink.client.program.ClusterClient.run(ClusterClient.java:280)
    at org.apache.flink.client.cli.CliFrontend.executeProgram(CliFrontend.java:746)
    at org.apache.flink.client.cli.CliFrontend.runProgram(CliFrontend.java:273)
    at org.apache.flink.client.cli.CliFrontend.run(CliFrontend.java:205)
    at org.apache.flink.client.cli.CliFrontend.parseParameters(CliFrontend.java:1010)
    at org.apache.flink.client.cli.CliFrontend.lambda$main$10(CliFrontend.java:1083)
    at java.security.accessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:422)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1844)
    at org.apache.flink.runtime.security.HadoopSecurityContext.runSecured(HadoopSecurityContext.java:41)
    at org.apache.flink.client.cli.CliFrontend.main(CliFrontend.java:1083)
Caused by: org.apache.flink.runtime.client.JobSubmissionException: Failed to submit JobGraph.

我不知道为什么它不能提交工作,以及如何在日志中进行调查?

旁注: 在调试模式下查看应用程序日志,我从没有像现在这样正常地将flink-app发送到执行该flink:

2019-11-21 14:31:28,957 DEBUG org.apache.flink.runtime.blob.BlobClient                      - PUT BLOB stream to /127.0.0.1:45922.
2019-11-21 14:31:28,959 DEBUG org.apache.flink.runtime.blob.BlobServerConnection            - Received PUT request for BLOB of job a10c26441b00b0152e380438c4e788d8 with from /127.0.0.1.

但是心跳正在发生。

p.s。我也尝试添加:

yarn.nodemanager.localizer.cache.target-size-mb参数,但这无济于事。

知道我在做什么错或为什么会这样吗?

  

p.p.s。如果我在流为的关键过程函数中加载ML模型   以user_id为键,这是否会为每个用户加载模型?   也许这也是一个问题吗?

因此在open方法中没有问题,因为它为每个并行实例调用一次。

编辑

Flink 1.8.1产生相同的结果。

kissbabyfish 回答:使用分布式缓存时,Flink 1.9无法运行程序,为什么?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3056834.html

大家都在问