【问题标题】:How to create tables from jdbc program in hortonworks using Hive?如何使用 Hive 从 hortonworks 中的 jdbc 程序创建表?
【发布时间】:2018-04-06 11:45:02
【问题描述】:

我想使用 JDBC 在 Hive 中创建表。这是我试过的代码,

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

public class HiveClient {
private static String driverName = "com.mysql.jdbc.Driver";
public static void main(String[] args) {
Connection con=null;
  // Register driver and create driver instance
try {
      Class.forName(driverName);
      // get connection
      con = DriverManager.getConnection("jdbc:mysql://sandbox-hdp.hortonworks.com/hive?createDatabaseIfNotExist=true/userdb", "root", "dc123");

     // create statement
     Statement stmt = con.createStatement();

  // execute statement
  stmt.executeQuery("CREATE TABLE IF NOT EXISTS "
     +" employee ( eid int, name String, "
     +" salary String, destignation String)"
     +" COMMENT ‘Employee details’"
     +" ROW FORMAT DELIMITED"
     +" FIELDS TERMINATED BY ‘\t’"
     +" LINES TERMINATED BY ‘\n’"
     +" STORED AS TEXTFILE;");

  System.out.println(" Table employee created.");
  con.close();
}catch(Exception e){
System.out.println(e);
}

 }
}

此程序显示异常:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver.

请帮我解决这个问题。

【问题讨论】:

  • 我认为你必须使用:private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";
  • @hisi 但是我应该添加任何外部罐子吗?它仍然显示类未找到异常。
  • 您必须在代码中将com.mysql.jdbc.Driver 替换为org.apache.hadoop.hive.jdbc.HiveDriver

标签: java jdbc hive ambari hortonworks-sandbox


【解决方案1】:

首先,您从 MySQL 连接示例中复制了代码,并尝试将查询替换为 HiveQL,但这是行不通的。

com.mysql.jdbc.Driver 或 jdbc:mysql 都不会让您连接到 Hive。 请参阅 Using JDBC 上的 Hive wiki 以连接到 Hive。


该错误仅表示您的类路径在类路径中没有 MySQL 驱动程序。即使您更改了字符串,您也会收到类似的 Hive 错误。

我强烈建议使用 Maven 或 Gradle 来加载您的依赖项。

<dependency>
    <groupId>org.apache.hive</groupId>
    <artifactId>hive-jdbc</artifactId>
    <version>1.2.1</version>
</dependency>

另外,sandbox-hdp.hortonworks.com/hive 需要像 sandbox-hdp.hortonworks.com:10000/hive 这样的端口号,而且您不需要 ?createDatabaseIfNotExist=true/userdb。沙盒上 Hive root/dc123 的用户凭据也没有。


如果您尝试连接到 Hive metastore,我相信它在 Hortonworks Sandbox 中运行 PostgreSQL,那么您再次使用了错误的 JDBC 驱动程序、连接 URL、查询语法,和服务器端口信息。

【讨论】:

  • 谢谢@cricket_007
【解决方案2】:

更改连接字符串对我有用

Connection con = DriverManager.getConnection( "jdbc:hive2://58.184.82.67:10000/default", "", "");

在pom.xml中添加了3个依赖,

<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-auth</artifactId>
<version>2.7.3</version>
</dependency>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    相关资源
    最近更新 更多