我有一个运行sql连接的spark任务。java.lang.OutOfMemoryError具有更多阶段的Spark DAG
我想象了DAG,它每创建一个+5个阶段。无论如何,在DAG大约有40个阶段之后,下一个步骤总是失败,除了8次迭代之后,每个阶段都有5个阶段。在螺纹
异常 “主” java.lang.OutOfMemoryError在 java.lang.AbstractStringBuilder.hugeCapacity(AbstractStringBuilder.java:161) 在 java.lang.AbstractStringBuilder.newCapacity(AbstractStringBuilder.java:155) 在 java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:125) 在 java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:448) 在java.lang.StringBuilder.append(StringBuilder.java:136)在 java.lang.StringBuilder.append(StringBuilder.java:131)at scala.StringContext.standardInterpolator(StringContext.scala:125)at scala.StringContext.s(StringContext.scala:95)at org.apache.spark.sql.execution.QueryExecution.toString(QueryExecution.scala:230) at org.apache.spark.sql.execution.SQLExecution $ .withNewExecutionId(SQLExecution.scala:54) 在 org.apache.spark.sql.Dataset.withNewExecutionId(Dataset.scala:2788) 在 org.apache。 spark.sql.Dataset.org $ apache $ spark $ sql $ Dataset $$执行$ 1(Dataset.scala:2385) at org.apache.spark.sql.Dataset.org $ apache $ spark $ sql $ Dataset $$收集(Dataset.scala:2392) at org.apache.spark.sql.Dataset $$ anonfun $ count $ 1.apply(Dataset.scal a:2420) at org.apache.spark.sql.Dataset $$ anonfun $ count $ 1.apply(Dataset.scala:2419) at org.apache.spark.sql.Dataset.withCallback(Dataset.scala:2801 )在 org.apache.spark.sql.Dataset.count(Dataset.scala:2419)在 com.samsung.cloud.mopay.linking.controller.PostNotificLinkController.linkPostNotific(PostNotificLinkController.java:51) 在 融为一体。 samsung.cloud.mopay.linking.txn.TxnLinking.performTxnLinking(TxnLinking.java:26) at com.samsung.cloud.mopay.linking.Linking.processData(Linking.java:199) at com.samsung.cloud .mopay.linking.Linking.main(Linking.java:72)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:498)在 org.apache.spark.deploy.SparkSubmit $ .org $ apache $ spark $ deploy $ SparkSubmit $$ runMain(SparkSubmit.scala:743) at org.apache.spark.deploy.SparkSubmit $ .doRunMain $ 1(SparkSubmit .scala:187) at org.apache.spark.deploy.SparkSubmit $ .submit(SparkSubmit.scala:212) at org.apache.spark.deploy.SparkSubmit $ .main(SparkSubmit.scala:126) at org .apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
我运行火花与每节点
--conf spark.driver.memory=30g
--conf spark.yarn.driver.memoryOverhead=15g
--conf spark.executor.memory=10g
--conf spark.yarn.executor.memoryOverhead=6g
--conf spark.executor.cores=5
3个实例(R3。2xlarge)=> 12执行者实例
这与数据量或并行性并无太大关系。看起来像创建的查询执行计划太大而不适合内存。 –
你是对的,我的坏,我没有注意整个堆栈跟踪。那么......这是我第一次看到这一点,你必须做很多事情......我想在这种情况下,我会尝试通过分步处理多步骤,检查点中间数据集等来打破沿袭。 – Traian