Hadoop版本:hadoop-2.9.2.tar.gz,Hive版本:apache-hive-2.3.6-src.tar.gz,安装Hive可查看:CentOS安装Hive

保证Hive以正确启动hiveserver2。

pom.xml依赖:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.zhi.test</groupId>
<artifactId>hive-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>hive-test</name>
<url>http://maven.apache.org</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- Logger -->
<lg4j2.version>2.12.1</lg4j2.version>
</properties> <dependencies>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>2.3.6</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency> <!-- Logger(log4j2) -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${lg4j2.version}</version>
</dependency>
<!-- Log4j 1.x API Bridge -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>${lg4j2.version}</version>
</dependency>
<!-- SLF4J Bridge -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${lg4j2.version}</version>
</dependency> <dependency>
<groupId>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
<version>1.8</version>
<scope>system</scope>
<systemPath>D:\Program Files\Java\jdk1.8.0_191\lib/tools.jar</systemPath>
</dependency> <dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.5.2</version>
</dependency>
</dependencies>
</project>

Java代码:

package com.zhi.test.hive;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.TestMethodOrder;
import org.junit.jupiter.api.TestInstance.Lifecycle; /**
* 使用JDBC进行Hive操作
*
* @author zhi
* @since 2019年9月11日11:55:00
*
*/
@TestInstance(Lifecycle.PER_CLASS)
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class HiveTest {
private final Logger logger = LogManager.getLogger(this.getClass());
private static Connection connection = null; @BeforeAll
public void init() throws Exception {
try {
Class.forName("org.apache.hive.jdbc.HiveDriver");
connection = DriverManager.getConnection("jdbc:hive2://192.168.107.143:10000/test_db", "root", "abc123");
} catch (SQLException | ClassNotFoundException e) {
logger.error("创建Hive连接失败", e);
throw e;
}
} @AfterAll
public void destory() throws Exception {
if (connection != null) {
connection.close();
}
} /**
* 创建数据库
*/
@Order(1)
@Test
public void createDatabase() {
String sql = "create database test_db";
logger.info("创建数据库,脚本:{}", sql);
try (Statement statement = connection.createStatement()) {
statement.execute(sql);
logger.info("创建数据库成功");
} catch (SQLException e) {
logger.error("创建数据库出错", e);
}
} /**
* 查询数据库
*/
@Order(2)
@Test
public void showDatabases() {
String sql = "show databases";
logger.info("查询数据库,脚本:{}", sql);
try (Statement statement = connection.createStatement(); ResultSet rs = statement.executeQuery(sql)) {
while (rs.next()) {
logger.info("查询到数据库:{}", rs.getString(1));
}
} catch (SQLException e) {
logger.error("创建数据库出错", e);
}
} /**
* 创建表
*/
@Order(3)
@Test
public void createTable() {
String sql = "create table user_tb(id int, name string) row format delimited fields terminated by ','";
logger.info("创建表,脚本:{}", sql);
try (Statement statement = connection.createStatement()) {
statement.execute(sql);
logger.info("创建表成功");
} catch (SQLException e) {
logger.error("创建表出错", e);
}
} /**
* 查询所有表
*/
@Order(3)
@Test
public void showTables() {
String sql = "show tables";
logger.info("查询所有表,脚本:{}", sql);
try (Statement statement = connection.createStatement(); ResultSet rs = statement.executeQuery(sql)) {
while (rs.next()) {
logger.info("查询到表:{}", rs.getString(1));
}
} catch (SQLException e) {
logger.error("查询所有表出错", e);
}
} /**
* 查看表结构
*/
@Order(4)
@Test
public void descTable() {
String sql = "desc user_tb";
logger.info("查看表结构,脚本:{}", sql);
try (Statement statement = connection.createStatement(); ResultSet rs = statement.executeQuery(sql)) {
while (rs.next()) {
logger.info("字段名:{},类型:{}", rs.getString(1), rs.getString(2));
}
} catch (SQLException e) {
logger.error("查看表结构出错", e);
}
} /**
* 导入数据,data.txt中的数据为格式为:<br>
* 1,张三<br>
* 2,李四
*/
@Order(5)
@Test
public void loadData() {
String sql = "load data local inpath '/home/data.txt' overwrite into table user_tb";
logger.info("导入数据,脚本:{}", sql);
try (Statement statement = connection.createStatement()) {
statement.execute(sql);
logger.info("导入数据成功");
} catch (SQLException e) {
logger.error("导入数据出错", e);
}
} /**
* 查询数据
*/
@Order(6)
@Test
public void selectData() {
String sql = "select * from user_tb";
logger.info("查询数据,脚本:{}", sql);
try (Statement statement = connection.createStatement(); ResultSet rs = statement.executeQuery(sql)) {
while (rs.next()) {
logger.info("id={},name={}", rs.getInt("id"), rs.getString("name"));
}
} catch (SQLException e) {
logger.error("查询数据出错", e);
}
} /**
* 查数量
*/
@Order(7)
@Test
public void count() {
String sql = "select count(1) from user_tb";
logger.info("查数量,脚本:{}", sql);
try (Statement statement = connection.createStatement(); ResultSet rs = statement.executeQuery(sql)) {
while (rs.next()) {
logger.info("数量={}", rs.getInt(1));
}
} catch (SQLException e) {
logger.error("查数量出错", e);
}
} /**
* 删除表
*/
@Order(8)
@Test
public void deopTable() {
String sql = "drop table if exists user_tb";
logger.info("删除表,脚本:{}", sql);
try (Statement statement = connection.createStatement()) {
statement.execute(sql);
logger.info("删除表成功");
} catch (SQLException e) {
logger.error("删除表出错", e);
}
} /**
* 删除数据库
*/
@Order(9)
@Test
public void dropDatabase() {
String sql = "drop database if exists test_db";
logger.info("删除数据库,脚本:{}", sql);
try (Statement statement = connection.createStatement()) {
statement.execute(sql);
logger.info("删除数据库成功");
} catch (SQLException e) {
logger.error("删除数据库出错", e);
}
}
}

代码执行结果:

2019-09-11 22:05:52.324 [main] INFO  org.apache.hive.jdbc.Utils.parseURL 325 - Supplied authorities: 192.168.107.143:10000
2019-09-11 22:05:52.334 [main] INFO org.apache.hive.jdbc.Utils.parseURL 444 - Resolved authority: 192.168.107.143:10000
2019-09-11 22:05:52.772 [main] INFO com.zhi.test.hive.HiveTest.createDatabase 58 - 创建数据库,脚本:create database test_db
2019-09-11 22:05:53.098 [main] INFO com.zhi.test.hive.HiveTest.createDatabase 61 - 创建数据库成功
2019-09-11 22:05:53.131 [main] INFO com.zhi.test.hive.HiveTest.showDatabases 74 - 查询数据库,脚本:show databases
2019-09-11 22:05:53.332 [main] INFO com.zhi.test.hive.HiveTest.showDatabases 77 - 查询到数据库:default
2019-09-11 22:05:53.332 [main] INFO com.zhi.test.hive.HiveTest.showDatabases 77 - 查询到数据库:test_db
2019-09-11 22:05:53.347 [main] INFO com.zhi.test.hive.HiveTest.createTable 91 - 创建表,脚本:create table user_tb(id int, name string) row format delimited fields terminated by ','
2019-09-11 22:05:53.623 [main] INFO com.zhi.test.hive.HiveTest.createTable 94 - 创建表成功
2019-09-11 22:05:53.644 [main] INFO com.zhi.test.hive.HiveTest.showTables 107 - 查询所有表,脚本:show tables
2019-09-11 22:05:53.784 [main] INFO com.zhi.test.hive.HiveTest.showTables 110 - 查询到表:user_tb
2019-09-11 22:05:53.784 [main] INFO com.zhi.test.hive.HiveTest.showTables 110 - 查询到表:usertest_tb
2019-09-11 22:05:53.806 [main] INFO com.zhi.test.hive.HiveTest.descTable 124 - 查看表结构,脚本:desc user_tb
2019-09-11 22:05:53.971 [main] INFO com.zhi.test.hive.HiveTest.descTable 127 - 字段名:id,类型:int
2019-09-11 22:05:53.971 [main] INFO com.zhi.test.hive.HiveTest.descTable 127 - 字段名:name,类型:string
2019-09-11 22:05:53.987 [main] INFO com.zhi.test.hive.HiveTest.loadData 143 - 导入数据,脚本:load data local inpath '/home/data.txt' overwrite into table user_tb
2019-09-11 22:05:55.106 [main] INFO com.zhi.test.hive.HiveTest.loadData 146 - 导入数据成功
2019-09-11 22:05:55.119 [main] INFO com.zhi.test.hive.HiveTest.selectData 159 - 查询数据,脚本:select * from user_tb
2019-09-11 22:05:55.870 [main] INFO com.zhi.test.hive.HiveTest.selectData 162 - id=1,name=张三
2019-09-11 22:05:55.871 [main] INFO com.zhi.test.hive.HiveTest.selectData 162 - id=2,name=李四
2019-09-11 22:05:55.890 [main] INFO com.zhi.test.hive.HiveTest.count 176 - 查数量,脚本:select count(1) from user_tb
2019-09-11 22:05:57.952 [main] INFO com.zhi.test.hive.HiveTest.count 179 - 数量=2
2019-09-11 22:05:57.983 [main] INFO com.zhi.test.hive.HiveTest.deopTable 193 - 删除表,脚本:drop table if exists user_tb
2019-09-11 22:05:58.256 [main] INFO com.zhi.test.hive.HiveTest.deopTable 196 - 删除表成功
2019-09-11 22:05:58.268 [main] INFO com.zhi.test.hive.HiveTest.dropDatabase 209 - 删除数据库,脚本:drop database if exists test_db
2019-09-11 22:05:58.494 [main] INFO com.zhi.test.hive.HiveTest.dropDatabase 212 - 删除数据库成功

Java操作Hive的更多相关文章

  1. java操作hive和beeline的使用

    一.java操作hive 1.启动服务:hiveserver2,让hive开启与外部连接的服务 nohup hiveserver2 1>/dev/null 2>/dev/null & ...

  2. 基于CDH5.x 下面使用eclipse 操作hive 。使用java通过jdbc连接HIVESERVICE 创建表

    基于CDH5.x 下面使用eclipse 操作hive .使用java通过jdbc连接HIVESERVICE 创建表 import java.sql.Connection; import java.s ...

  3. 通过 Spark R 操作 Hive

    作为数据工程师,我日常用的主力语言是R,HiveQL,Java与Scala.R是非常适合做数据清洗的脚本语言,并且有非常好用的服务端IDE——RStudio Server:而用户日志主要储存在hive ...

  4. 使用Spring Boot操作Hive JDBC时,启动时报出错误:NoSuchMethodError: org.eclipse.jetty.servlet.ServletMapping.setDef

    使用Spring Boot操作Hive JDBC时,启动时报出错误:NoSuchMethodError: org.eclipse.jetty.servlet.ServletMapping.setDef ...

  5. 大数据学习day25------spark08-----1. 读取数据库的形式创建DataFrame 2. Parquet格式的数据源 3. Orc格式的数据源 4.spark_sql整合hive 5.在IDEA中编写spark程序(用来操作hive) 6. SQL风格和DSL风格以及RDD的形式计算连续登陆三天的用户

    1. 读取数据库的形式创建DataFrame DataFrameFromJDBC object DataFrameFromJDBC { def main(args: Array[String]): U ...

  6. Java操作Sqlite数据库-jdbc连接

    Java操作Sqlite数据库步骤: 1. 导入Sqlite jdbc 本文使用sqlite-jdbc-3.7.2.jar,下载地址 http://pan.baidu.com/s/1kVHAGdD 2 ...

  7. 【MongoDB for Java】Java操作MongoDB

    上一篇文章: http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html介绍到了在MongoDB的控制台完成MongoDB的数据操作,通过 ...

  8. Java操作Oracle

    public class DBCon { // 数据库驱动对象 public static final String DRIVER = "oracle.jdbc.driver.OracleD ...

  9. JAVA操作ORACLE数据库的存储过程

    一.任务提出 JAVA操作oracle11g存储过程实验需要完成以下几个实例: 1.调用没有返回参数的过程(插入记录.更新记录) 2.有返回参数的过程 3.返回列表的过程 4.返回带分页的列表的过程. ...

随机推荐

  1. pom文件语法无误却报红叉(Unknown error)的可能原因

    本文链接:https://blog.csdn.net/Little_Stars/article/details/94553090可能原因及解决办法: >> 缓存问题,只要 “Maven - ...

  2. 15、VUEX-Store

    1.什么是VUEX Vuex是管理vue的组件状态的工具. 个人理解:vuex是管理组件之间通信的一个插件. 2.为什么要用VUEX 我们知道组件之间是独立的,组件之间想要实现通信,我目前知道的就只有 ...

  3. Sql与Oracle的差异

    /*整理背景201403订单中心数据库迁移(整理Oracle与SQL的差异)整理规则第一句为SQL Server 第二句为Oracle*/--数据类型int integervarchar varcha ...

  4. 浅谈Spring解决循环依赖的三种方式

    引言:循环依赖就是N个类中循环嵌套引用,如果在日常开发中我们用new 对象的方式发生这种循环依赖的话程序会在运行时一直循环调用,直至内存溢出报错.下面说一下Spring是如果解决循环依赖的. 第一种: ...

  5. https网站部署成功 CA证书申请 IIS配置

    https://www.cnblogs.com/lichunting/p/9274422.html#4276645 参考文档解决方案

  6. 手机网页唤醒支付宝APP发送加好友验证

    手机网页唤醒支付宝APP发送加好友验证 <!DOCTYPE html> <html> <head> <meta charset="utf-8&quo ...

  7. php+Apache2+Nginx+Mysql

        Nginx         1.安装Nginx     sudo apt-get clean     sudo apt-get update     sudo apt-get install ...

  8. Django框架(六)--模板层:变量、过滤器、标签、自定义标签和过滤器

    将页面的设计和Python的代码分离开会更干净简洁更容易维护. 我们可以使用 Django的 模板系统 (Template System)来实现这种模式 # django模板修改的视图函数 def c ...

  9. Nginx 核心配置-新建一个web站点

    Nginx 核心配置-新建一个web站点 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Nginx基础配置常用参数说明 [root@node101.yinzhengjie.or ...

  10. 逆向破解之160个CrackMe —— 027

    CrackMe —— 027 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...