三、hive JavaAPI示例
在上文中https://www.cnblogs.com/lay2017/p/9973370.html
我们通过hive shell去操作hive,本文我们以Java代码的示例去对hive执行加载数据和查询数据来演示JavaAPI如何通过JDBC来操作hive的
hive client的更多内容可以参考:https://cwiki.apache.org/confluence/display/Hive/HiveClient
一、依赖
由于hive的服务端基于1.2.2版本,所以这里采用jdbc1.2.2,否则你可能报一些奇怪的错误(下载依赖需要一点时间)
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.6.5</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>1.2.2</version>
</dependency>
二、准备
我们在/tmp目录下新建一个user.txt,内容如下:
1 lay
2 marry
3 gary
然后我们启动hdfs,进入hive安装目录:/usr/local/hadoop/hive/apache-hive-1.2.2-bin,启动Hive shell,在test数据库里面新建一张表t_user:
注意,这里建表,指明了格式字段空格分隔,换行'\n'分隔
CREATE TABLE users(id int, name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' LINES TERMINATED BY '\n' STORED AS TEXTFILE;
完毕以后,我们关闭Hive shell,如果你采用derby内置数据库,但是不关闭hive你无法再启动另外一个
我们在hive安装目录,启动hiveserver2,执行命令
hiveserver2
然后你会看到界面被卡住了,其实hive server已经在运行了,如果你打开另一个Linux客户端,你会看到一个runjar的程序在运行

以上,我们启动hiveserver2,准备好了服务端的数据
三、JDBC操作
下面,我们使用jdbc进行操作,代码如下:
hive默认端口是10000,如果你没有配置,并没有通过启动指定的话,默认就是10000;
这里的master是配置过的hostname和ip的映射,如果你直接使用Ip也行。如果你希望配置,可以参考:https://www.cnblogs.com/lay2017/p/9953371.html
驱动采用org.apache.hive.jdbc.HiveDriver,如果你采用org.apache.hadoop.hive.jdbc.HiveDriver会报classNotFound因为,不同版本要求的驱动是不同的,本文基于1.2.2版本,所以要求前者
URL地址采用jdbc:hive2:...而不是jdbc:hive...这是因为我们采用Hiveserver2启动不是hiveserver,如果URL不匹配那么是拿不到connection的
import java.sql.*;
public class HiveJdbcDemo {
private static String DRIVER = "org.apache.hive.jdbc.HiveDriver";
private static String URL = "jdbc:hive2://master:10000/test";
private static String USERNAME = "";
private static String PASSWORD = "";
private static Connection connection;
private static Statement statement;
static {
try {
// 加载hive jdbc驱动
Class.forName(DRIVER);
// 获取连接
connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
// 获取statement
statement = connection.createStatement();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws SQLException {
insert();
select();
}
public static void insert() throws SQLException {
String sql = "load data local inpath '/tmp/user.txt' overwrite into table t_user ";
statement.execute(sql);
}
public static void select() throws SQLException {
String sql = "select * from t_user";
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()) {
System.out.println(resultSet.getLong("id"));;
System.out.println(resultSet.getString("name"));;
}
}
}
这里的简单代码示例,我们连接了test数据库,然后将/tmp/user.txt文本加载到了数据库中,并通过select语句简单将结果查询了出俩,输出如下:

请注意:如果你输出的都是null,那么可能是因为你在建表的时候没有指明格式,所以加载数据的时候无法按照格式加载进入数据,所以查询自然也就查询出了null。
所以,请确保create table的时候指定的格式,与你的txt文档的格式是一致的。
三、hive JavaAPI示例的更多相关文章
- 三 Hive 数据处理 自定义函数UDF和Transform
三 Hive 自定义函数UDF和Transform 开篇提示: 快速链接beeline的方式: ./beeline -u jdbc:hive2://hadoop1:10000 -n hadoop 1 ...
- Hive(三)hive的高级操作
一.hive的各种join操作 语法结构:join_table:table_reference JOIN table_factor [join_condition]| table_reference ...
- php发送post请求的三种方法示例
本文分享下php发送post请求的三种方法与示例代码,分别使用curl.file_get_content.fsocket来实现post提交数据,大家做个参考. php发送post请求的三种方法,分别使 ...
- C# 委托的三种调用示例(同步调用 异步调用 异步回调)
首先,通过代码定义一个委托和下面三个示例将要调用的方法: 复制代码 代码如下: public delegate int AddHandler(int a,int b); public class ...
- torm入门(三)HelloWorld示例
一.配置开发环境 storm有两种操作模式: 本地模式和远程模式.使用本地模式的时候,你可以在你的本地机器上开发测试你的topology, 一切都在你的本地机器上模拟出来; 用远程模式的时候你提交的t ...
- Storm入门(三)HelloWorld示例
一.配置开发环境 storm有两种操作模式: 本地模式和远程模式.使用本地模式的时候,你可以在你的本地机器上开发测试你的topology, 一切都在你的本地机器上模拟出来; 用远程模式的时候你提交的t ...
- Hive之示例一:基本操作与案例
1. 创建数据库,切换数据库 create database testdb; use testdb; 2. 创建管理表 create table emp( empno int, empname str ...
- 前端基础之BOM和DOM和三个小示例(计时器、搜索框、select联动)
一.BOM和DOM JavaScript分为 ECMAScript,DOM,BOM. BOM(Browser Object Model)是指浏览器对象模型,它使 JavaScript 有能力与浏览器进 ...
- hive学习(三) hive的分区
1.Hive 分区partition 必须在表定义时指定对应的partition字段 a.单分区建表语句: create table day_table (id int, content string ...
随机推荐
- 2018-2019-2 20165219《网络对抗技术》Exp4 恶意代码分析
基础问题回答 实验目的 监控系统的运行状态,看有没有可疑的程序在运行 分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals,systracer套 ...
- 深入了解java虚拟机(JVM) 第七章 内存分配策略
理解了jvm内存分配策略不仅是程序性能调优的重要知识,还能够给养成自己一种良好的代码思路,一个程序的代码差异往往都是在这里体现出来的. 一.对象优先分配到Eden区域 一般来说,新创建的对象都会直 ...
- 循环语句(循环for与while等)
1.1for循环 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- “全栈2019”Java异常第二十章:自定义异常详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- luoguP5068 [Ynoi2015]我回来了
https://www.luogu.org/problemnew/show/P5068 ynoi 中的良心题啊 考虑用 bitset 来维护里一个点距离小于 $ y_i $ 的点,那么答案就是一堆 b ...
- Wannafly挑战赛29题解
这套题目非常有意思啊23333--话说为啥没有上条先生的呢-- 传送门 \(A\) 御坂美琴 蠢了--首先先判总共加起来等不等于\(n\),不是的话就不行 然后dfs记录\(n\)不断分下去能分成哪些 ...
- mysql 添加索引 mysql 如何创建索引
1.添加PRIMARY KEY(主键索引) mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 2.添加UNIQUE(唯一索引 ...
- 【Map,HashMap,Vector,List】资料汇总
深入学习HashMap实现原理 http://www.cnblogs.com/xwdreamer/archive/2012/06/03/2532832.html 深入学习Vector原理 http:/ ...
- Laravel 的核心概念
工欲善其事,必先利其器.在开发Xblog的过程中,稍微领悟了一点Laravel的思想.确实如此,这篇文章读完你可能并不能从无到有写出一个博客,但知道Laravel的核心概念之后,当你再次写起Larav ...
- leetcode-49-字母异位词分组(神奇的哈希)
题目描述: 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "t ...