diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java index 2671cb1..e93cf34 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java @@ -2198,7 +2198,8 @@ private void getMetaData(QB qb, ReadEntity parentInput) private boolean isPathEncrypted(Path path) throws HiveException { HadoopShims.HdfsEncryptionShim hdfsEncryptionShim; - hdfsEncryptionShim = SessionState.get().getHdfsEncryptionShim(); + LOG.debug("Check encryption for path " + path.toString()); + hdfsEncryptionShim = SessionState.get().getHdfsEncryptionShimForPath(path); if (hdfsEncryptionShim != null) { try { if (hdfsEncryptionShim.isPathEncrypted(path)) { diff --git a/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java b/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java index 83a8610..242231e 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java @@ -454,6 +454,22 @@ public HiveTxnManager getTxnMgr() { return hdfsEncryptionShim; } + public HadoopShims.HdfsEncryptionShim getHdfsEncryptionShimForPath(Path path) throws HiveException { + HadoopShims.HdfsEncryptionShim encryptionShim = null; + try { + FileSystem fs = FileSystem.get(path.toUri(), sessionConf); + if ("hdfs".equals(fs.getUri().getScheme())) { + encryptionShim = ShimLoader.getHadoopShims().createHdfsEncryptionShim(fs, sessionConf); + } else { + LOG.info("Could not get hdfsEncryptionShim, it is only applicable to hdfs filesystem."); + } + } catch (Exception e) { + throw new HiveException(e); + } + + return encryptionShim; + } + // SessionState is not available in runtime and Hive.get().getConf() is not safe to call private static class SessionStates { private SessionState state;