[关闭]
@changedi 2017-03-03T17:24:45.000000Z 字数 1991 阅读 2487

HDFS扩展属性

大数据 HDFS



原文: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的扩展属性数量和大小。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注