HiveServer2;Hive版本:1.2
我正在尝试运行一个包含自定义UDF类(实现GenericUDTF)的查询。
UDF类包含一个用于计算的树对象。
当树很小时,查询可以正常运行。但是当树增长时,查询失败,并出现以下错误:
org.apache.hive.service.cli.HiveSQL异常:处理语句时出错:失败:执行错误,返回代码-101来自org.apache.hadoop.hive.ql.exec.mr.MapRedTask.null网址: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.access$100(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.hadop.security.UserGroupInformation.doAs(UserGroupInformation.java:1595)网址:org.apache.hive.service.cli.operation.SQLOperation$1.run(SQLOperation.java:217)位于java.util.concurrent.Executors$RunnableAdapter.call(Executitors.java:511)位于java.util.concurrent.FFutureTask.run(FutureTask.java:266)位于java.util.concurrent.ThreadPoolExecutiator.runWorker(ThreadPoolExecutiator.java:1142)位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)在java.lang.Thread.run(线程.java:745)由:java.lang.StackOverflowError引起,网址:org.apache.hive.com.metricsoft.kryo.util.DefaultClassResolver.writeName(DefaultClassResolver.java:90)网址:org.apache.hive.com.metricsoft.kryo.util.DefaultClassResolver.writeClass(DefaultClassResolver.java:81)
知道怎么解决这个问题吗?蜂箱配置中有什么神奇的特性吗?
这个问题似乎是由https://github.com/EsotericSoftware/kryo/issues/103
我的解决方法是在运行时(在process()API中)而不是在初始化时(在initialize()API)中初始化树对象