本文代码码云地址:https://gitee.com/MaxBill/HSDPjava
在前文中咱们实践了基于hadoop的数据仓库hive的安装、配置、应用、扩展等,那么咱们在实际中该如何经过程序调用(用户接口)开发呢,hive提供了三种调用方式:首先是CLI就是咱们前面使用过的hive shell命令行、而后就是经过JDBC或者ODBC的调用(经过程序可实现调用),最后就是官方提供的WebUI的方式。本文咱们详细说的是使用JDBC经过java代码去访问hive服务,进行一些基本的操做。mysql
1.hadoop集群git
2.hive元数据存储服务(mysql服务)sql
3.hive数据仓库服务shell
4.eclipse开发工具数据库
1.建立一个空的java项目apache
2.建立如上的包eclipse
util包中使咱们操做的jdbc或者odbc的工具类工具
main包中使咱们程序运行的主类所在oop
3.启动hadoop集群
在主节点上启动hadoop集群start-all.sh
4.启动元数据库服务
登录元数据库服务所在主机,启动mysql服务service mysql start
5.启动hiveserver2服务
在hive机器上启动hiveserver服务:hive --service hiveserver2 或者hive --service hiveserver2 &
6.启动Hive Metastore服务
在hive机器上启动Hive Metastore服务:hive --service metastore或者hive --service metastore &
看到以下信息,说明启动完成:
7.验证启动
在终端输入jps -ml查看:
能够看到hadoop集群个hive服务启动都正常
1.编写jdbc工具类
编写打开hive链接的方法
代码块:
private static String driver = "org.apache.hive.jdbc.HiveDriver"; private static String url = "jdbc:hive2://hdpc01:10000/default"; private static String user = "root"; private static String pass = "123456"; // 打开链接 public static Connection openConnection() { Connection conn = null; try { Class.forName(driver); conn = DriverManager.getConnection(url, user, pass); } catch (Exception e) { e.printStackTrace(); } return conn; }
编写关闭hive链接的方法
代码块:
// 关闭链接 public static void closeConnection(Statement stmt, Connection conn) { try { if (stmt != null) { stmt.close(); stmt = null; } if (conn != null) { conn.close(); conn = null; } System.out.println(">>>>>>>>>>>>>>>>>>>>:关闭链接成功..."); } catch (Exception e) { e.printStackTrace(); } }
测试链接
代码块:
package com.maxbill.hive.main; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import com.maxbill.hive.util.JdbcUtils; /** * @user maxbill * @date 2018/01/16 * @func hive操做测试类 */ public class HiveTest { public static void main(String[] args) { // 1.测试链接 testHiveConn(); } public static void testHiveConn() { try { Connection conn = JdbcUtils.openConnection(); Statement stmt = conn.createStatement(); if (null != stmt) { System.out.println(">>>>>>>>>>>>>>>>>>>>:打开链接成功..."); // 此处主要是测试链接是否正常,打开成功后,咱们调用关闭方法释放链接 JdbcUtils.closeConnection(stmt, conn); } else { System.out.println(">>>>>>>>>>>>>>>>>>>>:打开链接失败..."); } } catch (SQLException e) { e.printStackTrace(); } } }
执行测试链接的hive方法
发生异常,这是由于缺乏hive驱动包,咱们在项目中导入如下jar包即
而后继续测试,链接成功
2.基本查询操做
代码块:
public static void main(String[] args) { String sql = "select * from tb_user"; runQuerySql(sql); } // 查询数据 public static void runQuerySql(String sql) { try { Connection conn = JdbcUtils.openConnection(); Statement stmt = conn.createStatement(); if (null != stmt) { System.out.println(">>>>>>>>>>>>>>>>>>>>:打开链接成功..."); ResultSet rs = stmt.executeQuery(sql); System.out.println(">>>>>>>>>>>>>>>>>>>>:执行运行结果..."); // 输出查询的结果集 List list = resultSetToList(rs); for (Object listObj : list) { System.err.println(listObj.toString()); } // 调用关闭方法释放链接 JdbcUtils.closeConnection(stmt, conn); } else { System.out.println(">>>>>>>>>>>>>>>>>>>>:打开链接失败..."); } } catch (SQLException e) { e.printStackTrace(); } } // ResultSet结果集转成list public static List resultSetToList(ResultSet rs) throws java.sql.SQLException { if (rs == null) return Collections.EMPTY_LIST; ResultSetMetaData md = rs.getMetaData(); // 获得结果集结构信息,好比字段数、字段名等 int columnCount = md.getColumnCount(); // ResultSet的列数 List list = new ArrayList(); Map rowData = new HashMap(); while (rs.next()) { rowData = new HashMap(columnCount); for (int i = 1; i <= columnCount; i++) { rowData.put(md.getColumnName(i), rs.getObject(i)); } list.add(rowData); } return list; }
下面的查询操做都是基于以上方法,只需传入sql语句参数,使用DML的查询方法
1>.基本查询
sql="SELECT * FROM tb_user WHERE id>0";
2>.查看表结构
sql="desc tb_user";
3>.统计查询
sql="SELECT COUNT(id) FROM tb_user ";
4>.表查询
sql="show tables ";
如下的建立删除表等操做没有rs结果,使用DLL语句的处理方法
代码块:
// 数据操做 public static void runHandleSql(String sql) { try { Connection conn = JdbcUtils.openConnection(); Statement stmt = conn.createStatement(); if (null != stmt) { System.out.println(">>>>>>>>>>>>>>>>>>>>:打开链接成功..."); stmt.execute(sql); // 调用关闭方法释放链接 JdbcUtils.closeConnection(stmt, conn); } else { System.out.println(">>>>>>>>>>>>>>>>>>>>:打开链接失败..."); } } catch (SQLException e) { e.printStackTrace(); } }
5>.建立表
sql = "create table tb_test (key int, value string) row format delimited fields terminated by '\t'";
而后执行show tables 能够看到建立的tb_test表
6>.删除表
sql="drop table if exists tb_test";
而后执行show tables 能够看到建立的tb_test表已经删除
以上就是本文使用java代码经过jdbc的方式链接hive进行的简单的一些DLL查询和DML查询操做,在实际开发中相比以前的hive shell方式,使用代码去操做的方式用的更多点。本文的测试代码已经上传码云,代码地址为:https://gitee.com/MaxBill/HSDP