当前的项目中, 涉及到了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的解读和看法相关推荐

  1. spark SQL Running the Thrift JDBC/ODBC server

    Running the Thrift JDBC/ODBC server 1:运行 ./sbin/start-thriftserver.sh  --hiveconf hive.server2.thrif ...

  2. 6、HIVE JDBC开发、UDF、体系结构、Thrift服务器、Driver、元数据库Metastore、数据库连接模式、单/多用户模式、远程服务模式、Hive技术原理解析、优化等(整理的笔记)

    目录: 5 HIVE开发 5.1 Hive JDBC开发 5.2 Hive UDF 6 Hive的体系结构 6.2 Thrift服务器 6.3 Driver 6.4 元数据库Metastore 6.5 ...

  3. jdk1.8版本已经不包含jdbc.odbc连接

    连接access的时候发现报错,无法加载jdbc.odbc类文件,到Java安装目录上jre/lib/rt.jar上找jdbcodbc类也没有了. 找个jdk1.7安装就ok啦. 转载于:https: ...

  4. MySQL吉连_Learn Jdbc : Java, Jdbc, Odbc

    Learn Jdbc : Java, Jdbc, Odbc 介绍 Learn Jdbc : Java, Jdbc, Odbc Learn JDBC we precisely name what we ...

  5. 大数据学习笔记43:Hive - JDBC编程

    文章目录 一.Hive JDBC概述 二.Hive JDBC案例 1.修改hadoop核心配置文件core-site.xml 2.修改hive配置文件hive-site.xml 3.启动hadoop服 ...

  6. java excel odbc_Java:无法使用JDBC ODBC更新Excel

    我可以很好地读取行/列,但我无法更新,插入或删除. try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String myDB ...

  7. Spark Structured : HIve jdbc方式访问待下划线的表,找不到表的错误

    1.背景 Spark Structured : HIve jdbc方式访问待下划线的表,找不到表的错误 > select * from default._xd_after limit 1; &g ...

  8. Hive jdbc执行seelct 语句时报 return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask

    参考1 解决方法:      对HIVE表进行条件过滤,必须要以partition为首要条件. 如:select distinct hdate from t_stage_access where hd ...

  9. hive jdbc连接时的乱码问题

    之前写了个web端的程序用来控制从oracle向Hadoop导数据,同时在页面上可以通过jdbc调用hive,发现中文显示为乱码,因为是装在windows2003上 在网上查了一下,通过修改hive的 ...

最新文章

  1. 百度AI“杀入”新领域,我举双手支持!
  2. 超级计算机在线解方程,量子计算机10秒可得超级计算机百年运算结果
  3. COM笔记-CoCreateInstance
  4. Stas and the Queue at the Buffet
  5. MySQL - cast()函数
  6. java综合案例_综合实例 - Java House - BlogJava
  7. 11 如何通过 “副本传输” 传输从DEV到QAS的请求号
  8. 【BZOJ2149】拆迁队,分治+斜率优化DP
  9. TeamViewer——Ubuntu系统上的安装和卸载
  10. ASP.NET MVC初体验
  11. xmpppy获取服务器版本信息,为什么XMPP? - 今幕明的个人页面 - OSCHINA - 中文开源技术交流社区...
  12. Swift 使用SwiftyJSON解析JSON数据
  13. c语言pow为什么溢出,c – GMP pow中的溢出处理
  14. JoyOI1027 木瓜地
  15. CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接
  16. 小米盒子 远程访问 计算机,小米盒子、电视远程安装电视狗视频图文教程
  17. 华为手机android是什么意思,华为手机的英文文件夹是什么意思?哪些可以删除?今天总算知道了...
  18. lil9341_使用Python评估Lil John的“拒绝接受什么”
  19. 反arp攻击软件_技术干货透析中间人攻击
  20. C++入门级——缺省参数

热门文章

  1. Win32 Thread Information Block
  2. Mysql中的外键分析(什么是外键,为什么要用外键,添加外键,主外键关联删除)
  3. C# 将PDF转为SVG的3种情况
  4. nodeJS之域名DNS
  5. JS倒计时:从某个固定时间开始倒记
  6. mysql的字段为bit时,插入数据报Data too long
  7. ios启动私有链查询区块信息
  8. SegmentFault D-Day 2015 武汉站回顾
  9. Java VisualVM远程监控JVM
  10. 在河北当中学老师用不用考计算机,想当教师没编制?两类教师不用考,直接进编制...