EMR 集群上的 Flink 作业 "GC overhead limit exceeded"

Flink Job on EMR Cluster "GC overhead limit exceeded"

EMR-Flink 作业显示错误 "GC overhead limit exceeded error"。 EMR 集群是在 VPC 内创建的,具有默认的 EMR 角色。 Hadoop和Flink选项是从高级选项中选择的(我试过不同版本的Hadoop和Flink)

Step 方法用于提交带有参数集的自定义 jar。 Job 从 Aurora DB

读取数据

问题:当读取请求中来自 Aurora DB 的行数较少时作业成功执行,但随着行数增加到数百万,我开始得到 "GC overhead limit exceeded error"。我正在为 Aurora 数据库连接使用 JDBC 驱动程序。在我的本地机器上,我没有遇到任何错误,无论读取请求中的数据大小如何,一切正常。

确切错误:

java.lang.OutOfMemoryError: GC overhead limit exceeded
-XX:OnOutOfMemoryError="kill -9 %p"
Executing /bin/sh -c "kill -9 8344"...

尝试过的解决方案: 1:我试图通过使用 link:https://aws.amazon.com/premiumsupport/knowledge-center/emr-outofmemory-gc-overhead-limit-error/ 来解决问题。

2:我也试过在创建集群时提供flink配置如

taskmanager.heap.mb:13926
jobmanager.heap.mb:13926
taskmanager.memory.preallocate:true
taskmanager.memory.off-heap:true

3:我还尝试了其他选项并添加了其他设置 flink 配置,但对我没有任何作用。

问题出在 hadoop 内存上,如下所示

============= Java 用户 hadoop 进程 ============= 8228com.amazonaws.elasticmapreduce.statepusher.StatePusher-Dlog4j.defaultInitOverride 4522 aws157.instancecontroller.Main -Xmx1024m -XX:+ExitOnOutOfMemoryError -XX:MinHeapFreeRatio=10 -Dlog4j.defaultInitOverride ===========结束java个用户hadoop进程===========

以下配置对我有用并解决了我的问题

[
  {
"Classification": "hadoop-env",
"Properties": {

},
"Configurations": [
  {
    "Classification": "export",
    "Properties": {
      "HADOOP_HEAPSIZE":"10000"
    },
    "Configurations": [

    ]
  }
]
}
]