问题:
java通过jdbc连接hive数据库
可以运行
select * from tables
但是运行count(*) 报错:
select count(*) from tables
解决
参考1:zyl26的博客
出现原因可能是:
因为执行" select * from table; "并不需要启动mapreduce任务。而执行"select count(*) from table;"需要启动mapreduce任务。解决方法看执行过程的错误信息,我得到的信息是当前用户对于hdfs文件系统的/user文件夹没有写权限,只要开放权限,就可以解决问题。
但是具体怎么放开权限,博客中没有给出(尴尬)
没办法,去看hive日志寻找线索:
每个人的hive日志路径都不同,具体可以查看
vi $HIVE_HOME/conf/hive-log4j.properties
一般hive.log.dir 都是 /tmp/***
进入 hive.log.dir下的,打开 hive.log.对应日期,我打开的是 hive.log.2020-11-24
tail -200f hive.log.2020-11-24
查看报错为:
Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=anonymous, access=EXECUTE, inode="/stage/anonymous/.staging/job_1606096562668_0026":root:supergroup:drwx------
Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=anonymous, access=EXECUTE, inode="/stage/anonymous/.staging/job_1606096562668_0028":root:supergroup:drwx------
参考2:azhao_dn 的博客
原因的确是hdfs上文件夹的权限问题,故:
赋值权限:
hadoop fs -chmod -R 777 /tmp
hadoop fs -chmod -R 777 /stage
查看权限:
hdfs dfs -ls /
变为:
drwxrwxrwx - root supergroup 0 2020-10-23 14:27 /tmp
drwxrwxrwx - root supergroup 0 2020-10-23 14:27 /stage