Apache flink 当我使用分布式缓存时,Flink 1.9不会运行程序,为什么?

Apache flink 当我使用分布式缓存时,Flink 1.9不会运行程序,为什么?,apache-flink,yarn,amazon-emr,flink-streaming,Apache Flink,Yarn,Amazon Emr,Flink Streaming,问题: 在我在EMR上运行Thread长时间运行会话后,例如:flink Thread session-d和其他内存配置 应用程序处于运行状态,一切正常。 然后当我想运行flink程序时,例如flink run-d flink-app.jar-someparams 我的flink应用程序可能会被卡住,因为它从未将此程序发送到集群上执行 即使在分离模式下,程序的开始执行也处于空闲状态 长时间运行的会话处于运行状态,它确实分配了资源 那么这是什么时候开始的呢 我希望在我的flink应用程序中集成一些

问题:

在我在EMR上运行Thread长时间运行会话后,例如:flink Thread session-d和其他内存配置

应用程序处于运行状态,一切正常。 然后当我想运行flink程序时,例如flink run-d flink-app.jar-someparams 我的flink应用程序可能会被卡住,因为它从未将此程序发送到集群上执行

即使在分离模式下,程序的开始执行也处于空闲状态

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

那么这是什么时候开始的呢

我希望在我的flink应用程序中集成一些ML模型,并希望通过分布式缓存来实现这一点,因此我将其实现如下: env.registerCachedFlageneral_MODEL_PATH,常规,true;其中,GENERAL_MODEL_PATH通过s3://mybucket/GENERAL.MODEL加载,但我确保ec2实例具有IAM角色来访问此bucket,并且我还尝试先将文件加载到hdfs,然后通过引用加载文件hdfs://general.model

我通过控制台将文件加载到hdfs:hdfs dfs-put general.model checked文件存在吗 然后,我尝试通过运行时上下文在键控流程函数中加载该模型,如下所示:

文件fileGeneral=getRuntimeContext.getDistributedCache.getFilegeneral

奇怪的是,当我运行完全相同的程序,但skip 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将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、 我还试图补充:

Thread.nodemanager.localizer.cache.target-size-mb参数,但这没有帮助

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

p、 另外,如果我在关键流程函数中加载ML模型,其中流是 由用户id键入,这会为每个用户生成模型加载吗? 也许这也是个问题

所以,在open方法中不会出现问题,因为它对每个并行实例调用一次

编辑:


Flink 1.8.1也会产生同样的结果。

您好,您使用的是什么版本的Flink?我想你碰到了一个bug,我在Flink的jira中创建了一张跟踪它的罚单。作为一种解决方法,您可以尝试:1如果模型很小,请尝试从本地文件系统上载它2如果您尝试通过WebUI提交您的程序,因为它的路径稍有不同3您可以尝试使用操作员自己的open方法下载该文件。因此,我使用的是Flink 1.9。我试过用较小的模型(比如200kb)来测试它,当然主模型比200mb大得多,结果是一样的。至于Web UI,如果可能的话,我想保留我构建的jenkins设置,对于OpenMethod,我可以尝试一下,但如果这能解决问题,我会感到惊讶。如果我在open中的keyed process函数上加载模型,如果key是user_id,这会有问题吗?如果您有更多想法,请告诉我!谢谢p、 s.@DawidWysakowicz本地文件系统看起来真的不是一个优雅的解决方案,因为我必须将模型部署到集群中的每个工作节点,我想这可能会在许多方面出错。我更喜欢将资源本地化到集群上,这样做有意义吗?注意:我正在运行flink v1.9.0版。首先,我同意我建议的三种解决方法都不完美。只是想给你一些选择。我所说的本地文件系统是指提交作业的客户端的文件系统,如果从客户端的本地文件系统注册文件,registerCacheFile应该可以正常工作。正如我所说的,这些文件必须足够小,才能适合HTTP Rest请求。对不起,我不知道实际大小应该是多少。您好,您使用的是什么版本的Flink?我想你碰到了一个bug,我在Flink的jira中创建了一张跟踪它的罚单。作为一种解决方法,您可以尝试:1如果模型很小,请尝试从本地文件系统上载它2如果您尝试通过WebUI提交您的程序,因为它的路径稍有不同3您可以尝试使用操作员自己的open方法下载该文件。因此,我使用的是Flink 1.9。我试过用较小的模型(比如200kb)来测试它,当然主模型比200mb大得多,结果是一样的。至于Web UI,如果可能的话,我想保留我构建的jenkins设置,对于OpenMethod,我可以尝试一下,但如果这能解决问题,我会感到惊讶。如果我在open中的keyed process函数上加载模型,如果key是user_id,这会有问题吗?如果您有更多想法,请告诉我!谢谢附笔
@DawidWysakowicz本地文件系统看起来真的不是一个美观的解决方案,因为我必须将模型部署到集群中的每个工作节点,我想这可能会在许多方面出错。我更喜欢将资源本地化到集群上,这样做有意义吗?注意:我正在运行flink v1.9.0版。首先,我同意我建议的三种解决方法都不完美。只是想给你一些选择。我所说的本地文件系统是指提交作业的客户端的文件系统,如果从客户端的本地文件系统注册文件,registerCacheFile应该可以正常工作。正如我所说的,这些文件必须足够小,以便适合HTTP Rest请求。很抱歉,我不知道实际大小应该是多少。