Hive - GenericUDTF - runQuery 由于 kryo stackoverflow 异常而失败

Hive - GenericUDTF - runQuery fails due to kryo stackoverflow exception

蜂巢服务器2;配置单元版本:1.2

我正在尝试 运行 包含自定义 UDF class(实现 GenericUDTF)的查询。

UDF class 包含一个用于计算的树对象。

当树较小时,查询 运行 正确。 但是当树长大时,查询失败并出现以下错误:

org.apache.hive.service.cli.HiveSQLException:处理语句时出错:失败:执行错误,return 来自 org.apache.hadoop.hive.ql.exec.mr.MapRedTask 的代码 -101。无效的 在 org.apache.hive.service.cli.operation.Operation.toSQLException(Operation.java:315) 在 org.apache.hive.service.cli.operation.SQLOperation.runQuery(SQLOperation.java:155) 在 org.apache.hive.service.cli.operation.SQLOperation.access100 美元(SQLOperation.java:70) 在 org.apache.hive.service.cli.operation.SQLOperation$1$1.run(SQLOperation.java:205) 在 java.security.AccessController.doPrivileged(本机方法) 在 javax.security.auth.Subject.doAs(Subject.java:422) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1595) 在 org.apache.hive.service.cli.operation.SQLOperation$1.run(SQLOperation.java:217) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745) 原因:java.lang.WhosebugError 在 org.apache.hive.com.esotericsoftware.kryo.util.DefaultClassResolver.writeName(DefaultClassResolver.java:90) 在 org.apache.hive.com.esotericsoftware.kryo.util.DefaultClassResolver.writeClass(DefaultClassResolver.java:81)

知道如何解决这个问题吗?配置单元配置中的任何魔法属性?

看来问题已解决 https://github.com/EsotericSoftware/kryo/issues/103

我的解决方法是在 run-time 中初始化树对象(在 process() API 中)而不是初始化时间(在 initialize() API 中)