今天用Cloudera Manager安装Hive时老不成功,不能初始化数据库表,遇到很多问题,最后手工初始化,解决的,但是挡在hive命令行执行写入类命令比如创建数据库或表时出现以下问题:
14/07/23 01:07:14 ERROR : Got exception: Permission denied: user=root, access=WRITE, inode="/user":hdfs:supergroup:drwxr-xr-x
at (:271)
at (:257)
at (:238)
at (:179)
at (:5584)
at (:5566)
at (:5540)
at (:3685)
at (:3655)
at (:3629)
at (:741)
at (:558)
at $ClientNamenodeProtocol$()
at $Server$(:585)
at $(:1026)
at $Handler$(:1986)
at $Handler$(:1982)
at (Native Method)
at (:415)
at (:1554)
at $(:1980)
: Permission denied: user=root, access=WRITE, inode="/user":hdfs:supergroup:drwxr-xr-x
at (:271)
at (:257)
at (:238)
at (:179)
at (:5584)
at (:5566)
at (:5540)
at (:3685)
at (:3655)
at (:3629)
at (:741)
at (:558)
at $ClientNamenodeProtocol$()
at $Server$(:585)
at $(:1026)
at $Handler$(:1986)
at $Handler$(:1982)
at (Native Method)
at (:415)
at (:1554)
at $(:1980)
at .newInstance0(Native Method)
at (:57)
at (:45)
at (:526)
at (:106)
at (:73)
at (:2550)
at (:2519)
at $(:827)
at $(:823)
at (:81)
at (:823)
at (:816)
at (:1815)
at (:339)
at (:185)
at $HMSHandler.create_database_core(:569)
at $HMSHandler.create_database(:606)
at .invoke0(Native Method)
at (:57)
at (:43)
at (:606)
at (:105)
at .$Proxy16.create_database(Unknown Source)
at (:472)
at .invoke0(Native Method)
at (:57)
at (:43)
at (:606)
at (:89)
at .$(Unknown Source)
at (:228)
at (:3432)
at (:227)
at (:151)
at (:65)
at (:1485)
at (:1263)
at (:1091)
at (:931)
at (:921)
at (:268)
at (:220)
at (:422)
at (:790)
at (:684)
at (:623)
at .invoke0(Native Method)
at (:57)
at (:43)
at (:606)
at (:212)
Caused by: (): Permission denied: user=root, access=WRITE, inode="/user":hdfs:supergroup:drwxr-xr-x
at (:271)
at (:257)
at (:238)
at (:179)
at (:5584)
at (:5566)
at (:5540)
at (:3685)
at (:3655)
at (:3629)
at (:741)
at (:558)
at $ClientNamenodeProtocol$()
at $Server$(:585)
at $(:1026)
at $Handler$(:1986)
at $Handler$(:1982)
at (Native Method)
at (:415)
at (:1554)
at $(:1980)
.........................
大概意思是说,我当前操作在root用户下,root用户对这个文件夹没有权限。
hdfs dfs -ls /
Found 3 items
drwxr-xr-x - hbase hbase 0 2014-07-23 01:34 /hbase
drwxrwxrwt - hdfs supergroup 0 2014-07-23 01:57 /tmp
drwxr-xr-x - hdfs supergroup 0 2014-07-23 01:40 /user
查看了一下,只有hdfs用户有写权限,于是
su hdfs
切换到hdfs用户下,执行
hdfs dfs -chmod -R 777 /user
再次ls命令查看,文件夹权限就变成777了。
<!--more-->
以下来自HDFS文档HDFS Permission
HDFS支持权限控制,但支持较弱。HDFS的设计是基于POSIX模型的,支持按用户、用户组、其他用户的读写执行控制权限。在linux命令行下,可以使用下面的命令修改文件的权限、文件所有者,文件所属组:
hadoop fs –chmod (修改文件所有者,文件所属组,其他用户的读、写、执行权限)
haddop fs –chown (修改文件所有者)
hadoop fs –chgrp (修改文件所属组)
不同用户使用不同的linux帐户即可访问到特定文件。
启动hadoop hdfs系统的用户即为超级用户,可以进行任意的操作。
需要注意的是:HDFS本身没有提供用户名、用户组的创建,在客户端调用hadoop 的文件操作命令时,hadoop 识别出执行命令所在进程的用户名和用户组,然后使用这个用户名和组来检查文件权限。
用户名=linux命令中的`whoami`,而组名等于`bash -c groups `。