HIVE-20002: Shipping jdbd-storage-handler dependency jars in LLAP (Daniel Dai, 
reviewed by Sergey Shelukhin)


Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/8f57e25b
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/8f57e25b
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/8f57e25b

Branch: refs/heads/master-txnstats
Commit: 8f57e25bb205d60d9022bbc185ffd8af5aae0fab
Parents: 761597f
Author: Daniel Dai <dai...@gmail.com>
Authored: Fri Jun 29 22:05:06 2018 -0700
Committer: Daniel Dai <dai...@gmail.com>
Committed: Fri Jun 29 22:05:06 2018 -0700

----------------------------------------------------------------------
 .../hadoop/hive/llap/cli/LlapServiceDriver.java | 23 ++++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/8f57e25b/llap-server/src/java/org/apache/hadoop/hive/llap/cli/LlapServiceDriver.java
----------------------------------------------------------------------
diff --git 
a/llap-server/src/java/org/apache/hadoop/hive/llap/cli/LlapServiceDriver.java 
b/llap-server/src/java/org/apache/hadoop/hive/llap/cli/LlapServiceDriver.java
index 20fec7e..0f1d5ee 100644
--- 
a/llap-server/src/java/org/apache/hadoop/hive/llap/cli/LlapServiceDriver.java
+++ 
b/llap-server/src/java/org/apache/hadoop/hive/llap/cli/LlapServiceDriver.java
@@ -90,7 +90,8 @@ public class LlapServiceDriver {
 
   private static final String[] DEFAULT_AUX_CLASSES = new String[] {
     
"org.apache.hive.hcatalog.data.JsonSerDe","org.apache.hadoop.hive.druid.DruidStorageHandler",
-    "org.apache.hive.storage.jdbc.JdbcStorageHandler"
+    "org.apache.hive.storage.jdbc.JdbcStorageHandler", 
"org.apache.commons.dbcp.BasicDataSourceFactory",
+    "org.apache.commons.pool.impl.GenericObjectPool"
   };
   private static final String HBASE_SERDE_CLASS = 
"org.apache.hadoop.hive.hbase.HBaseSerDe";
   private static final String[] NEEDED_CONFIGS = 
LlapDaemonConfiguration.DAEMON_CONFIGS;
@@ -433,7 +434,9 @@ public class LlapServiceDriver {
               localizeJarForClass(lfs, libDir, codecClassName, false);
             }
           }
-
+          for (String className : getDbSpecificJdbcJars()) {
+            localizeJarForClass(lfs, libDir, className, false);
+          }
           if (options.getIsHBase()) {
             try {
               localizeJarForClass(lfs, libDir, HBASE_SERDE_CLASS, true);
@@ -738,6 +741,22 @@ public class LlapServiceDriver {
     return udfs.keySet();
   }
 
+  private void addJarForClassToListIfExists(String cls, List<String> jarList) {
+    try {
+      Class.forName(cls);
+      jarList.add(cls);
+    } catch (Exception e) {
+    }
+  }
+  private List<String> getDbSpecificJdbcJars() {
+    List<String> jdbcJars = new ArrayList<String>();
+    addJarForClassToListIfExists("com.mysql.jdbc.Driver", jdbcJars); // add 
mysql jdbc driver
+    addJarForClassToListIfExists("org.postgresql.Driver", jdbcJars); // add 
postgresql jdbc driver
+    addJarForClassToListIfExists("oracle.jdbc.OracleDriver", jdbcJars); // add 
oracle jdbc driver
+    
addJarForClassToListIfExists("com.microsoft.sqlserver.jdbc.SQLServerDriver", 
jdbcJars); // add mssql jdbc driver
+    return jdbcJars;
+  }
+
   private void localizeJarForClass(FileSystem lfs, Path libDir, String 
className, boolean doThrow)
       throws IOException {
     String jarPath = null;

Reply via email to