From 1ca04a22d496aba7fd60031f93de04c4ee4c1ae3 Mon Sep 17 00:00:00 2001 From: Sorabh Hamirwasia Date: Sun, 21 Jan 2018 16:30:25 -0800 Subject: [PATCH] DRILL-6100: Intermittent failure while reading Parquet file footer during planning phase --- .../drill/exec/store/parquet/Metadata.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/store/parquet/Metadata.java b/exec/java-exec/src/main/java/org/apache/drill/exec/store/parquet/Metadata.java index a611c6f29bc..ab3bc1997d0 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/store/parquet/Metadata.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/store/parquet/Metadata.java @@ -18,6 +18,7 @@ package org.apache.drill.exec.store.parquet; import java.io.IOException; +import java.security.PrivilegedExceptionAction; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -41,6 +42,7 @@ import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; +import org.apache.hadoop.security.UserGroupInformation; import org.apache.parquet.column.statistics.Statistics; import org.apache.parquet.hadoop.ParquetFileReader; import org.apache.parquet.hadoop.metadata.BlockMetaData; @@ -416,8 +418,21 @@ public ColTypeInfo(OriginalType originalType, int precision, int scale, int repe * Get the metadata for a single file */ private ParquetFileMetadata_v3 getParquetFileMetadata_v3(ParquetTableMetadata_v3 parquetTableMetadata, - FileStatus file) throws IOException { - ParquetMetadata metadata = ParquetFileReader.readFooter(fs.getConf(), file); + final FileStatus file) throws IOException, InterruptedException { + final ParquetMetadata metadata; + final UserGroupInformation processUserUgi = ImpersonationUtil.getProcessUserUGI(); + try { + metadata = processUserUgi.doAs(new PrivilegedExceptionAction() { + public ParquetMetadata run() throws Exception { + return ParquetFileReader.readFooter(fs.getConf(), file); + } + }); + } catch(Exception e) { + logger.error("Exception while reading footer of parquet file [Details - path: {}, owner: {}] as process user {}", + file.getPath(), file.getOwner(), processUserUgi.getShortUserName(), e); + throw e; + } + MessageType schema = metadata.getFileMetaData().getSchema(); // Map originalTypeMap = Maps.newHashMap();