javax.security.auth.login.LoginException: Checksum failed
  之前碰到过类似的问题,都是因为服务器端的keytab问题;多半是因为重新生成了keytab后,客户端需要重新声场keytab;但是这次不是,即使我重新生成了客户端的keytab仍然无法好用。
  难道这个异常不是因为客户端的秘钥和服务器端秘钥不相符造成的吗?
  确实是,但是这次比之前的情况要负责的多。所有的这一切都是因为在客户端使用了一个指令:ktadd,无论是在kadmin的shell下还是在kutil的工具中使用,ktadd我之前的理解是把秘钥导出来而已;但是其实不是,他其实是重新生成了秘钥(和之前是否一致不确定),生成的keytab中至少version是不一致(想到这一点是因为sha1sum指令下两次生成的keytab的散列值是不一样的)。这个生成会影响到KDC的结果;因为client和server都是依赖于keytab文件,所以这个时候就出现了客户端和服务器端文件不一致;
  我之前碰到这种情况通常都是将通过cloudera manager来重新生成秘钥,推测应该也是使用ktadd来重新生成秘钥;这继续导致了问题:client的keytab过期了;于是客户端再次向服务器端发出请求,服务器端发现有问题,告知checksum error;这就进入了一种恶性循环。客户端再次重新生成keytab,服务器端自身验证又失败。
   直到我认识到了看到的checksum failed 并不是client的验证失败,而是服务器自己定时周期验证失败之后,问题的症结才找到:ktadd将会导致秘钥文件发生变化;而作为keytab模式的常见的解决方案就是在某一端生成了秘钥文件之后,拷贝到各个集群中;一定要保证keytab文件的一致性。
   如此,问题解决。
 
详细说明如下:
  之前我一直以为是因为我提交了beeline -u "jdbc:hive2://10.1.108.65:10000/default;principal=hive/slave1@BD.COM;auth=kerberos"才导致的后台checksum;但是其实不是,本质原因是因为ktadd其实是一个重新生成keytab过程,而且是修改了KDC的密码的过程;
  import kerber可以指定修改的密码;但是注意修改之后,需要在“gengerate missing keytab”中生成一次;貌似修改会导致keytab的丢失。
  开启了kerberos之后,再来安装impala就需要手动在KDC中添加impala用户,然后再cloudera中“generate missing credentials”

  研究Kerberos的hive链接字符串问题;终于研究明白了;原来之前的ktadd并不是导出keytab,而是改变了认证了信息;每次ktadd都会导致这个用户的验证信息(加密信息)发生变化;所以我在客户端调用ktadd,导致hive服务端验证失败,除非它在重新生成才能够正常运行;但是它已重新生成,本质也是ktadd一下,这样client的keytab也就过期了;于是就形成了一个死循环。昨晚解决的方式就是手动的设置一下hive/slave1@BD.COM的密码,然后在cloudera中重新import一下主体信息(也是输入密码方式);然后重启hive服务,搞定了。
  后续还要研究一下到底怎么来玩;其实还是应该生成的keytab在这个集群中复制一份;比如我在65的cloudera中生成了keytab(启动kerberos的时候,其实都会为各个主体创建keytab文件,只要在cm的目录下面搜索*.keytab即可,然后把这份keytab拷贝到各个集群下属的服务器,之后采用kinit -kt进行登录即可。
Keytab里面装了不少东西,版本号,实体名称,实体key(long-term key,根据密码计算出来的);根据实测,每次ktadd出来的东西都不一样,后来想想也是,至少版本号是不一致的。

 
Peer indicated failure: Unsupported mechanism type GSSAPI
这是因为hive所在集群已经关闭了kerberos,但是连接字符串还是采用kerberos方式就会爆此错误;
与之对应的是“Unsupported mechanism type PLAIN”,代表服务器已经开启了kerberos,但是链接字符串还是采用普通连接方式,所以报错。
 

Kerberos的hive链接问题的更多相关文章

  1. presto集成kerberos以及访问集成了kerberos的hive集群

    1.创建主体 注: 192.168.0.230 为单节点集群 192.168.4.50为kdc服务器 192.168.0.9为客户端 1.1.Kdc服务器创建主体 # kadmin.local -q ...

  2. Spark SQL Thrift Server 配置 Kerberos身份认证和权限管理

    转载请注明出处:http://www.cnblogs.com/xiaodf/ 之前的博客介绍了通过Kerberos + Sentry的方式实现了hive server2的身份认证和权限管理功能,本文主 ...

  3. Hive架构及搭建方式

    目录 前言 hive的基础知识 基本架构 metastore 内嵌服务和数据库 内嵌服务 服务和数据库单独部署 hcatalog 客户端 客户端的本地模式 beeline beeline的自动模式 j ...

  4. Spark+Hadoop+Hive集群上数据操作记录

    [rc@vq18ptkh01 ~]$ hadoop fs -ls / drwxr-xr-x+ - jc_rc supergroup 0 2016-11-03 11:46 /dt [rc@vq18ptk ...

  5. hive 常见面试题

    (笔者自己做记录) 1.Hive内外部表的区别删除表是否影响外部数据2.Hive如何做到权限管理hive下可以修改配置后创建用户管理,但是仅仅是为了防止误操而已,如果要真的为了安全操作建议使用 Ker ...

  6. Hive错误记录

    创建表报错 Error: Error while processing statement: FAILED: Execution Error, return code 1 from org.apach ...

  7. Superset配置hive数据源

    1.在uri中配置 hive://localhost:10000/default 2.查询 3.如果你的hive集群是带有kerberos认证的,hive数据源需要这样配置 hive://xxx:xx ...

  8. kafka+hbase+hive实现实时接入数据至hive

    整体架构: 项目目标,实现配置mysql,便可以自动化入湖至Hive,入湖至Hive方便后期数据分析. 首先在Mysql中配置好kafka的topic.Server以及入户表等信息,java程序初始化 ...

  9. [BD] Hive

    简介 基于HDFS的数据仓库工具 基于HDFS上的数据分析引擎 2.x 前:SQL -----> Hive  ----> MapReduce 2.x 后:推荐执行引擎为 Spark 支持S ...

随机推荐

  1. 【leetcode刷题笔记】Insert Interval

    Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...

  2. PHP 面向对象及Mediawiki 框架分析(一)

    此文是一JAVA哥大神写的,虽然他不懂PHP.我这人PHP半桶水,面向对象更是半桶水都没有,此文原本是为了让我理解MediaWiki的运行机制的,愣是用他的JAVA的面向对象知识,对Mediawiki ...

  3. 创建Android守护进程(底层服务)【转】

    本文转载自:https://blog.csdn.net/myfriend0/article/details/80016739 创建Android守护进程(底层服务) 前言 Android底层服务,即运 ...

  4. RequestMapping请求映射方式

    1.标准映射 规则: 1) @RequestMapping可以设置在类上,也可以设置在方法上 2) 请求的映射规则是:类上的RequestMapping + 方法上的RequestMapping 3) ...

  5. maven 一个简单项目 —— maven权威指南学习笔记(三)

    目标: 对构建生命周期 (build  lifecycle),Maven仓库 (repositories),依赖管理 (dependency management)和项目对象模型 (Project O ...

  6. SpringCloud Bus消息总线

    在微服务架构中,通常会使用轻量级的消息代理来构建一个共用的消息主题来连接各个微服务实例,它广播的消息会被所有在注册中心的微服务实例监听和消费,也称消息总线. SpringCloud中也有对应的解决方案 ...

  7. 权限【TLCL】

    用户帐户 定义在/etc/passwd 文件里面,用户组定义在/etc/group 文件里面. /etc/shadow 包含了关于用户密码的信息 文件属性: 属性 文件类型 - 一个普通文件 d 一个 ...

  8. php提前输出响应及注意问题

    1.浏览器和服务器之间是通过HTTP进行通信的,浏览器发送请求给服务器,服务器处理完请求后,发送响应结果给浏览器,浏览器展示给用户.如果服务器处理请求时间比较长,那么浏览器就需要等待服务器的处理结果. ...

  9. img标签显示本地文件

    html: <img src="__IMG__/male.png" id="imgfpic1" style="height: 100%; wid ...

  10. spring: 使用Spring提供的JDBC模板(使用profiles选择数据源/使用基于JDBC驱动的数据源)

    Spring提供的JDBC框架负责管理资源和异常处理,从而可以简化开发者的JDBC代码.开发者只需要编写写入和读取数据库相关的代码即可. 正如在之前的小节中论述过的,Spring将数据库访问过程中的模 ...