Ошибка поднятия запроса Presto - StageStateMachine NullPointer при выполнении SELECT *

Я загружаю файлы паркета из S3 в мое хранилище данных Hive, которое работает на машине EMR:

Release: emr-5.1.0

Hadoop distribution: Amazon 2.7.3

Applications: Hive 2.1.0, Spark 2.0.1, Presto 0.152.3)

Я могу легко запросить результаты в улье, используя:

select * from table_a

Однако, когда я пытаюсь выполнить тот же запрос, используя presto, я получаю следующую ошибку:

ERROR   remote-task-callback-57 com.facebook.presto.execution.StageStateMachine Stage 20161117_211631_00018_29xwg.1 failed
java.lang.NullPointerException
    at com.facebook.presto.spi.RecordPageSource.getNextPage(RecordPageSource.java:124)
    at com.facebook.presto.operator.TableScanOperator.getOutput(TableScanOperator.java:246)
    at com.facebook.presto.operator.Driver.processInternal(Driver.java:378)
    at com.facebook.presto.operator.Driver.processFor(Driver.java:301)
    at com.facebook.presto.execution.SqlTaskExecution$DriverSplitRunner.processFor(SqlTaskExecution.java:622)
    at com.facebook.presto.execution.TaskExecutor$PrioritizedSplitRunner.process(TaskExecutor.java:529)
    at com.facebook.presto.execution.TaskExecutor$Runner.run(TaskExecutor.java:665)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

Я знаю, что мой presto может запрашивать таблицу кустов, потому что я могу сделать:

select count(1) from table_a

а также

select column_name from table_a

В чем проблема с моим первым выбором?

1 ответ

Решение

Я нашел проблему.

Когда я определил свой улей create table Я добавил поле, которое еще не существует в моих файлах (оно будет существовать очень скоро).

Используя Presto, я смог select column_name from table_a для всех полей моей таблицы, исключая пропущенное (что объясняет почему select * from table_a не работал).

Hive имеет дело с отсутствующим параметром в файле, заполнив его null значение в результате запроса. Престо пытается найти поле, и поднимает NullPointerException,

Версии машины:Hive 2.1.0, Spark 2.0.1, Presto 0.152.3

РЕДАКТИРОВАТЬ:

Добавьте эти два флага (один для орка и другой для паркета):

hive.parquet.use-column-names = true
hive.orc.use-column-names = true

в hive.properties:

/etc/presto/conf/catalog/hive.properties #path on emr
Другие вопросы по тегам