hadoop_book/hdfs/FSDirectory详解.md

45 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 简介
Namenode最重要的两个功能之一就是维护整个文件系统的目录树即命名空间namesystem
HDFS文件系统的命名空间namespace 也就是以“/”为根的整个目录树, 是通过FSDirectory类来管理的。 FSNamesystem也提供了管理目录树结构的方法。
FSNamesystem中的方法多是调用FSDirectory类的实现。FSNamesystem在FSDirectory类方法的基础上添加了editlog日志记录的功能。
FSDirectory的操作则全部是在内存中进行的 并不进行editlog的日志记录。
## 参数
| 参数 | 默认值 | 描述 |
|----|----|----|
| dfs.permissions.enabled | true | 是否开启权限管理 |
| dfs.permissions.superusergroup | supergroup | 超级用户组 |
| dfs.namenode.acls.enabled | true | 设置为true以启用对HDFS ACL访问控制列表的支持。3.3.1版本默认启用ACL |
| dfs.namenode.posix.acl.inheritance.enabled | true | 是否启用POSIX格式的ACL权限 |
| dfs.namenode.xattrs.enabled | true | 是否支持扩展namenode的属性。 |
| dfs.namenode.fs-limits.max-xattr-size | 16384 | 以字节为单位的扩展属性的名称和值的最大组合大小。它应该大于0小于或等于32768。 |
| dfs.namenode.accesstime.precision | 3600000 | HDFS文件访问时间的精确值默认为1小时。当为0时表示禁用。 |
| dfs.quota.by.storage.type.enabled | true | 如果为true则启用基于存储类型的配额。 |
| dfs.ls.limit | 1000 | 限制ls打印的文件数。如果小于或等于零最多将打印 DFS_LIST_LIMIT_DEFAULT (= 1000)。 |
| dfs.content-summary.limit | 5000 | 在一个锁定周期中允许的最大内容摘要计数。0或负数意味着没有限制。 |
| dfs.content-summary.sleep-microsec | 500 | 在内容汇总计算中,两次请求锁的时间。 |
| dfs.namenode.fs-limits.max-component-length | 255 | 定义路径中每个组件中UTF-8编码的最大字节数。0的值将禁用检查。 |
| dfs.namenode.fs-limits.max-directory-items | 1024\*1024 | 定义目录可能包含的最大项目数。无法将属性设置为小于1或大于6400000的值。|
| dfs.namenode.fs-limits.max-xattrs-per-inode | 32 | 每个索引节点的扩展属性的最大数目。 |
| dfs.protected.subdirectories.enable | false | 是否保护 fs.protected.directories 上设置的目录的子目录。 |
| dfs.namenode.name.cache.threshold | 10 | 经常访问的文件访问次数超过了这个阈值缓存在FSDirectory nameCache中。 |
| dfs.namenode.quota.init-threads | 12 | quota初始化并发线程的数量。 |
## 常量
- INodeDirectory rootDir 整个文件系统目录树的根节点, 是INodeDirectory类型的 。
- FSNamesystem namesystem Namenode的门面类 这个类主要支持对数据块进行操作的一些方法, 例如addBlock()。
- INodeMap inodeMap 记录根目录下所有的INode,并维护INodeId ->INode的映射关系。
- ReentrantReadWriteLock dirLock 对目录树以及inodeMap字段操作的锁。
- NameCache<ByteArray> nameCache 将常用的name缓存下来 以降低byte[]的使用, 并降低JVM heap的使用。