hive中beeline连接异常User:*** is not allowed to impersonate

异常处理
Error: Could not open client transport with JDBC Uri: jdbc:hive2://hadoop01:10000: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root is not allowed to impersonate (state=08S01,code=0)

hive是2.3.3版本

方法:
首先检查你的server端的hiveserver2 是否开启。

然后在beeline端的hadoop目录下/etc/hadoop/core-site.xml加入配置:

<property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>*</value>
</property>
<property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
</property>


注意配置中的“root”代表的是一个用户,你异常中User后面的用户写的是哪个,你在这里就配置哪个。
hadoop.proxyuser.root.hosts 配置成*的意义,表示任意节点使用 hadoop 集群的代理用户 root 都能访问 hdfs 集群,hadoop.proxyuser.root.groups 表示代理用户的组所属。
如异常:User zhangsan is not allowed to impersonate…
就配置为:

<property>
        <name>hadoop.proxyuser.zhangsan.hosts</name>
        <value>*</value>
</property>
<property>
        <name>hadoop.proxyuser.zhangsan.groups</name>
        <value>*</value>
</property>

然后在/etc/hadoop/hdfs-site.xml中加入配置:

<property>
 <name>dfs.webhdfs.enabled</name>
 <value>true</value>
</property>

以上的两个配置是因为:hadoop引入了一个安全伪装机制,使得hadoop 不允许上层系统直接将实际用户传递到hadoop层,而是将实际用户传递给一个超级代理,由此代理在hadoop上执行操作,避免任意客户端随意操作hadoop。hive2.3.3版本中必须要进行此配置,之前的版本不用配置好像也可以。

开启beeline:

beeline -u 'jdbc:hive2://hadoop01:10000/myhive' -n root


这里的“root”跟之前出现异常的用户相同,如果这里是zhangsan,就配置为:

beeline -u 'jdbc:hive2://hadoop01:10000/myhive' -n zahngsan

注意:这里的hadoop01是我的hive/conf/hive-site.xml中连接mysql配置的主机。
myhive是我储存hive元数据的database。
我的hive-site.xml配置为:

<configuration>
        <property>
                <name>javax.jdo.option.ConnectionURL</name>
                <value>jdbc:mysql://hadoop01:3306/myhive?createDatabaseIfNotExist=true</value>
        </property>
        <property>
                <name>javax.jdo.option.ConnectionDriverName</name>
                <value>com.mysql.jdbc.Driver</value>
        </property>
        <property>
                <name>javax.jdo.option.ConnectionUserName</name>
                <value>root</value>
        </property>
        <property>
                <name>javax.jdo.option.ConnectionPassword</name>
                <value>123456</value>
        </property>

</configuration>


如果你这里写的是localhost,就写为:

beeline -u 'jdbc:hive2://localhost:10000/你配置存放元数据的database' -n 出现异常User后面的用户

最后,最后,最后,注意,重新启动hdfs,和yarn。
start-dfs.sh
start-yarn.sh

异常解决!!!
 

发布了22 篇原创文章 · 获赞 6 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/lm19770429/article/details/89307048