Hive 0.11 升级踩坑记——HiveServer2的imperson问题

简介:

前阶段线上在做Hive升级(CDH4.2.0 Hive 0.10——> Apache Hive0.11 with our patches)和Shark上线踩了不少坑,先来说一个Hiveserver的问题.

beeline进入后随便执行一个查询就会报错:

USERxxx don’t have write privilegs under /tmp/hive-hdfs

不对啊,已经启用了impersonation怎么还会去hdfs下的scratchdir写入临时文件呢?查看下代码发现原来CDH4.2Hiveimpersonationhive0.11在这处的判断行为是不同的:

Hive0.11 apache:只有在启用kerberos才使用hive-xxx作为scratchdir否则使用hiveserver的start user的scratchdir

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
if  (
         cliService.getHiveConf().getVar(ConfVars.HIVE_SERVER2_AUTHENTICATION)
         .equals(HiveAuthFactory.AuthTypes.KERBEROS.toString())
         &&
         cliService.getHiveConf().
         getBoolVar(ConfVars.HIVE_SERVER2_ENABLE_DOAS)
         )
     {
       String delegationTokenStr =  null ;
       try  {
         delegationTokenStr = cliService.getDelegationTokenFromMetaStore(userName);
       catch  (UnsupportedOperationException e) {
         // The delegation token is not applicable in the given deployment mode
       }
       sessionHandle = cliService.openSessionWithImpersonation(userName, req.getPassword(),
             req.getConfiguration(), delegationTokenStr);
     else  {
       sessionHandle = cliService.openSession(userName, req.getPassword(),
             req.getConfiguration());
     }

Cloudera4.2.0的Hive0.10是只要启用了impersonation就使用独自的scratchdir...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
if  (cliService.getHiveConf().
           getBoolVar(HiveConf.ConfVars.HIVE_SERVER2_KERBEROS_IMPERSONATION)) {
         String delegationTokenStr =  null ;
         try  {
           delegationTokenStr = cliService.getDelegationTokenFromMetaStore(userName);
         catch  (UnsupportedOperationException e) {
           // The delegation token is not applicable in the given deployment mode
         }
         sessionHandle = cliService.openSessionWithImpersonation(userName, req.getPassword(),
               req.getConfiguration(), delegationTokenStr);
       else  {
         sessionHandle = cliService.openSession(userName, req.getPassword(),
               req.getConfiguration());
       }

并且这个作为一个Hiveserver的bug在0.13被修复:https://issues.apache.org/jira/browse/HIVE-5486

workaround也简单,就是把/tmp/hive-hdfs改成777就好了=。=坑爹啊



本文转自MIKE老毕 51CTO博客,原文链接:http://blog.51cto.com/boylook/1352929,如需转载请自行联系原作者


相关文章
|
SQL HIVE Python
[Hive]HiveServer2配置
HiveServer2(HS2)是一个服务器接口,能使远程客户端执行Hive查询,并且可以检索结果。HiveServer2是HiveServer1的改进版,HiveServer1已经被废弃。
4151 0
|
3月前
|
SQL 存储 分布式计算
Hadoop-16-Hive HiveServer2 HS2 允许客户端远程执行HiveHQL HCatalog 集群规划 实机配置运行
Hadoop-16-Hive HiveServer2 HS2 允许客户端远程执行HiveHQL HCatalog 集群规划 实机配置运行
61 3
|
8月前
|
SQL 分布式计算 HIVE
Hive Cli / HiveServer2 中使用 dayofweek 函数引发的BUG!
在Hive 3.1.2和Spark 3.0.2集群环境中,遇到`dayofweek`函数bug。当`create_date`为字符串类型时,`dayofweek`函数结果错位。修复方法是将`create_date`转换为`date`类型。在Spark SQL中,原始代码能正常运行,未出现此问题。因此建议在Hive中使用转换后的日期类型以避免错误。
96 4
|
SQL 分布式计算 Shell
常见的bug---3、没有启动metaStore和Hiveserver2服务导致在本机上的IDEA无法连接上虚拟机上的HIve
常见的bug---3、没有启动metaStore和Hiveserver2服务导致在本机上的IDEA无法连接上虚拟机上的HIve
|
SQL 存储 分布式计算
数据仓库的Hive的Hive架构的HiveServer2
数据仓库是一个面向分析的数据存储系统,其中包含了大量的历史数据,可以用于数据分析和报表生成。Hive是一个开源的数据仓库系统,基于Hadoop平台,可以存储和处理大规模的数据。HiveServer2是Hive的一个重要组成部分,负责接收来自客户端的SQL请求,并将其转换成物理执行计划,然后执行并返回结果。本文将介绍HiveServer2的架构和作用。
299 0
|
SQL Java 关系型数据库
其它语言通过HiveServer2访问Hive
其它语言访问hive主要是通过hiveserver2服务,HiveServer2(HS2)是一种能使客户端执行Hive查询的服务。HiveServer2可以支持对 HiveServer2 的嵌入式和远程访问,支持多客户端并发和身份认证。旨在为开放API客户端(如JDBC和ODBC)提供更好的支持。
309 0
其它语言通过HiveServer2访问Hive
|
SQL 数据库连接 API
[Hive]HiveServer2概述
1. HiveServer1 HiveServer是一种可选服务,允许远程客户端可以使用各种编程语言向Hive提交请求并检索结果。
1870 0
|
SQL 分布式计算 Java
Hive的内置服务和hiveserver/hiveserver2的比较
一:Hive的几种内置服务              执行bin/hive --service help  如下:       [master@master1 hive]$ bin/hive --service help ls: 无法访问/opt/spark/lib/spark-assembly-*.
2501 0
|
SQL 分布式计算 Java
Hadoop2.7实战v1.0之Hive-2.0.0的Hiveserver2服务和beeline远程调试
0.环境Hadoop2.7实战v1.0之Hive-2.0.0+MySQL远程模式安装: http://blog.itpub.net/30089851/viewspace-2082805/机器 hadoop-01:192.
1388 0