hive jdbc 调用

HIVE学习总结

Hive只需要装载一台机器上,可以通过webui,console,thrift接口访问(jdbc,odbc),仅适合离线数据分析,降低数据分析成本(不用编写mapreduce)。

Hive优势

1.      简单易上手,类sql的hql、

2.      有大数据集的计算和扩展能力,mr作为计算引擎,hdfs作为存储系统

3.      统一的元数据管理(可与pig。presto)等共享

Hive缺点

1.      Hive表达能力有限。迭代和复杂运算不易表达

2.      Hive效率较低,mr作业不够智能,hql调优困难,可控性差

Hive访问

1.      提供jdbc、odbc访问方式。

2.      采用开源软件thrift实现C/S模型,支持任何语言。

3.      WebUI的方式

4.      控制台方式

Hive WEBUI使用

在HIVE_HOME/conf目录hive-site.xml文件中添加如下文件

修改配置文件:hive-site.xml增加如下三个参数项:

<property>

<name>hive.hwi.listen.host</name>

<value>0.0.0.0</value>

</property>

<property>

<name>hive.hwi.listen.port</name>

<value>9999</value>

</property>

<property>

<name>hive.hwi.war.file</name>

<value>lib/hive-hwi-0.13.1.war</value>

</property>

其中lib/hive-hwi-0.13.1.war为hive页面对应的war包,0.13.1版本没有对应的war包需要自己打包,步骤如下:

wgethttp://apache.fayea.com/apache-mirror/hive/hive-0.13.1/apache-hive-0.13.1-src.tar.gz

tar-zxvf apache-hive-0.13.1-src.tar.gz

cdapache-hive-0.13.1-src

cdhwi/web

ziphive-hwi-0.13.1.zip ./*     //打包成.zip文件。

scphive-hwi-0.13.1.war db96:/usr/local/hive/lib/  //放到hive的安装目录的lib目录下。

启动hwi:

hive --service hwi

如有下报错:

Problem accessing /hwi/. Reason:

Unable to find a javac compiler;

com.sun.tools.javac.Main is not on theclasspath.

Perhaps JAVA_HOME does not point to the JDK.

Itis currently set to "/usr/java/jdk1.7.0_55/jre"

解决办法:

cp/usr/java/jdk1.7.0_55/lib/tools.jar /usr/local/hive/lib/

hive --service hwi  
重启即可。

访问:http://ip/9999/hwi

典型部署:采用主备结构mysql存储元数据信息。

Java通过jdbc调用hive

使用jdbc连接hive必须启动hiveserver,默认端口为10000,也可以指定。

bin/hive --service hiveserver -p 10002

显示Starting Hive Thrift Server说明启动成功。

创建eclipse创建java工程,导入hive/lib下的所有jar,及hadoop的一下三个jar

hadoop-2.5.0/share/hadoop/common/hadoop-common-2.5.0.jar

hadoop-2.5.0/share/hadoop/common/lib/slf4j-api-1.7.5.jar

hadoop-2.5.0/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar

理论上只用导入hive下面的jar,

$HIVE_HOME/lib/hive-exec-0.13.1.jar

$HIVE_HOME/lib/hive-jdbc-0.13.1.jar

$HIVE_HOME/lib/hive-metastore-0.13.1.jar

$HIVE_HOME/lib/hive-service-0.13.1.jar

$HIVE_HOME/lib/libfb303-0.9.0.jar

$HIVE_HOME/lib/commons-logging-1.1.3.jar

测试数据/home/hadoop01/data 
内容如下(中间用tab键隔开):

1          abd

2          2sdf

3          Fdd

Java代码如下:

package org.apache.hadoop.hive;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import org.apache.log4j.Logger;

public class HiveJdbcCli {

private static String driverName ="org.apache.hadoop.hive.jdbc.HiveDriver";

private static String url ="jdbc:hive://hadoop3:10000/default";

private static String user ="";

private static String password ="";

private static String sql = "";

private static ResultSet res;

private static final Logger log =Logger.getLogger(HiveJdbcCli.class);

public static void main(String[] args){

Connection conn = null;

Statement stmt = null;

try {

conn = getConn();

stmt =conn.createStatement();

//
第一步:存在就先删除

String tableName =dropTable(stmt);

//
第二步:不存在就创建

createTable(stmt, tableName);

//
第三步:查看创建的表

showTables(stmt, tableName);

//
执行describe table操作

describeTables(stmt,tableName);

//
执行load data intotable操作

loadData(stmt, tableName);

//
执行 select * query 操作

selectData(stmt, tableName);

//
执行 regular hive query统计操作

countData(stmt, tableName);

} catch (ClassNotFoundException e){

e.printStackTrace();

log.error(driverName + " notfound!", e);

System.exit(1);

} catch (SQLException e) {

e.printStackTrace();

log.error("Connectionerror!", e);

System.exit(1);

} finally {

try {

if (conn != null) {

conn.close();

conn = null;

}

if (stmt != null) {

stmt.close();

stmt = null;

}

} catch (SQLException e) {

e.printStackTrace();

}

}

}

private static void countData(Statementstmt, String tableName)

throws SQLException {

sql = "select count(1) from" + tableName;

System.out.println("Running:" + sql);

res = stmt.executeQuery(sql);

System.out.println("执行“regularhive query”运行结果:");

while (res.next()) {

System.out.println("count------>" + res.getString(1));

}

}

private static void selectData(Statementstmt, String tableName)

throws SQLException {

sql = "select * from " +tableName;

System.out.println("Running:" + sql);

res = stmt.executeQuery(sql);

System.out.println("执行 select *query运行结果:");

while (res.next()) {

System.out.println(res.getInt(1) +"\t" + res.getString(2));

}

}

private static void loadData(Statementstmt, String tableName)

throws SQLException {

String filepath ="/home/hadoop01/data";

sql = "load data local inpath‘" + filepath + "‘ into table "

+ tableName;

System.out.println("Running:" + sql);

res = stmt.executeQuery(sql);

}

private static voiddescribeTables(Statement stmt, String tableName)

throws SQLException {

sql = "describe " +tableName;

System.out.println("Running:"+ sql);

res = stmt.executeQuery(sql);

System.out.println("执行 describetable运行结果:");

while (res.next()) {

System.out.println(res.getString(1) + "\t" +res.getString(2));

}

}

private static void showTables(Statementstmt, String tableName)

throws SQLException {

sql = "show tables ‘" +tableName + "‘";

System.out.println("Running:" + sql);

res = stmt.executeQuery(sql);

System.out.println("执行 showtables运行结果:");

if (res.next()) {

System.out.println(res.getString(1));

}

}

private static void createTable(Statementstmt, String tableName)

throws SQLException {

sql = "create table "

+ tableName

+ " (key int, valuestring)  row format delimited fieldsterminated by ‘\t‘";

stmt.executeQuery(sql);

}

private static String dropTable(Statementstmt) throws SQLException {

//
创建的表名

String tableName ="testHive";

sql = "drop table " +tableName;

stmt.executeQuery(sql);

return tableName;

}

private static Connection getConn() throwsClassNotFoundException,

SQLException {

Class.forName(driverName);

Connection conn =DriverManager.getConnection(url, user, password);

return conn;

}

}

时间: 2025-01-01 23:13:05

hive jdbc 调用的相关文章

Hive JDBC——深入浅出学Hive

第一部分:搭建Hive JDBC开发环境 搭建:Steps ?新建工程hiveTest ?导入Hive依赖的包 ?Hive  命令行启动Thrift服务 ?hive --service hiveserver & 第二部分:基本操作对象的介绍 Connection ?说明:与Hive连接的Connection对象 ?Hive 的连接 ?jdbc:hive://IP:10000/default" ?获取Connection的方法 ?DriverManager.getConnection(&q

如何使用 JDBC 调用存储在数据库中的函数或存储过程

JDBC调用存储过程步骤:1 通过Connection对象的prepareCall()方法创建一个CallableStatement对象的实例.在使用Connection对象的prepareCall()方法时,需要传入一个String类型的字符串,该字符串用于指明如何调用存储过程{?= call <procedure-name>[(<arg1>,<arg2>, ...)]} {call <procedure-name>[(<arg1>,<a

jdbc调用 oracle 存储过程操作

创建有参存储函数findEmpNameAndSal(编号),查询7902号员工的的姓名和月薪,[返回多个值,演示out的用法]当返回2个或多个值,必须使用out符号当返回1个值,就无需out符号 create or replace function findEmpNameAndSal(pempno in number,pename out varchar2) return numberas psal emp.sal%type;begin select ename,sal into pename,

hive jdbc connection refused

hive jdbc 连接时抛异常: Exception in thread "main" java.sql.SQLException: Could not open client transport with JDBC Uri: jdbc:hive2://192.168.206.128:10000/default: java.net.ConnectException: Connection refused: connect     at org.apache.hive.jdbc.Hiv

HIVE JDBC连接详解

package org.conan.myhadoop.mr; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class HiveJDBCConnection {     private static String driverName = "or

Hive JDBC 操作 例子

pom.xml配置 <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>0.13.1</version> </dependency> 测试例程 1 import org.junit.Test; 2 3 import java.sql.SQLException; 4 import j

Java数据库连接——JDBC调用存储过程,事务管理和高级应用

阅读目录 一.JDBC常用的API深入详解及存储过程的调用1.存储过程(Stored Procedure)的介绍2.JDBC调用无参存储过程3.JDBC调用含输入参数存储过程4.JDBC调用含输出参数存储过程二.JDBC的事务管理1.JDBC实现事务管理2.通过代码实现事物的管理三.数据库连接池(dbcp.c3p0)1.dbcp使用步骤2.c3p0使用步骤3.连接池总结四.JDBC的替代产品(Hibernate.Mybatis)1.Commons-dbutils 2.Hibernate简介3.M

Java数据库连接--JDBC调用存储过程,事务管理和高级应用

相关链接:Jdbc调用存储过程 一.JDBC常用的API深入详解及存储过程的调用 1.存储过程的介绍 我们常用的操作数据库语言SQL语句在执行的时候要先进行编译,然后执行,而存储过程是在大型数据库系统中,一组为了完成特定功能的SQL语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过制定存储过程的名字并给出参数(如果该存储过程带有参数) 来执行它.存储过程是数据库中 的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程. 一个存储过程是一个可编程的函数,它在数据

JDBC调用存储过程的例子

下面是我学到了Oracle存储过程,在这里跟大家简单的分享一下利用JDBC调用存储过程的例子: 废话就不啰嗦,现在就直接上机代码. 首先我利用的是Oracle中默认的 scott 数据库里的 emp员工信息表作为本次的例子: 如果你的Oracle里没有 emp默认的员工表,需要创建类似以下的 emp表. 在PL/SQL中需要写以下的调用存储过程的代码: 1 --在初次打开PL/SQL时要运行以下这行代码 2 set serveroutput on 3 4 5 --存储过程 6 CREATE OR