zoukankan      html  css  js  c++  java
  • 大数据自学3-Windows客户端DbVisualizer/SQuirreL配置连接hive

    前面已经学习了将数据从Sql Server导入到Hive DB,并在Hue的Web界面可以查询,接下来是配置客户端工具直接连Hive数据库,常用的有DbVisualizer、SQuirreL SQL Client、DataGrip,只试用了前面两种,花了1天多时间最终实现了用这两款工具连Hive,还是挺有成就感的。

    先把环境说明下,有些问题跟环境版本是非常依赖的。

    Hadoop/Hive:使用的是CDH 5.15版

    DbVisualizer:v 9.58

    SQuirreL SQL Client:v 3.7

    最先看到是这位大神的文章,”Hive学习之路 (五)DbVisualizer配置连接hive“,配置完后确无法连接,提示Required field 'client_protocol' is unset!,

     

    查了一下,出现这个是因为jdbc的版本与服务器端Hive的jdbc版本不一致造成的,服务器端用的是CDH 5.15,我找到原始的CDH安装包,在cm-5.15.1sharecmfcommon_jars路径下找到对应版本的文件,主要的几个文件如下:

    hadoop-common-2.6.0-cdh5.14.0

    hive-common-1.1.0-cdh5.14.0

    hive-exec-1.1.0-cdh5.14.0

    hive-metastore-1.1.0-cdh5.14.0

    hive-jdbc-1.1.0-cdh5.14.0

    hive-service-1.1.0-cdh5.14.0

    hive-shims-1.1.0-cdh5.14.0

    hive-shims-common-1.1.0-cdh5.14.0

    这些文件都不能缺少,否则会报ClassNotFoundException等错误

    将这些jar替换之前的版本文件后再次连接时,又报错了,提示Illegal Hadoop Version:unknown (expected A. B. * format)

    这个要参照这个链接 https://github.com/timveil/hive-jdbc-uber-jar 来解决,原生的取Hadoop版本的方法VersionInfo有某些情况下会取不到,因此这位大神将这个方法改写了,真是牛人啊,真好奇为什么不直接将这段代码提交到开源库呢。

    回归正题,按其上面的方法生成了一个hive-jdbc-uber-2.6.5.0-292文件,将此文件复制到jdbc 的路径下,在Driver Manager里重新引用这个jar,发现还是提示之前的错误“Required field 'client_protocol' is unset!”,这个错误已经很明确就是jdbc版本的问题,看了下从github下载下来的工程,发现了pom.xml中有以下段。尝试将hive有关的全部注释,再次打包生成hive-jdbc-uber-2.6.5.0-292文件,这次终于成功了。

    DBVisualier中的设定画面

    连接成功后查询某表的数据

    用SQuirreL SQL Client的基本步骤可以参照https://www.cnblogs.com/tgzhu/p/5760698.html,同样的现象,如果hadoop/hive的jar版本不一致或遗漏,也会报上面一样的错误,因此也是按上面的方法同样处理,不同的地方是,生成hive-jdbc-uber-2.6.5.0-292文件时,无需将hive的相关引用注释,我猜当有多个jdbc hive版本时,SQuirreL SQL Client里特殊的机制能找到正确的jdbc版本,但DbVisualizer不能。

     另外SQuirreL 配置时要记得步骤,当报Illegal Hadoop Version时,在jdbc Driver配置里要引入hive-jdbc-uber-2.6.5.0-292,同时将hadoop-common-2.6.0-cdh5.14.0的引用去除,保存后可以就可以了。

    如果Hive配置了Kerberos安全机制,使用这两个客户端连接起来会麻烦很多,参照https://community.hortonworks.com/content/kbentry/73458/connecting-dbvisualizer-and-datagrip-to-hive-with.html

  • 相关阅读:
    0045 Spring中使用DataSourceTransactionManager进行事务管理的xml配置
    0044 spring框架的applicationContext.xml的命名空间
    0042 MySQL学习笔记-入门--01
    0041 Java学习笔记-多线程-线程池、ForkJoinPool、ThreadLocal
    0040 Java学习笔记-多线程-线程run()方法中的异常
    0039 Java学习笔记-多线程-线程控制、线程组
    ThinkPHP5.0 实现 app微信支付功能
    Thinkphp5.0分页和跳页
    php header函数导出excel表格
    php之微信公众号发送模板消息
  • 原文地址:https://www.cnblogs.com/dimg/p/10020836.html
Copyright © 2011-2022 走看看