Presto 查询引发错误 - 执行时出现 StageStateMachine NullPointer SELECT *
Presto query raising error - StageStateMachine NullPointer when executing 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 能够查询配置单元 table 因为我可以这样做 :
select count(1) from table_a
和
select column_name from table_a
我的第一个 select 有什么问题?
我发现了问题。
当我定义我的配置单元时 create table
我添加了一个在我的文件中还不存在的字段(它很快就会存在)。
使用 Presto,我能够 select column_name from table_a
我的 table 的所有字段,不包括丢失的字段(这解释了为什么 select * from table_a
不起作用)。
Hive 通过在查询结果中填充 null
值来处理文件中缺少的参数。 Presto 试图找到该字段,并引发 NullPointerException
。
机器版本:
Hive 2.1.0, Spark 2.0.1, Presto 0.152.3
编辑:
添加这两个标志(一个用于 orc,另一个用于 parquet):
hive.parquet.use-column-names = true
hive.orc.use-column-names = true
到hive.properties
:
/etc/presto/conf/catalog/hive.properties #path on emr
我正在将镶木地板文件从 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 能够查询配置单元 table 因为我可以这样做 :
select count(1) from table_a
和
select column_name from table_a
我的第一个 select 有什么问题?
我发现了问题。
当我定义我的配置单元时 create table
我添加了一个在我的文件中还不存在的字段(它很快就会存在)。
使用 Presto,我能够 select column_name from table_a
我的 table 的所有字段,不包括丢失的字段(这解释了为什么 select * from table_a
不起作用)。
Hive 通过在查询结果中填充 null
值来处理文件中缺少的参数。 Presto 试图找到该字段,并引发 NullPointerException
。
机器版本:
Hive 2.1.0, Spark 2.0.1, Presto 0.152.3
编辑:
添加这两个标志(一个用于 orc,另一个用于 parquet):
hive.parquet.use-column-names = true
hive.orc.use-column-names = true
到hive.properties
:
/etc/presto/conf/catalog/hive.properties #path on emr