在EMR上,我使用spark在parquet中創建了一個數據集並將其存儲在S3上。 我目前能夠創建一個外部表並使用配置單元查詢它,但是當我嘗試使用presto執行相同的查詢時,我得到一個錯誤(該部分在每次運行時引用了更改)。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
鑲木地板位置由128個部分組成 - 數據存儲在S3上並使用KMS客戶端加密進行加密。 Presto使用自定義加密材質提供程序(使用presto.s3.encryption-materials-provider指定),該提供程序僅返回用我的主密鑰初始化的KMSEncryptionMaterials對象。我正在使用EMR 5.1.0(Hive 2.1.0,Spark 2.0.1,Presto 0.152.3)。
它適用於未加密的對象 - 您可能處於正確的軌道上 - 因爲這是我在Presto中找到的一條評論代碼: //注意:對於加密對象,下面使用的S3ObjectSummary.size()不正確,然而,爲了獲得正確的大小,我們需要額外請求獲取 //用戶元數據,在這種情況下並不重要。 –
如何關閉加密? –
文件缺少「x-amz-unencrypted-content-length」元數據值。 Presto需要將其設置爲使用CSE –