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. Linux之《荒岛余生》(三)内存篇

    原文:https://juejin.im/post/5c00aee06fb9a049be5d3641 小公司请求量小,但喜欢滥用内存,开一堆线程,大把大把往jvm塞对象,最终问题是内存溢出. 大公司并 ...

  2. php-fpm解读-进程管理的三种模式

    php-fpm进程管理一共有三种模式:ondemand.static.dynamic,我们可以在同一个fpm的master配置三种模式,看下图1.php-fpm的工作模式和nginx类似,都是一个ma ...

  3. PIE SDK打开自定义栅格数据

    1. 数据介绍 信息提取和解译的过程中,经常会生成一部分中间临时栅格数据,这些数据在执行完对应操作后就失去了存在的价值,针对这种情况,PIE增加了内存栅格数据集,来协助用户完成对自定义栅格数据的读取和 ...

  4. mask-rcnn解读(一):clip_boxes_graph

    此部分为mask-rcnn中clip_boxes_graph()函数的使用.首先利用代码解决基本函数的使用,然后运行代码,其细节如下:代码如下: import tensorflow as tfimpo ...

  5. destoon聚合搜索页面模板

    最近学习大型站点SEO策略,谈到关于大站需要做聚合页面tags,所以根据destoon系统自己做了一个聚合页面,在此分享给吾爱的朋友,一起学习参考! 模板演示站点:http://zhimo.yuanz ...

  6. 微信小程序中的事件

    事件 说明 bindtap bindload 当图片载入完毕时触发,event.detail = {height, width} bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒 ...

  7. python接口自动化框架

    接口测框架 安装教程 需要3.5及以上版本的python pip install -r requirements.txt 使用说明 运行manage.py创建项目 创建的项目在projects目录下 ...

  8. Margin和padding失效

    太久不写原生果然不行,Margin和padding对div有效,对span失效,原因就不解释了(元素性质,块状之类的)

  9. 在jsp页面中通过struts的标签<s:if>来判断选择显示控件

    <s:iterator value="#request.users" var="u"> <!-- 判断该条评论的评论人是不是查看这篇评论的用户 ...

  10. Python实现电子词典(图形界面)

    Python实现电子词典(图形界面) 终端电子词典:https://www.cnblogs.com/noonjuan/p/11341375.html 文件一览: .├── client.py├── d ...