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

时间:2017-01-19 10:40:10

标签: hive yarn kryo mapr

HiveServer2; Hive版本:1.2

我试图运行一个包含自定义UDF类(实现GenericUDTF)的查询。

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

当树很小时,查询会正常运行。 但是当树增长时,查询失败并出现以下错误:

org.apache.hive.service.cli.HiveSQLException:处理语句时出错:FAILED:执行错误,从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.access $ 100(SQLOperation.java:70)     在org.apache.hive.service.cli.operation.SQLOperation $ 1 $ 1.run(SQLOperation.java:205)     at java.security.AccessController.doPrivileged(Native Method)     在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)     at java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511)     at java.util.concurrent.FutureTask.run(FutureTask.java:266)     在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)     at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)     在java.lang.Thread.run(Thread.java:745) 引起:java.lang.StackOverflowError     at org.apache.hive.com.esotericsoftware.kryo.util.DefaultClassResolver.writeName(DevaultClassResolver.java:90)     at org.apache.hive.com.esotericsoftware.kryo.util.DefaultClassResolver.writeClass(DefaultClassResolver.java:81)

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

1 个答案:

答案 0 :(得分:0)

https://github.com/EsotericSoftware/kryo/issues/103

似乎已经解决了这个问题

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