三、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 ...
随机推荐
- IdHTTPServer使用注意问题
如果在同一电脑上运行多个IdHTTPServer实例,IdHTTPServer使用时候,一定要注意“DefaultPort”属性,其实真正绑定端口是这个属性决定的,所以希望IdHTTPServer绑定 ...
- Hibernate 干货
一 .hibernate概念: hibernate应用在javaee 三层框架中的dao层(web 层 --service层--dao层),在dao层实现对数据库的CRUD操作.hibernate是对 ...
- logstash-out-mongodb实现elasticsearch到Mongodb的数据同步
本文主要实现将Elasticsearch中的索引数据Index同步到Mongodb中的集合collection中. 0.前提 1)已经安装好源数据库:elasticsearch V2.X; 2)已经安 ...
- ElasticSearch安装拼音插件 elasticsearch-analysis-pinyin
elasticsearch-analysis-pinyin 是 ElasticSearch的拼音插件.强大的功能支持拼音等的搜索 1.下载源代码 源码地址https://github.com/medc ...
- forward与redirect
前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址:后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接.这样,从浏览器的地址栏中可以看到跳转后的链接地址.所以,前者 ...
- RN 中 Native 模块的注入过程
找到所有的模块 一般来说,只要在模块中声明 RCT_EXPORT_MODULE 即可.这是个宏,展开后是声明了一个函数,定义了两个函数,如下所示. #define RCT_EXPORT_MODULE( ...
- leetcode-77-组合
题目描述: 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合. 示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], ...
- C#-集合及特殊集合——★★哈希表集合★★
集合的基本信息: System.Collections命名空间包含接口和类,这些接口和类定义各种对象(如列表.队列.位组数.哈希表和字典)的集合. System.Collections.Generic ...
- [BZOJ 5072][Lydsy1710月赛]小A的树
传送门 \(\color{green}{solution}\) 嗯...其实我也不太会,所以大胆猜个结论吧(后来证了一下,然后放弃了...). 我们发现如果要使一个联通块的黑点数量为\(k\)的方案最 ...
- Codeforces Round #555 (Div. 3) E. Minimum Array 【数据结构 + 贪心】
一 题面 E. Minimum Array 二 分析 注意前提条件:$0 \le a_{i} \lt n$ 并且 $0 \le b_{i} \lt n$.那么,我们可以在$a_{i}$中任取一个数 ...