原文:http://hadoop.apache.org/docs/r2.6.4/hadoop-project-dist/hadoop-hdfs/ExtendedAttributes.html
概述
扩展属性(简写为xattrs)是一个文件系统的特性,它允许用户程序用一个文件或目录关联额外的元数据。不同于系统级的inode元数据比如权限或修改时间,扩展属性不会被系统解释,它是用来被应用程序解读并存储inode额外信息的。扩展属性用来存储比如一个文本文档的编码信息。
HDFS扩展属性
HDFS的扩展属性是依照Linux的扩展属性来建模的(参见Linux帮助手册attr(5)和相关文档)。一个扩展属性就是一个名值对,包含一个字符串名字和一个二进制值。扩展属性名必须依照一个特定的命名空间前缀命名。比如,一个叫做myXattr的属性名必须声明为user.myXattr,这说明在user的命名空间下。多个扩展属性可以关联同一个inode。
命名空间和权限
HDFS包含5个合理的命名空间:user, trusted, system, security, 和 raw。每个命名空间拥有不同的访问限制。
user命名空间是被客户端应用程序使用的命名空间。在user命名空间访问扩展属性被对应的文件权限来控制访问。
trusted命名空间只对HDFS的超级用户有效。
system命名空间是保留给HDFS内部使用的。该命名空间不能通过用户级别的方法访问到,只被用来实现HDFS内部的feature。
security命名空间也是保留给HDFS内部使用的。该命名空间不能通过用户级别的方法访问。security的一个特定的使用时扩展属性security.hdfs.unreadable.by.superuser。这个属性只能设置到文件上,它可以禁止超级用户来读取文件内容。超级用户可以读取和修改文件的元数据,比如owner,权限等。这个扩展属性可以被任何拥有普松文件系统权限的用户设置和访问。该属性是write-once的,一旦被设置将不能被删除。该属性不允许设置值。
raw命名空间是内部系统保留的命名空间,但是有时会暴露给外部。除非一个在/.reserved/raw目录下的文件被getXAttr/getXAttrs调用,否则raw命名空间像其他系统级命名空间一样不被外部用户访问。这些属性只能被超级用户访问。一个raw命名空间扩展属性使用的案例就是distcp。加密区域的元数据存储在raw.*的扩展属性里,只要管理员使用/.reserved/raw路径作为源或者目标,在加密域中的加密文件会被透明的复制。
与扩展属性交互
Hadoop shell支持扩展属性的交互,通过hadoop fs -getfattr
名令和hadoop fs -setfattr
命令。这些明星类似Linux的 getfattr(1) 和 setfattr(1)。
getfattr
hadoop fs -getfattr [-R] -n name | -d [-e en] <path>
显示一个文件或者目录的扩展属性名和值。
参数 | 描述 |
---|---|
-R |
递归显示所有目录和文件的扩展属性。 |
-n name |
Dump指定名字的扩展属性值。 |
-d |
Dump指定路径的所有扩展属性值。 |
-e <encoding> |
查询属性值后对其encode。合法的编码包括:"text", "hex", 和 "base64"。被编码的字符串会被双引号包围,被编码为16进制和base64的会有个前缀0x和0s。 |
<path> |
文件或者目录。 |
setfattr
hadoop fs -setfattr -n name [-v value] | -x name <path>
为一个目录或者文件设置一个扩展属性。
参数 | 描述 |
---|---|
-n name |
扩展属性名 |
-v value |
扩展属性值。有三种不同的编码方法。如果参数被包围在双引号内,则值是普通字符串类型。如果以0x或者0X开头,那么值是16进制数字。如果以0s或者0S开头,则值是base64编码的串。 |
-x name |
删除扩展属性。 |
<path> |
文件或者目录。 |
配置选项
HDFS支持在配置之外使用扩展属性。因为扩展属性会增加inode的磁盘和内存空间的消耗,管理员可能会限制每个inode的扩展属性数量和大小。
- dfs.namenode.xattrs.enabled
在NameNode上是否支持扩展尚需经。默认情况扩展属性是enable的。 - dfs.namenode.fs-limits.max-xattrs-per-inode
每个inode支持的最大扩展属性数。默认值是32。 - dfs.namenode.fs-limits.max-xattr-size
一个扩展属性的名和值的组合最大字节数。默认情况,上限是16384字节。