本章节继续介绍HDFS的一些概念和功能。
一、配额
- HDFS允许管理员为某个目录设置文件名字配额,即是指在文件的拓扑树中以该目录为根的所有文件数目总和上限。超过配额时是不能够在该目录里新建目录或上传文件了。最大的配额是Long.Max_Value。在统计一个目录的所有文件数目时,目录本身也包括在内,故如果设置名字配额为1的话,将会使该目录保持为空。
管理命令:
设置名字配额:hdfs dfsadmin -setQuota <N> <directories> ......
删除名字配额:hdfs dfsadmin -clrQuota <directories> ......
- HDFS允许管理员为某个目录设置空间配额,即指在文件的拓扑树中以该目录为根的所有文件的字节数总和的上限。最大配额是Long.Max_Value。创建空文件或目录不会计算配额,但当在分配文件的block时,要写入整个block时,文件将会超出配额限制,此时block分配就会失败,这个block就无法写入文件。文件的副本都会计算进配额里。
管理命令:
设置空间配额:hdfs dfsadmin -setSpaceQuota <N> <directories> ......
删除空间配额:hdfs dfsadmin -clrSpaceQuota <directories> ......
- HDFS运行管理员设置目录的存储类型配额,即指在文件的拓扑树中以该目录为根的所有文件能够使用的存储类型。如果要使用存储类型配额,必须为该目录设置存储策略。
管理命令:
设置存储类型配额:hdfs dfsadmin -setSpaceQuota <N> -storageType <storageType><directories> ......
删除存储类型配额:hdfs dfsadmin -clrSpaceQuota -storageType <storageType> <directories> ......
配额信息被持久保存在fsimage文件里。如果在启动时,fsimage已经违反了配额限制,就会打印一些告警信息。在设置和删除配额时都会产生日志记录。
HDFS提供了查询目录详细统计信息的命令:
hadoop fs -count -q [-h] [-v] [-t [comma-separated list of storagetypes]] <directory>...<directory>
可以统计目标目录包含的总的目录数、文件数、总的字节大小、各种配额值及剩余值等信息。
二、权限管理
HDFS提供了与POSIX模型相似的权限模型。每个文件或目录都有所有者权限、所属组内用户权限、其它用户权限三种权限限制。对于文件,r表示可以读取文件、w表示可以写文件及追加文件。对于目录,r表示可以列出目录内容、w表示可以创建或删除文件或目录、x表示可以访问目录的子目录。
与POSIX模型不同的是,HDFS的权限模型中没有设置用户标识、没有设置用户组标识,对于文件也没有“可执行”这样的概念。可以为目录设置粘滞位,用来防止除管理员用户、所属用户、所属组内用户之外的其它用户删除和移动目录里的文件。对文件设置粘滞位是没有效果的。HDFS的文件权限和目录权限是不同的。
当创建文件或目录时,它的所有者即是客户端进程的用户,它的所属组即是其父目录的所属组。
HDFS也支持POSIX ACLs细粒度角色权限控制。
从hadoop0.22开始,hadoop提供了两种用户身份验证方式,配置参数是hadoop.security.authentication,可选值如下: