diff --git a/shims/0.23/pom.xml b/shims/0.23/pom.xml
index 2e16956..3b1fb97 100644
--- a/shims/0.23/pom.xml
+++ b/shims/0.23/pom.xml
@@ -61,7 +61,6 @@
org.apache.hadoop
hadoop-hdfs
${hadoop-23.version}
- true
org.apache.hadoop
diff --git a/shims/0.23/src/main/java/org/apache/hadoop/hive/shims/Hadoop23Shims.java b/shims/0.23/src/main/java/org/apache/hadoop/hive/shims/Hadoop23Shims.java
index 3292cb3..79bd9ff 100644
--- a/shims/0.23/src/main/java/org/apache/hadoop/hive/shims/Hadoop23Shims.java
+++ b/shims/0.23/src/main/java/org/apache/hadoop/hive/shims/Hadoop23Shims.java
@@ -531,13 +531,34 @@ public void setupConfiguration(Configuration conf) {
// else the updates do not get flushed properly
KeyProviderCryptoExtension keyProvider = miniDFSCluster.getNameNode().getNamesystem().getProvider();
if (keyProvider != null) {
- miniDFSCluster.getFileSystem().getClient().setKeyProvider(keyProvider);
+ try {
+ setKeyProvider(miniDFSCluster.getFileSystem().getClient(), keyProvider);
+ } catch (Exception err) {
+ throw new IOException(err);
+ }
}
cluster = new MiniDFSShim(miniDFSCluster);
return cluster;
}
+ private static void setKeyProvider(DFSClient dfsClient, KeyProviderCryptoExtension provider)
+ throws Exception {
+ Method setKeyProviderHadoop27Method = null;
+ try {
+ setKeyProviderHadoop27Method = DFSClient.class.getMethod("setKeyProvider", KeyProvider.class);
+ } catch (NoSuchMethodException err) {
+ // We can just use setKeyProvider() as it is
+ }
+
+ if (setKeyProviderHadoop27Method != null) {
+ // Method signature changed in Hadoop 2.7. Cast provider to KeyProvider
+ setKeyProviderHadoop27Method.invoke(dfsClient, (KeyProvider) provider);
+ } else {
+ dfsClient.setKeyProvider(provider);
+ }
+ }
+
/**
* MiniDFSShim.
*