文档章节

Hive Outline - Part III(Jdbc connect on win/linux)

woodo
 woodo
发布于 2014/08/15 17:43
字数 793
阅读 52
收藏 0

官方连接: https://cwiki.apache.org/confluence/display/Hive/HiveClient


Hive 环境

CDH 5.0.1

    Hadoop 2.3

    Hive 0.13.0

    Eclipse Helios

    OS:Window 7 or CentOS 6.2


判断Hive的metastore类型

Hive的metastore有3种类型,Embeded,Locale,Remote

Embeded就是使用嵌入式进程的本地数据引擎,hive使用的是Derby,我想SqlLite应该也可以。

Locate和Remote我认为本质是一样的,都是使用独立数据引擎来存储metastore.

cdh5.0默认启动了locale 的mysql, 所以可以多个session并发访问。

具体可以去,/hive/lib/conf/hive-site里边查找ConnectionURL和ConnectionDriver



引入依赖的Jar

jdbc的依赖程序,主要来自于hive/lib, hadoop/lib, hadoop/client,所以一般把这几个目录的全部弄出来就可以搞定。

不过具体其实只用到几个,我列举我的成功案例,可以节省看官你的时间。其实这个也是我之前迷惑之处,网上都没有,还是自己动手丰衣足食吧。有人说httpclient不需要,也许,您可以试一下。

07/12/2014  10:11 PM           298,829 commons-configuration-1.6.jar
07/12/2014  10:11 PM            62,050 commons-logging-1.1.3.jar
07/12/2014  10:11 PM         2,827,295 hadoop-common-2.3.0-cdh5.1.0.jar
07/17/2014  08:42 PM        10,023,451 hive-exec-0.12.0-cdh5.1.0.jar
07/17/2014  08:42 PM           132,353 hive-jdbc-0.12.0-cdh5.1.0.jar
07/17/2014  08:42 PM         3,443,238 hive-metastore-0.12.0-cdh5.1.0.jar
07/17/2014  08:42 PM         1,755,877 hive-service-0.12.0-cdh5.1.0.jar
07/12/2014  10:11 PM           433,368 httpclient-4.2.5.jar
07/12/2014  10:11 PM           227,708 httpcore-4.2.5.jar
07/12/2014  11:52 PM           274,725 libfb303-0.9.0.jar
07/12/2014  11:53 PM           348,175 libthrift-0.9.0.cloudera.2.jar
07/12/2014  10:11 PM           489,884 log4j-1.2.17.jar
07/12/2014  10:11 PM            26,084 slf4j-api-1.7.5.jar
07/12/2014  09:42 PM             8,864 slf4j-log4j12-1.7.5.jar

菜花,上程序

iHive有两个server, hiveserver1 和 hiveserver2, 前者未来会废弃。

package com.jinbao.hive.client;

import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;

public class HiveClient2 {
	private static String driverName = "org.apache.hive.jdbc.HiveDriver";
	

	public static void main(String[] args) throws SQLException {
		System.out.print("Test for access hive by jdbc.\n");
		
	try {
			Class.forName(driverName);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			System.exit(1);
		}
	    Connection con = DriverManager.getConnection(
				"jdbc:hive2://192.168.1.1:10000/default", "hive", "cloudera");
	    // change to user 'cloudera' if having some problem.
	    
	    Statement stmt = con.createStatement();
	    String tableName = "testHiveDriverTable";
	    stmt.execute("drop table if exists " + tableName);
	    String create = "create table " + tableName + " (key int, value string)";
	    create += " row format delimited fields terminated by ','";
	    stmt.execute(create);
	    // show tables
	    String sql = "show tables '" + tableName + "'";
	    System.out.println("Running: " + sql);
	    ResultSet res = stmt.executeQuery(sql);
	    if (res.next()) {
	      System.out.println(res.getString(1));
	    }
	       // describe table
	    sql = "describe " + tableName;
	    System.out.println("Running: " + sql);
	    res = stmt.executeQuery(sql);
	    while (res.next()) {
	      System.out.println(res.getString(1) + "\t" + res.getString(2));
	    }
	 
	    // load data into table
	    // NOTE: filepath has to be local to the hive server
	    // NOTE: /tmp/a.txt is a ctrl-A separated file with two fields per line
	    String filepath = "/tmp/a.txt";
	    sql = "load data local inpath '" + filepath + "' into table " + tableName;
	    System.out.println("Running: " + sql);
	    stmt.execute(sql);
	 
	    // select * query
	    sql = "select * from " + tableName;
	    System.out.println("Running: " + sql);
	    res = stmt.executeQuery(sql);
	    while (res.next()) {
	      System.out.println(String.valueOf(res.getInt(1)) + "\t" + res.getString(2));
	    }
	 
	    // regular hive query
	    sql = "select count(1) from " + tableName;
	    System.out.println("Running: " + sql);
	    res = stmt.executeQuery(sql);
	    while (res.next()) {
	      System.out.println(res.getString(1));
	    }
		
		System.out.print("finally exit.\n");
	}
}

SOME NOTE

  1. Hive jdbc 可以执行add jar, create function, show functions, show tables, 但是目前不能执行list jars, source *.hql,等, 所以jdbc的初始化还得一点点地自己加。

  2. 最后运行一个复杂的hql查询怎么都报一个错,最后去查yarn resource manager,发现语法分析没过,但是这个语句可以在cli里运行,错误大概是:

    return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapredLocalTask. 


      解决方法,重新启动hive-server2, 命令:server hive-server2 --full-restart


总结:

Hive是个好用,但有时候很慢的好dd.


© 著作权归作者所有

woodo
粉丝 5
博文 57
码字总数 32118
作品 0
朝阳
高级程序员
私信 提问
Sqoop集成Teradata驱动

Teradata Sqoop部署过程 驱动包下载 下载sqoop-connector-teradata.jar sqoop-connector-teradata-1.6c5.jar 下载teradata jdbc jar terajdbc4.jar tdgssconfig.jar 拷贝至$SQOOP_HOME/lib 配......

Yulong_
2016/11/02
106
0
SQuirrel SQL Client 连接Hive

SQuirrel SQL Client是一个用Java写的数据库客户端,用JDBC统一数据库访问接口以后,可以通过一个统一的用户界面来操作MySQL、PostgreSQL、MSSQL、Oracle、Hive等等任何支持JDBC访问的数据库...

Yulong_
2017/08/11
491
0
3.sparkSQL整合Hive

  spark SQL经常需要访问Hive metastore,Spark SQL可以通过Hive metastore获取Hive表的元数据。从Spark 1.4.0开始,Spark SQL只需简单的配置,就支持各版本Hive metastore的访问。注意,涉...

intsmaze(刘洋)
2018/08/09
0
0
Hadoop 2.6 + Hive 1.2.1 + spark-1.4.1(1)

备注: hadoop-2.6.0-src.tar.gz是源码压缩文件。 可以用eclipse导入研究源码,或者Maven构建编译打包。 hadoop-2.6.0.tar.gz是已经官方发布版压缩包,可以直接使用。 不过官网下载的hadoop发...

片刻
2015/11/08
393
0
hive设置外部数据仓库(36)

使用MySQL作为hive的metastore 1.1 安装mysql 1.2 把mysql-connector-java-11.10.jar放到hive的lib目录下 1.3 修改hive/conf目录下的文件hive-site.xml <property> <name>javax.jdo.option.C......

肖鋭
2014/04/08
28
0

没有更多内容

加载失败,请刷新页面

加载更多

川普给埃尔多安和内堪尼亚胡的信

任性 https://twitter.com/netanyahu/status/1186647558401253377 https://edition.cnn.com/2019/10/16/politics/trump-erdogan-letter/index.htm...

Iridium
18分钟前
9
0
golang-mysql-原生

db.go package mainimport ("database/sql""time"_ "github.com/go-sql-driver/mysql")var (db *sql.DBdsn = "root:123456@tcp(127.0.0.1:3306)/test?charset=u......

李琼涛
47分钟前
5
0
编程作业20191021092341

1编写一个程序,把用分钟表示的时间转换成用小时和分钟表示的时 间。使用#define或const创建一个表示60的符号常量或const变量。通过while 循环让用户重复输入值,直到用户输入小于或等于0的值...

1李嘉焘1
47分钟前
7
0
Netty整合Protobuffer

现在我们都知道,rpc的三要素:IO模型,线程模型,然后就是数据交互模型,即我们说的序列化和反序列化,现在我们来看一下压缩比率最大的二进制序列化方式——Protobuffer,而且该方式是可以跨...

算法之名
52分钟前
18
0
如何用C++实现栈

栈的定义 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压...

BWH_Steven
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部