使用Spark引擎执行复杂的Hive SQL任务时报错“java.lang.StackOverflowError”
问题
MRS 3.6.0-LTS及之后版本,使用Spark引擎运行复杂的Hive SQL任务失败,在HiveServer运行日志中查看报错信息,内容如下:
... Caused by: org.apache.spark.SparkException: java.lang.StackOverflowError at java.io.ObjectStreamClass$WeakClassKey.<init>(ObjectStreamClass.java:2600) at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:382) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1209) at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1637) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1598) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1521) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1253) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:409) at scala.collection.immutable.List$SerializationProxy.writeObject(List.scala:516) at sun.reflect.GeneratedMethodAccessor44.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498)
处理步骤
- 可以在Hive客户端调大以下参数-Xss的值:
set spark.executor.extraJavaOptions=-Xss10M;
set spark.driver.extraJavaOptions=-Xss10M;
set spark.yarn.cluster.driver.extraJavaOptions=-Xss10M;
- 参数调大后再重新运行Hive SQL任务。