在初次搭建完hadoop和hive后,没有设置登录验证的情况下,直接使用beeline命令连接远程的hive数据库,连接命令如下:
beeline -u jdbc:hive2://hserver1:10000 -n root
可能会报出如下错误:
Connecting to jdbc:hive2://hserver1:10000
20/05/12 16:06:33 [main]: WARN jdbc.HiveConnection: Failed to connect to hserver1:10000
Error: Could not open client transport with JDBC Uri: jdbc:hive2://hserver1: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 root (state=08S01,code=0)
出现这个报错的原因是由于hadoop引入了一个安全伪装机制,使得 hadoop 不允许上层系统直接将实际用户传递到hadoop层,而是将实际用户传递给一个超级代理,由此代理在hadoop上执行操作,避免任意客户端随意操作hadoop。
而hadoop内部还是延用linux对应的用户和权限。即用哪个linux用户启动hadoop,对应的用户也就成为hadoop的内部用户,例如当前启动hadoop的用户是root,对应的hadoop中用户也就是root。
所以解决办法就是在 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可根据实际启动hadoop的用户进行修改,修改完成后重新启动hadoop和hive即可连接
手机扫一扫
移动阅读更方便
你可能感兴趣的文章