我处于我想要从代码中停止/取消flink作业的情况。这是在我的集成测试中,我正在向flink工作提交任务并检查结果。当作业以异步方式运行时,即使测试失败/通过也不会停止。我想在测试结束后停止工作。
我尝试了一些我在下面列出的内容:
这当然没有运行,但我不确定jobmanager actorref是错还是缺少其他东西。
我得到的错误是:[flink-akka.actor.default-dispatcher-5] [akka:// flink / user / jobmanager_1]消息[org.apache.flink.runtime.messages.JobManagerMessages $ RequestRunningJobsStatus $]从演员[akka:// flink / temp / $ a]到演员[akka:// flink / user / jobmanager_1]未送达。 [1]遇到死信。可以使用配置设置关闭或调整此日志记录' akka.log-dead-letters'和' akka.log-dead-letters-during-shutdown'
表示作业管理器actor ref错误或发送给它的消息不正确。
代码如下所示:
val system = ActorSystem("flink", ConfigFactory.load.getConfig("akka")) //I debugged to get this path
val jobManager = system.actorSelection("/user/jobmanager_1") //also got this akka path by debugging and getting the jobmanager akka url
val responseRunningJobs = Patterns.ask(jobManager, JobManagerMessages.getRequestRunningJobsStatus, new FiniteDuration(10000, TimeUnit.MILLISECONDS))
try {
val result = Await.result(responseRunningJobs, new FiniteDuration(5000, TimeUnit.MILLISECONDS))
if(result.isInstanceOf[RunningJobsStatus]){
val runningJobs = result.asInstanceOf[RunningJobsStatus].getStatusMessages()
val itr = runningJobs.iterator()
while(itr.hasNext){
val jobId = itr.next().getJobId
val killResponse = Patterns.ask(jobManager, new CancelJob(jobId), new Timeout(new FiniteDuration(2000, TimeUnit.MILLISECONDS)));
try {
Await.result(killResponse, new FiniteDuration(2000, TimeUnit.MILLISECONDS))
}
catch {
case e : Exception =>"Canceling the job with ID " + jobId + " failed." + e
}
}
}
}
catch{
case e : Exception => "Could not retrieve running jobs from the JobManager." + e
}
}
有人可以检查这是否是正确的方法?
编辑: 要完全停止作业,必须先按TaskManager的顺序停止TaskManager和JobManager,然后再按JobManager停止。
答案 0 :(得分:3)
您正在创建新的ActorSystem
,然后尝试在同一个actor系统中找到名为/user/jobmanager_1
的actor。这不会奏效,因为实际的职位经理将以不同的ActorSystem
运行。
如果您想获得真正的职业经理ActorRef
,您必须使用相同的ActorSystem
进行选择(然后您可以使用本地地址)或者您已找到作业管理员演员的远程地址。远程地址的格式为akka.tcp://flink@[address_of_actor_system]/user/jobmanager_[instance_number]
。如果您有权访问FlinkMiniCluster
,则可以使用leaderGateway
承诺获取当前领导者ActorGateway
。