Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hive 在配置单元上使用UDF时,如何修复此Kryo异常?_Hive_Hortonworks Sandbox_Apache Tez - Fatal编程技术网

Hive 在配置单元上使用UDF时,如何修复此Kryo异常?

Hive 在配置单元上使用UDF时,如何修复此Kryo异常?,hive,hortonworks-sandbox,apache-tez,Hive,Hortonworks Sandbox,Apache Tez,我有一个在hortonworks 2.6沙盒中工作的配置单元查询,但它在沙盒版本中不工作。3.0由于该例外情况: Caused by: org.apache.hive.com.esotericsoftware.kryo.KryoException: Encountered unregistered class ID: 95

我有一个在hortonworks 2.6沙盒中工作的配置单元查询,但它在沙盒版本中不工作。3.0由于该例外情况:

Caused by: org.apache.hive.com.esotericsoftware.kryo.KryoException: Encountered unregistered class ID: 95                                                                                                          
Serialization trace:                                                                                                                                                                                               
parentOperators (org.apache.hadoop.hive.ql.exec.vector.reducesink.VectorReduceSinkLongOperator)                                                                                                                    
childOperators (org.apache.hadoop.hive.ql.exec.vector.VectorFilterOperator)                                                                                                                                        
childOperators (org.apache.hadoop.hive.ql.exec.TableScanOperator)                                                                                                                                                  
aliasToWork (org.apache.hadoop.hive.ql.plan.MapWork)                                                                                                                                                               
        at org.apache.hive.com.esotericsoftware.kryo.util.DefaultClassResolver.readClass(DefaultClassResolver.java:137)                                                                                            
        at org.apache.hive.com.esotericsoftware.kryo.Kryo.readClass(Kryo.java:670)                                                                                                                                 
        at org.apache.hadoop.hive.ql.exec.SerializationUtilities$KryoWithHooks.readClass(SerializationUtilities.java:185)  
我怎么修理它

我已经看到一些答案建议执行
sethive.exec.parallel=false但它不工作,我仍然得到这个错误

我检查了我使用的库的版本,并确保
hadoop版本
hive--version
与我在jar中使用的库的版本匹配


我也尝试过这个方法:它也不起作用。

在缩小了
udf.jar的大小后,我终于能够运行我的查询了。它以前是150MB,我把它减少到50KB。它看起来像一只克鲁虫。我从这里得到了这些信息:

通过将所有依赖项标记为
提供的
,我减小了
udf.jar的大小。所以我从这里开始:

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-hdfs</artifactId>
    <version>3.1.1</version>
</dependency>

org.apache.hadoop
hadoop hdfs
3.1.1
为此:

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-hdfs</artifactId>
    <version>3.1.1</version>
    <scope>provided</scope> <!--Notice this line-->
</dependency>

org.apache.hadoop
hadoop hdfs
3.1.1
假如
这绝对是一个kryo bug,因为我能够使用hortonworks 2.6中的大
udf.jar
文件运行这个查询


我希望有人觉得这些信息很有价值。

我实际上指的是这个蜂巢的线索 Christian Betz博士对此问题的评论建议实施DoNothingSerializer以解决此异常。我试着实施这个解决方案,问题就解决了。但是,我无法理解添加序列化程序如何解决此问题的细节。 在这里找到解决方案。 尝试为扩展GenericUDF的类实现以下序列化程序

import org.apache.hive.com.esotericsoftware.kryo.Kryo;

import org.apache.hive.com.esotericsoftware.kryo.Serializer;

import org.apache.hive.com.esotericsoftware.kryo.io.Input;

import org.apache.hive.com.esotericsoftware.kryo.io.Output;



public class DoNothingSerializer extends Serializer<App> {



@Override

public App read(Kryo arg0, Input arg1, Class<App> arg2) {

// TODO Auto-generated method stub

return new App();

}



@Override

public void write(Kryo arg0, Output arg1, App arg2) {

// TODO Auto-generated method stub



}



}
import org.apache.hive.com.esotericsoftware.kryo.kryo;
导入org.apache.hive.com.esotericsoftware.kryo.Serializer;
导入org.apache.hive.com.esotericsoftware.kryo.io.Input;
导入org.apache.hive.com.esotericsoftware.kryo.io.Output;
公共类DoNothingSerializer扩展序列化程序{
@凌驾
公共应用程序读取(Kryo arg0,输入arg1,类arg2){
//TODO自动生成的方法存根
返回新应用程序();
}
@凌驾
公共无效写入(Kryo arg0、输出arg1、应用arg2){
//TODO自动生成的方法存根
}
}