如何在蜂巢使用UDF,当我解决这个KRYO例外?(How do I fix this Kryo ex

2019-10-30 03:21发布

我有一个在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匹配,我在我的罐子使用的库的版本。

我也试过这样: https://community.hortonworks.com/content/supportkb/150199/orgapachehivecomesotericsoftwarekryokryoexception-1.html它也不能工作。

Answer 1:

我终于能够运行我的查询后,我减少了我的尺寸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文件。

我希望有人认为这宝贵信息。



Answer 2:

我实际上是指蜂箱这个线程https://issues.apache.org/jira/browse/HIVE-7711通过Dr.Christian贝兹在这个问题上的意见建议落实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



}



}


文章来源: How do I fix this Kryo exception when using a UDF on hive?