开发者社区 问答 正文

flink的yarn session模式怎么把提交给他的作业均匀分配给所有的taskmanager

flink部署yarn session模式,发现提交给他的作业每次都是先将1个taskmanager上的slot全都分配完后再起1个taskmanger,这导致给1个作业配置的所有并发全都在1个taskmanger上反压很高。有没有办法让这种yarn session模式对每个作业的并发分配到不同taskmanger上啊?

展开
收起
游客s52qgwvau36ge 2021-12-30 10:08:01 919 分享 版权
阿里云 AI 助理回答

在Flink on YARN Session模式下,作业的TaskManager资源分配策略默认是基于可用资源进行的,这可能导致您观察到的一个现象:即新提交的作业会优先使用现有TaskManager的空闲Slot,直至饱和后再启动新的TaskManager。这种行为有时会导致单个TaskManager上的并发任务过多,从而引发反压问题。

要改善这种情况,虽然直接在Session模式下控制每个作业的并发均匀分布在不同TaskManager上没有直接的配置开关,但您可以采取以下策略来优化资源分配和减轻反压:

  1. 调整TaskManager的Slot数量

    • 根据您的描述,如果希望避免单个TaskManager承载过多并发导致的反压,可以考虑减少每个TaskManager的Slot数量(通过配置taskmanager.numberOfTaskSlots)。这样,即使一个TaskManager被完全占用,系统也更倾向于较早地启动新的TaskManager来分散负载。
  2. 合理设置资源限制

    • 确保TaskManager的内存和CPU资源配置既不过小也不过大,以平衡资源利用率和故障影响范围。过大的资源分配可能会延迟新TaskManager的启动,而过小则可能因资源紧张快速触发新TaskManager的创建,两者都可能不利于并发任务的均衡分布。
  3. 优化作业提交参数

    • 在提交作业时,可以通过设置特定的资源配置参数,如并行度(parallelism),来尝试控制作业的资源需求,间接影响其在TaskManagers之间的分布。尽管不能精确控制到每个TaskManager,但合理的并行度设置可以帮助更好地利用集群资源,减少局部过载情况。
  4. 采用Per-Job Cluster模式

    • 考虑到Session模式的局限性,如果资源隔离和作业间的影响是一个持续存在的问题,可以考虑改用Per-Job Cluster模式。该模式为每个作业单独启动一个Flink集群,自然实现了作业间的资源隔离,减少了并发任务集中在少数TaskManagers上的可能性,但需注意这种方式会增加作业启动的开销。

综上所述,虽然直接控制Session模式下的并发均匀分布较为困难,但通过上述策略的调整,可以在一定程度上缓解您遇到的问题。特别是调整TaskManager的Slot数量和合理规划作业提交时的资源配置,是较为直接且有效的手段。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答