Flink 在任务执行前我也不知道这个任务需要多少的内存,这个有什么解决方法吗?[阿里云]

Flink on yarn任务在执行的时候数据量太大容易jobmanager或者taskmanager内存不足,然后容器直接被kill掉,在任务执行前我也不知道这个任务需要多少的内存,这个有什么解决方法吗?

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
1 条回复 A 作者 M 管理员
  1. 先按集群资源算算 按cpu和内存配比给,然后报溢出了再加,从ck恢复就行,此回答整理自钉群“【③群】Apache Flink China社区”

  2. 当 Flink 在 YARN 上运行时,由于数据量大而导致 JobManager 或 TaskManager 内存不足的情况是很常见的。以下是一些解决此类问题的方法:

    1. 增加资源

      • 增加每个 TaskManager 的内存大小:通过 yarn.application-master.vcoresyarn.container-vcores 设置来调整分配给任务的 CPU 核心数。
      • 增加 TaskManager 的数量:在提交作业时指定更多的并行度(如使用 -yn 参数)。
    2. 监控和调优

      • 使用 Flink Web UI 监控作业状态,包括 TaskManager 的资源使用情况、水位线等指标。
      • 调整 checkpoint 间隔和超时时间,以降低系统开销。
    3. 优化数据处理逻辑

      • 减少 state 的使用,或者使用更高效的状态存储方式(如 RocksDB)。
      • 对于高并发的数据流,考虑使用分桶、分区等技术来分散数据负载。
    4. 预估资源需求

      • 在实际部署前进行测试,根据测试结果估计所需资源。
      • 可以使用一些工具(如 Apache JMeter 等)模拟生产环境中的数据流量,以此来预估资源需求。
    5. 动态资源调整

      • 使用 Flink 自带的 dynamic scaling 功能,在作业运行过程中动态地添加或减少 TaskManagers。
      • 配合 YARN 的动态资源调整功能,自动扩展集群规模。
    6. 使用外部持久化存储

      • 如果可能,将部分计算过程产生的中间数据保存到外部持久化存储(如 HDFS),而不是全部保留在内存中。
    7. 升级硬件

      • 如果当前硬件资源不足以应对大数据量的处理,可以考虑升级服务器的硬件配置。
    8. 使用高效的序列化库

      • 使用高效的序列化库(如 Protobuf、Kryo 等)来降低数据传输和存储的成本。