在上文中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示例的更多相关文章

  1. 三 Hive 数据处理 自定义函数UDF和Transform

    三  Hive 自定义函数UDF和Transform 开篇提示: 快速链接beeline的方式: ./beeline -u jdbc:hive2://hadoop1:10000 -n hadoop 1 ...

  2. Hive(三)hive的高级操作

    一.hive的各种join操作 语法结构:join_table:table_reference JOIN table_factor [join_condition]| table_reference ...

  3. php发送post请求的三种方法示例

    本文分享下php发送post请求的三种方法与示例代码,分别使用curl.file_get_content.fsocket来实现post提交数据,大家做个参考. php发送post请求的三种方法,分别使 ...

  4. C# 委托的三种调用示例(同步调用 异步调用 异步回调)

    首先,通过代码定义一个委托和下面三个示例将要调用的方法: 复制代码 代码如下: public delegate int AddHandler(int a,int b);    public class ...

  5. torm入门(三)HelloWorld示例

    一.配置开发环境 storm有两种操作模式: 本地模式和远程模式.使用本地模式的时候,你可以在你的本地机器上开发测试你的topology, 一切都在你的本地机器上模拟出来; 用远程模式的时候你提交的t ...

  6. Storm入门(三)HelloWorld示例

    一.配置开发环境 storm有两种操作模式: 本地模式和远程模式.使用本地模式的时候,你可以在你的本地机器上开发测试你的topology, 一切都在你的本地机器上模拟出来; 用远程模式的时候你提交的t ...

  7. Hive之示例一:基本操作与案例

    1. 创建数据库,切换数据库 create database testdb; use testdb; 2. 创建管理表 create table emp( empno int, empname str ...

  8. 前端基础之BOM和DOM和三个小示例(计时器、搜索框、select联动)

    一.BOM和DOM JavaScript分为 ECMAScript,DOM,BOM. BOM(Browser Object Model)是指浏览器对象模型,它使 JavaScript 有能力与浏览器进 ...

  9. hive学习(三) hive的分区

    1.Hive 分区partition 必须在表定义时指定对应的partition字段 a.单分区建表语句: create table day_table (id int, content string ...

随机推荐

  1. jdk动态代理 案例

    import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflec ...

  2. 1416: Kick Ass Biu [几何]

    点击打开链接 1416: Kick Ass Biu [几何] 时间限制: 1 Sec 内存限制: 128 MB 提交: 174 解决: 35 统计 题目描述 在玩Kick Ass的时候,可以发现子弹的 ...

  3. ROS(URDF机器人建模)

    新建功能包mbot_description 在功能包下新建文件config,launch,meshes,urdf. 在launch文件夹下新建文件display_mbot_base_urdf.laun ...

  4. PHP中count()和sizeof()

    php中获取数组长度函数有两个count()和sizeof(),如果传递给这个函数的数组是一个空数组,或者是一个没有经过设定的变量,返回的数组元素个数就是0.两函数功能一样,手册上讲,sizeof() ...

  5. CTF中常见的 PHP 弱类型漏洞总结

    作者:ZERO    所属团队:Arctic Shell 参考资料: http://archimesan.me/2017/12/21/php%E5%BC%B1%E7%B1%BB%E5%9E%8B%E6 ...

  6. P3292 [SCOI2016]幸运数字

    题目链接 题意分析 一句话题意 : 树上一条链中挑选出某些数 异或和最大 我们可以考虑维护一个树上倍增线性基 然后倍增的时候 维护一个线性基合并就可以了 写起来还是比较容易的 CODE: #inclu ...

  7. URL中 # (hash)的含义

    url中#(hash)的含义 hash 属性是一个可读可写的字符串,该字符串是 URL 的锚部分(从 # 号开始的部分) 1."#"代表网页中的一个位置.其右面的字符,就是该位置的 ...

  8. QuantLib 金融计算——基本组件之 InterestRate 类

    目录 QuantLib 金融计算--基本组件之 InterestRate 类 InterestRate 对象的构造 一些常用的成员函数 如果未做特别说明,文中的程序都是 Python3 代码. Qua ...

  9. Django中的Cookie--实现登录

    Django中的Cookie--实现登录 Django Cookie  Cookie Cookie 是什么 保存在浏览器端的键值对,让服务器提取有用的信息. 为什么要有 Cookie 因为HTTP请求 ...

  10. HDU - 6096 处理后缀的字典树

    题意:给定n个字符串,m次询问,每次询问多少个字符串前缀是pre且后缀是suf,前后缀不可相交 字典树同时存储前后缀,假设字符串长为len则更新2*len个节点,依次按s[0],s[len-1],s[ ...