本文固定链接:https://www.askmac.cn/archives/hdfs-extended-attributes.html
原文地址:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/ExtendedAttributes.html
1 简介
拓展属性(缩写为 xattrs)是一个文件系统特性,允许用户应用程序管理额外的元数据到文件和目录。不同于系统级别的inode元数据例如文件权限或修改时间,拓展属性不会被系统解析,并被应用程序用来存储关于inode的额外信息。例如,可以对实例使用拓展属性,来指定一个纯文文档的字符编码(www.askmac.cn)。
1.1 HDFS拓展属性
HDFS的拓展属性是在Linux的拓展属性之后的模块。一个额外属性是一个键值对,有一个字符串名称和二进制的值。Xattrs的名称必须是namespace的前缀。例如,一个名称为myXattr的xattr中的用户namespace应该被定义成user.myXattr。多个xattr可以被关联到一个inode。
1.2 命名空间和权限
在HDFS中,有5个有效的命名空间:user,trusted,system,security 和raw。每个命名空间有不同的访问限制(www.askmac.cn)。
User命名空间通常被客户端应用程序使用。在user命名空间中访问拓展属性被相关的文件权限控制。
Trusted 命名空间只能被HDFS超级用户使用
System 命名空间被内部HDFS保留使用。这个命名空间不能通过用户空间方法访问,并且为实施内部HDFS特性保留。
security 命名空间被内部HDFS保留使用。此命名空间一般是不可以通过用户空间的方法。一个特别使用 security 是security.hdfs.unreadable.by.superuser 拓展属性。这个xattr只能被设置到文件,并且其将放置超级用户读取文件的内容。这个超级用户仍然可以读取和修改文件的元数据,例如:所有者,权限,等等。这个xattr可以被任何用户设置和访问,假设是一般文件系统权限。这个xattr也可以写一次,并且一旦被设置无法移除。这个xattr不允许设置一个值(www.askmac.cn)。
Raw 命名空间是保留内部系统属性,有的时候需要被暴露。例如system 命名空间属性对于用户是不可见的,除了当getXAttr/getXAttrs在 /.reserved/raw HDFS层级中的文件或目录中调用。这个属性只能被超级用户访问。一个例子是 raw命名空间拓展属性被distcp工具使用。在 raw.*拓展属性中存储加密元数据区。所以只要管理员在源和目录使用/.reserved/raw,在加密空间中的加密文件是透明拷贝。
2.拓展属性的交互
Hadoop支持通过hadoop fs -getfattr 和 hadoop fs –setfattr来与拓展属性交互。这个命令的风格来自linux中的getfattr(1) 和setfattr(1) 命令(www.askmac.cn)
2.1 getfattr
hadoop fs -getfattr [-R] -n name | -d [-e en] <path>
显示一个文件或目录的拓展属性名称或者值(如果有的话)
-R | 递归列出所有文件和目录的熟悉 |
-n name | 转储给定拓展属性名称的值 |
-d | 转储相关路径下所有拓展属性的值 |
-e <encoding> | 在检索值之后进行编码。有效的编码是“text”,“hex”和“base64”.值以text字符串编码被双引号分隔(“),十六进制编码和Base64分别导游0X和0s的前缀。 |
<path> | 文件或目录 |
2.2 setfattr
hadoop fs -setfattr -n name [-v value] | -x name <path>
设置一个文件或目录的拓展属性名称和值(www.askmac.cn)
-n name | 拓展属性名称 |
-v value | 拓展属性的值。对于这个值有3种不同的编码。如果参数被双引号分隔,值在引号里面。如果参数是0x或0X前缀,那么是作为16进制数字。如果是0s或0S开头,那么是作为base64编码。 |
-x name | 移除拓展属性 |
<path> | 文件或目录 |
3.配置选项
HDFS能很好的支持拓展属性,不需要额外的配置。管理员可能潜在的对限制每个inode 的xattr数目和xattrs的大小感兴趣,因为xattrs会对一个inode增加磁盘和内存的消耗(www.askmac.cn)。
- dfs.namenode.xattrs.enabled
是否在namenode上启用拓展属性。默认是启用的
- dfs.namenode.fs-limits.max-xattrs-per-inode
每个inode中最多拓展属性的数目。默认值是32
- dfs.namenode.fs-limits.max-xattr-size
拓展属性的名称和值的联合最大大小(byte)。默认限制是 16384 bytes
Leave a Reply