beeline连接HIVE默认登入使用anonymous用户权限不够

在用beeline连接hive查询表数据时,出现错误权限不够

ERROR : Job Submission failed with exception 'org.apache.hadoop.security.AccessControlException
(Permission denied: user=anonymous, access=WRITE, inode="/user":hdfs:supergroup:drwxr-xr-x
	at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.checkFsPermission(DefaultAuthorizationProvider.java:279)
	at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.check(DefaultAuthorizationProvider.java:260)
	at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.check(DefaultAuthorizationProvider.java:240)
	at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.checkPermission(DefaultAuthorizationProvider.java:162)

可以看出默认登入使用的是anonymous用户,而对应的表在hdfs上的目录为:

drwxr-xr-x   - hdfs  supergroup

总的来说,出除了hdfs用户,其他用户对文件读写可能都会有问题,就算使用root用户上传文件,也会报权限不够。通常的办法是改目录权限:

hdfs dfs  chmod 777 ***

但是!

不可能每次在hive shell中创建表生成目录,都要手动改目录权限。所以,最直接的办法是改变beeline登入的用户为hdfs,好在beeline提供了 -n 用户名参数 ,可以执行:

beeline -n hdfs -u jdbc:hive2://localhost:10000

于是beeline就以hdfs用户登入,读写数据权限问题会少很多。但需要注意一点,beeline命令如果写成两行:

beeline -n hdfs
!connect jdbc:hive2://localhost:10000

这样分两步执行,-n 参数是不生效的。
另外建议:凡是涉及hdfs的操作都用hdfs用户来进行

你可能感兴趣的:(大数据)