hadoop集群、hive已正常安装,hadoop集群已启动
先启动 metastore 服务:
nohup hive --service metastore 2>/usr/data/hive/log/metastore/metastore.err &
#或者
nohup hive --service metastore >/usr/data/hive/log/metastore/metastore.log &
#之后发现其实根本不输出日志到指定文件,所以直接运行如下命令即可:
nohup hive --service metastore &
再启动 hiveserver2 服务:
nohup hiveserver2 2>/usr/data/hive/log/hiveserver2/hiveserver.err &
#或者
nohup hiveserver2 >/usr/data/hive/log/hiveserver2/hiveserver.log &
#之后发现其实根本不输出日志到指定文件,所以直接运行如下命令即可:
nohup hiveserver2 &
启动命令各个参数含义见:参考文档
启动 beeline 客户端去连接
方式一:
beeline -u jdbc:hive2://node:10000 -n root
-u : 指定元数据库的链接信息 -n : 指定用户名和密码
方式二:
先执行 beeline
然后输入:!connect jdbc:hive2://node:10000 按回车,
然后输入用户名,这个 用户名就是安装 hadoop 集群的用户名
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root is not allowed to impersonate -n (state=08S01,code=0)
1.检查hiveserver2是否启动
2.然后在beeline端的hadoop目录下/etc/hadoop/core-site.xml加入配置:
<property>
<name>hadoop.proxyuser.root.hostsname>
<value>*value>
property>
<property>
<name>hadoop.proxyuser.root.groupsname>
<value>*value>
property>
注意配置中的root
代表的是一个用户,你异常中User后面的用户写的是哪个,你在这里就配置哪个。
hadoop.proxyuser.root.hosts
配置成*的意义,表示任意节点使用 hadoop 集群的代理用户 root 都能访问 hdfs 集群,hadoop.proxyuser.root.groups
表示代理用户的组所属
以上的两个配置是因为:hadoop引入了一个安全伪装机制,使得hadoop 不允许上层系统直接将实际用户传递到hadoop层,而是将实际用户传递给一个超级代理,由此代理在hadoop上执行操作,避免任意客户端随意操作hadoop
3.然后在/etc/hadoop/hdfs-site.xml中加入配置:
<property>
<name>dfs.webhdfs.enabledname>
<value>truevalue>
property>
将dfs.webhdfs.enabled属性设置为true,否则就不能使用webhdfs的LISTSTATUS、LISTFILESTATUS等需要列出文件、文件夹状态的命令,因为这些信息都是由namenode来保存的
具体参考文档
4.重启hadoop集群与hive的hiveserver2服务,再重新使用beeline连接
5.如果上述步骤都实在不行,则可以将hive的hive-site.xml中添加或修改为该配置(最好不要)
<property>
<name>hive.server2.enable.doAsname>
<value>falsevalue>
property>
如果为True:Hive Server会以提交用户的身份去执行语句
如果为False:会以hive server daemon的admin user来执行语句
hive.server2.enable.doAs设置成false,则yarn作业获取到的hiveserver2用户都为hive用户。
设置成true则为实际的用户名