天天看点

HDFS扩展属性

扩展属性(简写为xattrs)是一个文件系统的特性,它允许用户程序用一个文件或目录关联额外的元数据。不同于系统级的inode元数据比如权限或修改时间,扩展属性不会被系统解释,它是用来被应用程序解读并存储inode额外信息的。扩展属性用来存储比如一个文本文档的编码信息。

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支持扩展属性的交互,通过<code>hadoop fs -getfattr</code>名令和<code>hadoop fs -setfattr</code>命令。这些明星类似linux的 getfattr(1) 和 setfattr(1)。

显示一个文件或者目录的扩展属性名和值。

参数

描述

<code>-r</code>

递归显示所有目录和文件的扩展属性。

<code>-n name</code>

dump指定名字的扩展属性值。

<code>-d</code>

dump指定路径的所有扩展属性值。

<code>-e &lt;encoding&gt;</code>

查询属性值后对其encode。合法的编码包括:"text", "hex", 和 "base64"。被编码的字符串会被双引号包围,被编码为16进制和base64的会有个前缀0x和0s。

<code>&lt;path&gt;</code>

文件或者目录。

为一个目录或者文件设置一个扩展属性。

扩展属性名

<code>-v value</code>

扩展属性值。有三种不同的编码方法。如果参数被包围在双引号内,则值是普通字符串类型。如果以0x或者0x开头,那么值是16进制数字。如果以0s或者0s开头,则值是base64编码的串。

<code>-x name</code>

删除扩展属性。

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字节。