Ошибка создания запроса 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

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


person Rodrigo Ney    schedule 17.11.2016    source источник
comment
Похоже на ошибку в файловом ридере. Какой формат файла вы используете?   -  person Dain Sundstrom    schedule 18.11.2016
comment
Я использую PARQUET файлы, но проблема сохраняется и с ORC файлами   -  person Rodrigo Ney    schedule 18.11.2016


Ответы (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

to hive.properties:

/etc/presto/conf/catalog/hive.properties #path on emr
person Rodrigo Ney    schedule 25.11.2016