Yongzhi Chen created HIVE-9813:
----------------------------------

             Summary: Hive JDBC - DatabaseMetaData.getColumns method cannot 
find classes added with "add jar" command
                 Key: HIVE-9813
                 URL: https://issues.apache.org/jira/browse/HIVE-9813
             Project: Hive
          Issue Type: Bug
          Components: Metastore
            Reporter: Yongzhi Chen


Execute following JDBC client program:
{code}
import java.sql.*;

public class TestAddJar {
    private static Connection makeConnection(String connString, String 
classPath) throws ClassNotFoundException, SQLException
    {
        System.out.println("Current Connection info: "+ connString);
        Class.forName(classPath);
        System.out.println("Current driver info: "+ classPath);
        return DriverManager.getConnection(connString);
    }

    public static void main(String[] args)
    {
        if(2 != args.length)
        {
            System.out.println("Two arguments needed: connection string, path 
to jar to be added (include jar name)");
            System.out.println("Example: java -jar TestApp.jar 
jdbc:hive2://192.168.111.111 /tmp/json-serde-1.3-jar-with-dependencies.jar");
            return;
        }
        Connection conn;
        try
        {
            conn = makeConnection(args[0], "org.apache.hive.jdbc.HiveDriver");
            
System.out.println("-----------------------------------------------------------------------");
            System.out.println("DONE");

            
System.out.println("-----------------------------------------------------------------------");
            System.out.println("Execute query: add jar " + args[1] + ";");
            Statement stmt = conn.createStatement();
            int c = stmt.executeUpdate("add jar " + args[1]);
            System.out.println("Returned value is: [" + c + "]\n");

            
System.out.println("-----------------------------------------------------------------------");
            final String createTableQry = "Create table if not exists 
json_test(id int, content string) " +
                    "row format serde 'org.openx.data.jsonserde.JsonSerDe'";
            System.out.println("Execute query:" + createTableQry + ";");
            stmt.execute(createTableQry);

            
System.out.println("-----------------------------------------------------------------------");
            System.out.println("----------------------------getColumn() 
Call---------------------------\n");
            DatabaseMetaData md = conn.getMetaData();
            System.out.println("Test get all column in a schema:");
            ResultSet rs = md.getColumns("Hive", "default", "json_test", null);
            while (rs.next()) {
                System.out.println(rs.getString(1));
            }
            conn.close();
        }
        catch (ClassNotFoundException e)
        {
            e.printStackTrace();
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
    }
}
{code}

Get Exception, and from metastore log:
7:41:30.316 PM  ERROR   hive.log        
error in initSerDe: java.lang.ClassNotFoundException Class 
org.openx.data.jsonserde.JsonSerDe not found
java.lang.ClassNotFoundException: Class org.openx.data.jsonserde.JsonSerDe not 
found
at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:1803)
at 
org.apache.hadoop.hive.metastore.MetaStoreUtils.getDeserializer(MetaStoreUtils.java:183)
at 
org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.get_fields(HiveMetaStore.java:2487)
at 
org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.get_schema(HiveMetaStore.java:2542)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at 
org.apache.hadoop.hive.metastore.RetryingHMSHandler.invoke(RetryingHMSHandler.java:105)
at com.sun.proxy.$Proxy5.get_schema(Unknown Source)
at 
org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore$Processor$get_schema.getResult(ThriftHiveMetastore.java:6425)
at 
org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore$Processor$get_schema.getResult(ThriftHiveMetastore.java:6409)
at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39)
at 
org.apache.hadoop.hive.metastore.TUGIBasedProcessor$1.run(TUGIBasedProcessor.java:110)
at 
org.apache.hadoop.hive.metastore.TUGIBasedProcessor$1.run(TUGIBasedProcessor.java:107)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at 
org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1554)
at 
org.apache.hadoop.hive.shims.HadoopShimsSecure.doAs(HadoopShimsSecure.java:556)
at 
org.apache.hadoop.hive.metastore.TUGIBasedProcessor.process(TUGIBasedProcessor.java:118)
at 
org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:244)
at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to