Mam tabelę gałęzi z następującymi właściwościami -
- Format przechowywania ORC
- transakcyjny = true
- Partycjonowany na 4 klucze - rok, miesiąc, dzień, godzina
- zebrane przez groupingKey
Używam Hive Streaming do zapełniania danych bezpośrednio do tabeli.
Teraz mój problem jest - Próbuję uruchomić następujące zapytanie
select count(*) from table_name;
Dostaję następujący wyjątek
Caused by: java.lang.ClassCastException: org.apache.hadoop.hive.ql.io.orc.OrcStruct$OrcStructInspector cannot be cast to org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector
at org.apache.hadoop.hive.ql.exec.vector.VectorizedBatchUtil.setVector(VectorizedBatchUtil.java:295)
at org.apache.hadoop.hive.ql.exec.vector.VectorizedBatchUtil.acidAddRowToBatch(VectorizedBatchUtil.java:275)
at org.apache.hadoop.hive.ql.io.orc.VectorizedOrcAcidRowReader.next(VectorizedOrcAcidRowReader.java:82)
Jednak jeśli wyłączę wektorową realizację, ustawiając następującą właściwość
set hive.vectorized.execution.enabled = false;
wszystko działa dobrze (chociaż ukończenie trwa kilka wieków).
Dlaczego to się dzieje ? Z tego, co rozumiem, w formacie ORC, powinno działać wektoryzowane wykonanie.
Wersja Hadoop - 2.7.1
Wersja Hive - 1.2.1
Odpowiedzi:
1 dla odpowiedzi № 1Wygląda na to, że ten problem z ulem został zamknięty / naprawiony. sprawdź ponownie używaną wersję ula.
Proszę sprawdzić Vectorized wykonanie powoduje ClassCastException