错误:hive中beeline连接异常User:*** is not allowed to impersonate
hive中beeline连接异常User:*** is not allowed to impersonate
1.报错详情
在beeline连接Hive的过程中出现了下面这种情况:
导致报错命令为:
bin/beeline -u jdbc:hive2://hadoop01:10000 -n root
2.解决方法
在hadoop目录下/etc/hadoop/core-site.xml加入配置后重启hadoop集群:(root处是报错的用户名)
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
3.引用
Hadoop2.0版本开始支持ProxyUser的机制。含义是使用User A的用户认证信息,以User B的名义去访问hadoop集群。对于服务端来说就认为此时是User B在访问集群,相应对访问请求的鉴权(包括HDFS文件系统的权限,YARN提交任务队列的权限)都以用户User B来进行。
假设superuser 用户名 super
,想替用户 joe
提交任何和访问hdfs。superuser 有 kerberos 凭据,但是用户 joe
没有。任务需要以用户joe
运行,对namenode上任何文件的访问也必须以用户joe
完成。需要用户joe
可以借助super
的kerberos凭据建立连接连到namenode或job tracker。换个说法,super
正在 impersonating (模拟)用户joe
。
通过在 core-site.xml
作如下设置,superuser super
可以并仅可以从 host1 和 host2 来模拟属于 group1 和 group2的用户:
<property>
<name>hadoop.proxyuser.super.hosts</name>
<value>host1,host2</value>
</property>
<property>
<name>hadoop.proxyuser.super.groups</name>
<value>group1,group2</value>
</property>
在解决方法中,安全要求不高,通配符*
可以用于来自任何主机或任何用户的 impersonation (模拟),来自任意主机的用户root 可以 impersonate (模拟)属于任意组的任何用户,此处不需要模拟用户,但是为root用户创建了自己的认证信息,root用户也就拥有了去hadoop集群上访问的权限:
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>