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. 使“Cmder Here”菜单在Tab页开新窗口

    Cmder是一个非常好用的的控制台命令行,我们在实际使用的时候,经常通过如下指令将其注册到右键菜单: Cmder.exe /REGISTER ALL 这样就可以在任意文件夹下快速打开Cmder,并且能 ...

  2. C# 打开mpp文件(Microsoft object)问题总结

    有需求就有解决方案,早上还没有听说过什么是 mpp 文件,下午已经能成功的将功能实现,这难道就是程序员的职业素养?哈哈哈哈 从网上找了很多方法,最后自己找到一个十分简单的打开 mpp 文件的方法: p ...

  3. Python: 把txt文件转换成csv

    最近在项目上需要批量把txt文件转成成csv文件格式,以前是手动打开excel文件,然后导入txt来生产csv文件,由于这已经变成每周需要做的事情,决定用python自动化脚本来实现,思路: 读取文件 ...

  4. sql中别名加as和不加as的区别

    select UserName as 用户名,PassWord as 密码 from user 与 select UserName 用户名,PassWord 密码 from user 中as用于不用的 ...

  5. Haskell路线

    @ 知乎 @ <I wish i have learned haskell> ———— 包括: Ranks, forall, Monad/CPS,  monadic parser, FFI ...

  6. Django---CSRF的装饰器,CSRF的流程,JSON数据格式,ajax技术(基于JQ实现)

    Django---CSRF的装饰器,CSRF的流程,JSON数据格式,ajax技术(基于JQ实现) 一丶CSRF相关的装饰器 from django.utils.decorators import m ...

  7. Windows Server2008R2,ServerWin2012 R2设置自动登录注册表配置

    serverWin2008 R2 2012自动登录一般是通过control userpasswords2 命令修改,其实注册表修改更简单.复制以下保存为xx.reg文件导入即可即可. Windows ...

  8. SQL Server强制释放内存

    --强制释放内存 CREATE procedure [dbo].ClearMemory as begin --清除所有缓存 DBCC DROPCLEANBUFFERS --打开高级配置 EXEC (' ...

  9. jQuery实现的全选、反选和获取当前所有选中的值功能

    链接: jQuery实现的全选.反选和获取当前所有选中的值功能 <ul id="list"> <li><label><input type ...

  10. spoon(kettle)基本配置(连接Mysql和Oracle)

    1.下载spoon包和驱动 可以去spoon官网下载需要的spoon版本 官网 :http://kettle.pentaho.org/ 下载的最新版本的kettle是:pdi-ce-7.1.0.0-1 ...