hive(05)、使用JAVA对数据仓库HIVE进行操作


声明:本文转载自https://my.oschina.net/zss1993/blog/1607880,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

        本文代码码云地址:https://gitee.com/MaxBill/HSDP

        在前文中我们实践了基于hadoop的数据仓库hive的安装、配置、应用、扩展等,那么我们在实际中该如何通过程序调用(用户接口)开发呢,hive提供了三种调用方式:首先是CLI就是我们前面使用过的hive shell命令行、然后就是通过JDBC或者ODBC的调用(通过程序可实现调用),最后就是官方提供的WebUI的方式。本文我们详细说的是使用JDBC通过java代码去访问hive服务,进行一些基本的操作。

一、环境准备

       1.hadoop集群

       2.hive元数据存储服务(mysql服务)

       3.hive数据仓库服务

       4.eclipse开发工具

二、开发准备

       1.创建一个空的java项目

         

       2.创建如上的包

          util包中使我们操作的jdbc或者odbc的工具类

          main包中使我们程序运行的主类所在

       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="";

             然后执行show tables 可以看到创建的tb_test表已经删除

          

四、总结

        以上就是本文使用java代码通过jdbc的方式连接hive进行的简单的一些DLL查询和DML查询操作,在实际开发中相比之前的hive shell方式,使用代码去操作的方式用的更多点。本文的测试代码已经上传码云,代码地址为:https://gitee.com/MaxBill/HSDP

           

本文发表于2018年01月16日 18:32
(c)注:本文转载自https://my.oschina.net/zss1993/blog/1607880,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 1902 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1