0

我有一个在 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)  

我如何解决它?

我已经看到一些建议这样做的答案,set hive.exec.parallel=false;但它不起作用,我仍然收到此错误。

我检查了我使用的库的版本,并确保它hadoop versionhive --version我在我的 jar 中使用的库的版本相匹配。

我也试过这个:https ://community.hortonworks.com/content/supportkb/150199/orgapachehivecomesotericsoftwarekryokryoexception-1.html它也没有工作。

4

2 回答 2

0

在减小udf.jar. 它曾经是 150 mb,我把它减少到 50 kb。这似乎是一个 kryo 错误。我从这里得到了这个信息: https ://github.com/EsotericSoftware/kryo/issues/307

udf.jar通过将所有依赖项标记为provided. 所以我从这个出发:

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

对此:

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

这绝对是一个 kryo 错误,因为我能够udf.jar在 hortonworks 2.6 中使用那个大文件运行这个查询。

我希望有人发现这些信息很有价值。

于 2019-02-07T11:53:29.790 回答
-1

我实际上提到了 hive 的这个线程https://issues.apache.org/jira/browse/HIVE-7711 Dr.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



}



}
于 2019-03-22T09:50:54.110 回答