Java调用Hive的操作

2 篇文章 0 订阅
1 篇文章 0 订阅

     如何在Java中调用Hive的操作步骤如下:

1、启动Hive远程服务:

      命令: hive --service hiveserver2  &

      启动成功,命令框出现以下界面:

     

2、在Eclipse中创建Hadoop 项目,导入Hive的必须包

  Hive的必须包如下:

   hive-exec-2.0.0.jar

   hive-jdbc-2.0.0.jar

   hive-service-2.0.0.jar

   httpclient-4.4.jar

   httpcore-4.4.jar

3、编写Java调用Hive的相关函数,代码如下:

package com;

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

public class HiveTestCase {
public static void query(Statement stmt) throws Exception {
String querySQL = "select a.* from java_test a";
ResultSet res = stmt.executeQuery(querySQL); // 执行查询语句
while (res.next()) {
System.out.print("id:" + res.getString("id") + " ");
System.out.println("name:" + res.getString(2) + " ");
}
}

public static void create(Statement stmt) throws Exception {
String createSQL = "create table java_test (id string, name string) row format delimited fields terminated by '\t' ";
boolean bool = stmt.execute(createSQL);
System.out.println("创建表是否成功:" + bool);
}


public static void drop(Statement stmt) throws Exception {
String dropSQL = "drop table java_test";
boolean bool = stmt.execute(dropSQL);
System.out.println("删除表是否成功:" + bool);
}

public static void load(Statement stmt) throws Exception {
String loadSQL = "load data local inpath '/home/hadoop/test' into table java_test ";
boolean bool = stmt.execute(loadSQL);
System.out.println("导入数据是否成功:" + bool);
}

public static void main(String[] args) throws Exception {

Class.forName("org.apache.hive.jdbc.HiveDriver");
Connection con = DriverManager.getConnection(
"jdbc:hive2://192.168.26.131:10000/test", "", "");
Statement stmt = con.createStatement();

drop(stmt); // 执行删除语句
create(stmt); // 执行建表语句
load(stmt); // 执行导入语句
query(stmt); // 执行查询语句
}
}

4、如果出现错误:User: hadoop is not allowed to impersonate 

解决:在hive-site.xml文件中添加一下配置:

   <property>

      <name>hive.metastore.sasl.enabled</name>

      <value>false</value>

      <description>If true, the metastore Thrift interface will be secured with SASL.  

                   Clients must authenticate with Kerberos.</description>

   </property>

   <property>

       <name>hive.server2.enable.doAs</name>

       <value>false</value>

   </property>

   <property>

       <name>hive.server2.authentication</name>

       <value>NONE</value>

   </property>

   参考链接:

   http://stackoverflow.com/questions/36909002/authorizationexception-user-not-allowed-to-impersonate-user

5、操作过程存在的疑问:

执行以上HQL语句,都能在Hive中成功执行创建表、删除表、导入数据等,但是函数返回的布尔值为什么为 false 呢?

解答:

这个execute方法执行一个sql语句并且指向第一个返回值。
返回值:true表示第一个返回值是一个ResultSet对象;false表示这是一个更新个数或者没有结果集。   

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java可以通过Hive JDBC驱动来与Hive进行交互。下面是使用Java连接Hive并执行查询的基本步骤: 1. 首先,确保已经安装了Hive,并启动了HiveServer2服务。 2. 在Java项目中,导入Hive JDBC驱动的依赖项。你可以在Maven或Gradle中添加以下依赖项: ```xml <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>3.1.2</version> </dependency> ``` 3. 在Java代码中,导入所需的类: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; ``` 4. 创建一个连接到Hive的数据库连接: ```java String driverName = "org.apache.hive.jdbc.HiveDriver"; String connectionUrl = "jdbc:hive2://localhost:10000/default"; Class.forName(driverName); Connection connection = DriverManager.getConnection(connectionUrl, "", ""); ``` 5. 创建一个Statement对象,用于执行Hive查询: ```java Statement statement = connection.createStatement(); ``` 6. 执行Hive查询,并获取结果集: ```java String query = "SELECT * FROM your_table"; ResultSet resultSet = statement.executeQuery(query); ``` 7. 处理结果集并输出结果: ```java while (resultSet.next()) { // 处理每一行数据 String column1Value = resultSet.getString("column1"); String column2Value = resultSet.getString("column2"); System.out.println(column1Value + "\t" + column2Value); } ``` 8. 最后,关闭连接和相关资源: ```java resultSet.close(); statement.close(); connection.close(); ``` 这是一个基本的示例,你可以根据你的需求进行进一步的操作和扩展。注意,你可能需要根据你的Hive配置修改连接URL和查询语句。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风逝老大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值