如何使用JDBC建立与HIVE的连接?

时间:2017-04-03 02:43:15

标签: hadoop jdbc hive bigdata

如何配置JDBC with HIVE

import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;

public class table {
   private static String driverName = "org.apache.hadoop.hive.mysql.jdbc.Driver";

   public static void main(String[] args) throws SQLException {
      // Register driver and create driver instance

         try {
        Class.forName(driverName);
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

      Connection con = DriverManager.getConnection("jdbc:mysql://localhost:1000/default", "", "");
      Statement stmt = con.createStatement();

      stmt.executeQuery("CREATE DATABASE userdb");
    //  System.out.println(“Database userdb created successfully”);

      con.close();
   }
}

akshay@akshay:~$ javac table.java 
Picked up JAVA_TOOL_OPTIONS: -javaagent:/usr/share/java/jayatanaag.jar 
akshay@akshay:~$ java table
Picked up JAVA_TOOL_OPTIONS: -javaagent:/usr/share/java/jayatanaag.jar 
java.lang.ClassNotFoundException: org.apache.hadoop.hive.mysql.jdbc.Driver
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at table.main(table.java:14)
Exception in thread "main" java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:1000/default
    at java.sql.DriverManager.getConnection(DriverManager.java:689)
    at java.sql.DriverManager.getConnection(DriverManager.java:247)
    at table.main(table.java:20)

我的hive-site.xml包含

<property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>MySQL JDBC driver class</description>
  </property>

<property>
   <name>javax.jdo.option.ConnectionURL</name>
   <value>jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true</value>
   <description>metadata is stored in a MySQL server </description>
</property>

我已经使用MySQL配置了hive的元存储。那么我的ConnectionURL和Drivername在JAVA连接代码中应该怎么做? 我没有得到我错的地方。请为上述问题提供解决方案。

1 个答案:

答案 0 :(得分:0)

要使用JDBC API运行配置单元查询,您需要先启动hiveserver2。在hive-site.xml文件中配置thrift服务器端口,如下所示

<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
<description>TCP port number to listen on, default 10000</description>
</property>

使用命令

启动hiveserver2
cd $HIVE_HOME/bin    
./hiveserver2

此外,您还需要将以下依赖项添加到项目中。

Hive-jdbc-*-standalone.jar

hive-jdb-*.jar

hive-metastore-*.jar

hive-service-*.jar

之后尝试运行程序。您可以参考to this blog以获取有关使用java程序运行配置单元查询的分步过程的更多信息。