gpt4 book ai didi

hadoop - Presto 无法查询配置单元表

转载 作者:可可西里 更新时间:2023-11-01 14:40:12 28 4
gpt4 key购买 nike

在 EMR 上,我使用 spark 在 parquet 中创建了一个数据集并将其存储在 S3 上。我目前能够创建一个外部表并使用配置单元查询它,但是当我尝试使用 presto 执行相同的查询时,我收到一个错误(每次运行时引用的部分都会发生变化)。

2016-11-13T13:11:15.165Z        ERROR   remote-task-callback-36 com.facebook.presto.execution.StageStateMachine Stage 20161113_131114_00004_yp8y5.1 failed
com.facebook.presto.spi.PrestoException: Error opening Hive split s3://my_bucket/my_table/part-r-00013-b17b4495-f407-49e0-9d15-41bb0b68c605.snappy.parquet (offset=1100508800, length=68781800): null
at com.facebook.presto.hive.parquet.ParquetHiveRecordCursor.createParquetRecordReader(ParquetHiveRecordCursor.java:475)
at com.facebook.presto.hive.parquet.ParquetHiveRecordCursor.<init>(ParquetHiveRecordCursor.java:247)
at com.facebook.presto.hive.parquet.ParquetRecordCursorProvider.createHiveRecordCursor(ParquetRecordCursorProvider.java:96)
at com.facebook.presto.hive.HivePageSourceProvider.getHiveRecordCursor(HivePageSourceProvider.java:129)
at com.facebook.presto.hive.HivePageSourceProvider.createPageSource(HivePageSourceProvider.java:107)
at com.facebook.presto.spi.connector.classloader.ClassLoaderSafeConnectorPageSourceProvider.createPageSource(ClassLoaderSafeConnectorPageSourceProvider.java:44)
at com.facebook.presto.split.PageSourceManager.createPageSource(PageSourceManager.java:48)
at com.facebook.presto.operator.TableScanOperator.createSourceIfNecessary(TableScanOperator.java:268)
at com.facebook.presto.operator.TableScanOperator.isFinished(TableScanOperator.java:210)
at com.facebook.presto.operator.Driver.processInternal(Driver.java:375)
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)
Caused by: java.io.EOFException
at java.io.DataInputStream.readFully(DataInputStream.java:197)
at java.io.DataInputStream.readFully(DataInputStream.java:169)
at parquet.hadoop.ParquetFileReader.readFooter(ParquetFileReader.java:420)
at parquet.hadoop.ParquetFileReader.readFooter(ParquetFileReader.java:385)
at com.facebook.presto.hive.parquet.ParquetHiveRecordCursor.lambda$createParquetRecordReader$0(ParquetHiveRecordCursor.java:416)
at com.facebook.presto.hive.authentication.NoHdfsAuthentication.doAs(NoHdfsAuthentication.java:23)
at com.facebook.presto.hive.HdfsEnvironment.doAs(HdfsEnvironment.java:76)
at com.facebook.presto.hive.parquet.ParquetHiveRecordCursor.createParquetRecordReader(ParquetHiveRecordCursor.java:416)
... 16 more

Parquet 位置由 128 个部分组成 - 数据存储在 S3 上,并使用 KMS 客户端加密进行加密。 Presto 使用自定义加密 Material 提供程序(使用 presto.s3.encryption-materials-provider 指定),它只返回一个用我的主 key 初始化的 KMSEncryptionMaterials 对象。我正在使用 EMR 5.1.0(Hive 2.1.0、Spark 2.0.1、Presto 0.152.3)。

最佳答案

当加密关闭时,它会浮出水面吗?

有一个针对 ASF s3a 客户端(不是 EMR 客户端)的错误报告,当文件系统列出长度 != 实际文件长度时,事情发生了变化。即:由于加密,列表中的文件长度 > 读取中的长度。

我们无法在测试中重现这一点,无论如何我们的结论是“文件系统不能那样做”(事实上,这是 Hadoop FS 规范的基本要求:列出的 len 必须等于实际长度)。如果 EMR 代码出现此错误,则说明它们的驱动程序中存在下游代码无法处理的问题

关于hadoop - Presto 无法查询配置单元表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40575972/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com