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>