hive-jdbc/odbc的解读和看法
当前的项目中, 涉及到了hive-jdbc/odbc这块, 因此把这几天所调研的资料作一份总结.
本文讲解hive-jdbc/hive-odbc的实现, 以期对jdbc/odbc规范和实现有个较深入的理解和看法.
在具体讲述hive-jdbc之前,首先讲解一下hive的整体架构
*) hive的整体架构
这幅图很清晰的表明了hive的整体架构, 以及各个组件扮演的角色, 这边专注于讲解下hive-jdbc/hive-odbc如何实现,并如何与hiveserver进行交互.
*) 对hive-jdbc的理解和认识
JDBC/ODBC两者皆是通过hiveclient与hiveserver保持通讯的,借助thrfit rpc协议来实现交互。
hiveserver里面的session是socket连接级别,不是全局维护的,因此hiveserver的部署属于无状态节点,其HA部署方式简单采用多节点部署即可.
在hive-0.12源码目录下,odbc是c/c++编写的源码,大致浏览了下,简单易懂,但都是与hiveserver交互的那部分代码,看不到任何与ODBC协议接口相关的内容。
同时对比了下hive-jdbc的源码, 同一个模块下有两份hive-jdbc源码,分别为org.apache.hadoop.hive.jdbc, org.apache.hive.jdbc, 前者对应hiveserver ,后者对应hiveserver2 实现了tcliservice.thrift接口, hiveserver2加强了并发、认证等功能,同时对open api更友好。
JDBC是java database connection的规范,它定义了一系列java访问各类db的访问接口,因此hive-jdbc其实本质上是扮演一个协议转换的角色,把jdbc的标准协议转换为访问HiveServer服务的协议. hive-jdbc除了扮演网络协议转化的工作, 并不承担他的工作, 比如sql的合法性校验和解析,一律忽略.
jdbc的统一接口
public interface Connection extends Wrapper { Statement createStatement() throws SQLException; void commit() throws SQLException; Statement createStatement() throws SQLException; void close() throws SQLException; } public interface Statement extends Wrapper { boolean execute(String sql) throws SQLException; ResultSet getResultSet() throws SQLException; } public interface ResultSet extends Wrapper { Statement createStatement() throws SQLException; String getString(int columnIndex) throws SQLException; }
hive-jdbc里最重要的3个类conection, statement, resultset.
conection对应hiveclient的创建, statement则对应hiveclient具体sql调用接口执行, resultset对应数据的读取(采用lazy的方式 + 分批批量读取的策略, 对涉及大数据返回结果的查询sql非常友好),因为hiveclient是个长连接, 而thrift rpc是个request/response的服务方式, 一个sql会对应多次rpc访问, 因此session扮演了很重要的角色.
其对应的服务接口如下所示:
public interface ThriftHiveMetastore.Iface {
// 对应 hive-jdbc, Statement能访问的接口,用于sql的执行
public void execute(String query) throws HiveServerException, org.apache.thrift.TException; // 对应hive-jdbc, ResultSet涉及的数据读取的接口
public String fetchOne() throws HiveServerException, org.apache.thrift.TException; public List<String> fetchN(int numRows) throws HiveServerException, org.apache.thrift.TException; public List<String> fetchAll() throws HiveServerException, org.apache.thrift.TException;
}
*) hive-server的一点看法
Thrift最常用的还是当作rpc服务使用,请求没有session的概念,这边hiveserver采用thrift是采用worker thread pool来处理,它选用了ThreadPoolServer(One thread per connection)这种thrift提供的服务模型中,最简单的,也是最适合长连接并需要维护session的应用场景。单另一方面, 由于hiveserver没有zookeeper作协调, 而连接方式又是采用长链接, 因此可能会出现集群负载不均衡的情况. 而且,据之前对thrift的认识, thrift对超时控制缺少支持, 这方便在hive-jdbc的实现中,好像也有所体现. 个人的看法.
参考资料:
https://cwiki.apache.org/confluence/display/Hive/HiveClient
www.cnblogs.com/sharpxiajun/archive/2013/06/02/3114180.html
hive-jdbc/odbc的解读和看法的更多相关文章
- 大数据技术之_19_Spark学习_03_Spark SQL 应用解析 + Spark SQL 概述、解析 、数据源、实战 + 执行 Spark SQL 查询 + JDBC/ODBC 服务器
第1章 Spark SQL 概述1.1 什么是 Spark SQL1.2 RDD vs DataFrames vs DataSet1.2.1 RDD1.2.2 DataFrame1.2.3 DataS ...
- 第5章 JDBC/ODBC服务器
第5章 JDBC/ODBC服务器 Spark SQL也提供JDBC连接支持,这对于让商业智能(BI)工具连接到Spark集群上以 及在多用户间共享一个集群的场景都非常有用.JDBC 服务器作为一个独立 ...
- JDBC ODBC区别
一.JDBC(Java DataBase Connectivity standard) 1.JDBC,它是一个面向对象的应用程序接口(API), 通过它可访问各类关系数据库. 2. 驱动程序(JDBC ...
- Hive学习之六 《Hive进阶— —hive jdbc》 详解
接Hive学习五 http://www.cnblogs.com/invban/p/5331159.html 一.配置环境变量 hive jdbc的开发,在开发环境中,配置Java环境变量 修改/etc ...
- Hive 8、Hive2 beeline 和 Hive jdbc
1.Hive2 beeline Beeline 要与HiveServer2配合使用,支持嵌入模式和远程模式 启动beeline 打开两个Shell窗口,一个启动Hive2 一个beeline连接hi ...
- JSP使用JDBC ODBC 实例
1.JDBC ODBC Brige driver是JSP连接数据库的驱动,只要安装了JDK这个驱动就默认安装了 2. 配置JDBC ODBC数据源的步骤:http://blog.csdn.net/li ...
- 概念学习 - JNDI, JDBC, ODBC, DataSource
layout: post title: 概念学习 - JNDI, JDBC, ODBC, DataSource --- 最近在学习Java Hibernate,对数据库资源访问这块好多概念模糊,所以在 ...
- Hive JDBC:java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root is not allowed to impersonate anonymous
今天使用JDBC来操作Hive时,首先启动了hive远程服务模式:hiveserver2 &(表示后台运行),然后到eclipse中运行程序时出现错误: java.sql.SQLExcepti ...
- java 8: ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver
转眼之间, java 11都快要推出了. 而我一直都在 java 7环境下写代码,真的不想升级,不想改变什么,可世界每天都在变化. 最近因为服务端需要SNI,而 java 7 只支持客户端的SNI,只 ...
随机推荐
- 一模 (4) day1
第一题: 题目大意:给出N个人之间转账的手续X%,求出A转给B至少要多少钱才能使B得到100元.结果保留8位小数:N<=2000 解题过程: 1.很容易看出这题的图论模型,每条边的权值就是(1- ...
- 神奇的NOIP模拟赛 T1 LGTB 玩扫雷
LGTB 玩扫雷 在一个n m 的棋盘上,有位置上有雷(用“*” 表示),其他位置是空地(用“.” 表示).LGTB 想在每个空地上写下它周围8 个方向相邻的格子中有几个雷.请帮助他输出写了之后的棋盘 ...
- json数组,随便测试
Pid := '1001411225514227,926792194654225'; json := SA([]); json.AsArray.Add(SO(pid)); ShowMessage( j ...
- HDU 3341 状态压缩DP+AC自动机
题目大意: 调整基因的顺序,希望使得最后得到的基因包含有最多的匹配串基因,使得所能达到的智商最高 这里很明显要用状态压缩当前AC自动机上点使用了基因的情况所能达到的最优状态 我最开始对于状态的保存是, ...
- 从协议VersionedProtocol开始1
Phase 0: Make a plan You must first decide what steps you're going to have in your process. It sound ...
- BestCoder Round #1
逃生 反向拓扑+优先队列+逆序输出 这里要注意,题中要求的不是输出字典序,而是要编号小的尽量考前(首先1尽量考前,然后2尽量考前..). 比如说 约束是 4->1,3->2,字典序答案就是 ...
- mongodb 几个要注意的问题
1. moongo db 会尽量将 所有 索引和 热数据 放入内存中来进行比较,从而来获得更好的查询速度,同时,mongodb在写的时候,也是先写入内存,然后定期同步到磁盘上面去,这样可以达成顺序写的 ...
- Actipro Ribbon For WPF 界面控件免费下载地址
Actipro Ribbon可以添加ribbon用户界面到你的程序中,功能包含:ribbon大小调整.程序菜单.QAT.嵌入的多种控件.多种布局选项.按键提示.屏幕提示.WPF命令模式用法.多种样式. ...
- Motorola C118修改滤波器组件
所需工具: 热风枪.恒温焊台.镊子.助焊膏.锡丝.滤波器组件 关于怎么使用热风枪拆屏蔽盖将在后期更新视频,以下为修改滤波器流程.以下热风枪设置温度只针对快克957DW(不同品牌风枪和型号可能会有温差) ...
- HTML中的鼠标光标属性
在网页中默认的鼠标指针只有两种,一种是最普通的箭头,另一种是当移动到链接上时出现的“小手”.但现在越来越多的网页都使用了CSS鼠标指针技术,当将鼠标移动到链接上时,可以看到多种不同的效果.CSS可以通 ...