Как исправить это исключение Kryo при использовании UDF в улье? - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть запрос улья, который работал в песочнице 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 version и hive --version соответствуют версиям библиотек, которые я использую в моем банке.

Я также попробовал это: https://community.hortonworks.com/content/supportkb/150199/orgapachehivecomesotericsoftwarekryokryoexception-1.html это тоже не сработало.

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Я на самом деле ссылался на эту ветку улья https://issues.apache.org/jira/browse/HIVE-7711. Комментарий доктора Кристиана Бетца по этому вопросу предлагает реализовать DoNothingSerializer для решения этого исключения.Я попытался реализовать это решение, и проблема была решена.Однако я не мог понять детали того, как добавление Serializer решает эту проблему.Найти решение можно по этой ссылке .Попробуйте реализовать следующий Serializer для класса, который расширяет 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



}



}
0 голосов
/ 07 февраля 2019

Я наконец смог выполнить свои запросы после того, как уменьшил размер моего udf.jar.Раньше было 150 мб, а я уменьшил до 50 кб.Это похоже на ошибку крио.Я получил эту информацию отсюда: 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>

Это определенно ошибка крио, потому что я смог выполнить этот запрос с этим большим файлом udf.jar вhortonworks 2.6.

Надеюсь, кто-то посчитает эту информацию полезной.

...