【框架解析】Hadoop系统分析(八)--editlog管理
2013-02-22 17:07
211 查看
Editlog文件记录了日常针对数据文件的操作,在Hdfs启动时,会合并fsimage文件与editlog文件,构成整个hdfs整个文件系统。对editlog进行操作主要的类有如下:
![](http://img.my.csdn.net/uploads/201302/22/1361524181_5035.jpg)
FSEditLog
操作editlog文件,包括打开、关闭、写入等操作
open
使用EditLogOutputStream打开所有的editlog文件,准备往里写入数据。
close
关闭所有打开的editlog文件
判断editlog是否处于同步中状态,如果处于正在同步日志,则等待1秒后重试直到退出同步状态。
将EditLogOutputStream中内容全部flush进文件
关闭文件
createEditLogFile
创建对应的editlog文件
logEdit
记录操作到editlog中,但是还没有进行持久化,之后将本次操作计入统计数据
参数op
logOpenFile
记录获取lease的操作,记录内容:OPP_ADD|[path(路径)|replication(副本数)|modification time(修改时间)|access time(访问时间)|prefered block size(block大小)]|[block info(block信息)]|permission status(权限状态)|client name(客户名)|client machine(客户机器名)
logCloseFile
记录释放lease的操作,记录内容:OPP_CLOSE|[path(路径)|replication(副本数)|modification time(修改时间)|access time(访问时间)|prefered block size(block大小)]|[block info(block信息)]|permission status(权限状态)
logMkDir
记录创建目录的操作,记录内容:OPP_MKDIR|[path(路径)|modification time(修改时间)|access time(访问时间)]|permission status
logRename
记录修改名称的操作,记录内容:OP_RENAME|[src(原路径)|dst(目标路径)|timestamp(重命名时间)]
logSetReplication
记录修改副本数的操作,记录内容:OP_SET_REPLICATION|src(文件路径)|replication(副本数)
logSetQuota
记录修改空间额度操作,记录内容:OP_SET_QUOTA|src(文件路径)|nsQuota(文件空间额度)|dsQuota(磁盘空间额度)
logSetPermissions
记录修改权限的操作,记录内容:OP_SET_PERMISSIONS|src(文件路劲)|permissions(权限信息)
logSetOwner
记录修改文件所有者和组的操作,记录内容:OP_SET_OWNER|src(文件路劲)|username|groupname
logDelete
记录删除文件的操作,记录内容:OP_DELETE|[src(文件路径)|操作时间]
logGenerationStamp
记录生成文件版本序列号的操作,记录内容:OP_SET_GENSTAMP|genstamp(序列号)
logTimes
记录修改访问时间和更新时间的操作,记录内容:OP_TIMES|[src(文件路径)|mtime(修改时间)|atime(访问时间)]
logGetDelegationToken
记录获取授权标识的操作,记录内容:OP_GET_DELEGATION_TOKEN|id(标识id)|expiryTime(超时时间)
logRenewDelegationToken
记录更新授权标识的操作,记录内容:OP_RENEW_DELEGATION_TOKEN|id(标识id)|expiryTime(超时时间)
logCancelDelegationToken
记录取消授权标识的操作,记录内容:OP_CANCEL_DELEGATION_TOKEN|id(标识id)|
logUpdateMasterKey
记录更新MasterKey的操作,记录内容:OP_UPDATE_MASTER_KEY|key
rollEditLog
关闭当前的edits文件,并且打开edits.new文件
如果已经存在edits.new,确认所有的edits.new一致性没问题后直接返回
否则关闭当前editlog文件,打开edits.new文件用于记录editlog
purgeEditLog
移除老的edits文件,并将edits.new重新命名为edits
processIOError
统一处理io错误
logSync
同步editlog
loadFSEdits
加载editlog,并把editlog的内容合并到内存结构中,主要根据opcode的不同将之前写入操作记录读取出来并应用到FSNameSystem中
EditLogInputStream
抽象类,封装了用于读editlog的基本操作,具体内容由EditLogFileInputStream实现
EditLogFileInputStream
对FileInputStream进行封装,同时能够获取到editlog的文件路径与文件长度
EditLogOutputStream
抽象类,封装了用于写editlog的基本操作,具体内容由EditLogFileOutputStream实现
EditLogFileOutputStream
用于将修改日志写入editlog中,主要的方法有:
create
创建一个空的edits log文件,内容只有版本号以及OP_INVALID结束标志
write
将输入的内容写入buffer
setReadyToFlush
flush前的准备,往buffer里写入OP_INVALID表示当次日志结束
preallocate
分配1MB空间用于flush日志时使用
flushAndSync
将内存中的日志写入文件,清空缓存中数据,将文件指针指向文件当前位置-1的位置(忽略OP_INVALID的文件结束标志)
close
关闭文件,释放空间
![](http://img.my.csdn.net/uploads/201302/22/1361524181_5035.jpg)
FSEditLog
操作editlog文件,包括打开、关闭、写入等操作
open
使用EditLogOutputStream打开所有的editlog文件,准备往里写入数据。
close
关闭所有打开的editlog文件
判断editlog是否处于同步中状态,如果处于正在同步日志,则等待1秒后重试直到退出同步状态。
将EditLogOutputStream中内容全部flush进文件
关闭文件
createEditLogFile
创建对应的editlog文件
logEdit
记录操作到editlog中,但是还没有进行持久化,之后将本次操作计入统计数据
参数op
参数名称 | 参数值 | 备注 |
---|---|---|
OP_INVALID | -1 | 日志结束时写入-1标识 |
OP_ADD | 0 | 拿到lease标识 |
OP_RENAME | 1 | 更改文件名 |
OP_DELETE | 2 | 删除文件 |
OP_MKDIR | 3 | 创建目录 |
OP_SET_REPLICATION | 4 | 更改副本数 |
OP_SET_PERMISSIONS | 7 | 设置权限 |
OP_SET_OWNER | 8 | 设置文件所有者和组 |
OP_CLOSE | 9 | 归还lease |
OP_SET_GENSTAMP | 10 | 设置文件版本序列号 |
OP_SET_NS_QUOTA | 11 | 设置命名空间硬盘额度 |
OP_CLEAR_NS_QUOTA | 12 | 清楚命名空间硬盘额度 |
OP_TIMES | 13 | 文件更新/访问时间 |
OP_SET_QUOTA | 14 | 设置空间额度 |
OP_GET_DELEGATION_TOKEN | 18 | 获取授权标识 |
OP_RENEW_DELEGATION_TOKEN | 19 | 更新授权标识 |
OP_CANCEL_DELEGATION_TOKEN | 20 | 取消授权标识 |
OP_UPDATE_MASTER_KEY | 21 | 更新master key |
记录获取lease的操作,记录内容:OPP_ADD|[path(路径)|replication(副本数)|modification time(修改时间)|access time(访问时间)|prefered block size(block大小)]|[block info(block信息)]|permission status(权限状态)|client name(客户名)|client machine(客户机器名)
logCloseFile
记录释放lease的操作,记录内容:OPP_CLOSE|[path(路径)|replication(副本数)|modification time(修改时间)|access time(访问时间)|prefered block size(block大小)]|[block info(block信息)]|permission status(权限状态)
logMkDir
记录创建目录的操作,记录内容:OPP_MKDIR|[path(路径)|modification time(修改时间)|access time(访问时间)]|permission status
logRename
记录修改名称的操作,记录内容:OP_RENAME|[src(原路径)|dst(目标路径)|timestamp(重命名时间)]
logSetReplication
记录修改副本数的操作,记录内容:OP_SET_REPLICATION|src(文件路径)|replication(副本数)
logSetQuota
记录修改空间额度操作,记录内容:OP_SET_QUOTA|src(文件路径)|nsQuota(文件空间额度)|dsQuota(磁盘空间额度)
logSetPermissions
记录修改权限的操作,记录内容:OP_SET_PERMISSIONS|src(文件路劲)|permissions(权限信息)
logSetOwner
记录修改文件所有者和组的操作,记录内容:OP_SET_OWNER|src(文件路劲)|username|groupname
logDelete
记录删除文件的操作,记录内容:OP_DELETE|[src(文件路径)|操作时间]
logGenerationStamp
记录生成文件版本序列号的操作,记录内容:OP_SET_GENSTAMP|genstamp(序列号)
logTimes
记录修改访问时间和更新时间的操作,记录内容:OP_TIMES|[src(文件路径)|mtime(修改时间)|atime(访问时间)]
logGetDelegationToken
记录获取授权标识的操作,记录内容:OP_GET_DELEGATION_TOKEN|id(标识id)|expiryTime(超时时间)
logRenewDelegationToken
记录更新授权标识的操作,记录内容:OP_RENEW_DELEGATION_TOKEN|id(标识id)|expiryTime(超时时间)
logCancelDelegationToken
记录取消授权标识的操作,记录内容:OP_CANCEL_DELEGATION_TOKEN|id(标识id)|
logUpdateMasterKey
记录更新MasterKey的操作,记录内容:OP_UPDATE_MASTER_KEY|key
rollEditLog
关闭当前的edits文件,并且打开edits.new文件
如果已经存在edits.new,确认所有的edits.new一致性没问题后直接返回
否则关闭当前editlog文件,打开edits.new文件用于记录editlog
purgeEditLog
移除老的edits文件,并将edits.new重新命名为edits
processIOError
统一处理io错误
logSync
同步editlog
loadFSEdits
加载editlog,并把editlog的内容合并到内存结构中,主要根据opcode的不同将之前写入操作记录读取出来并应用到FSNameSystem中
EditLogInputStream
抽象类,封装了用于读editlog的基本操作,具体内容由EditLogFileInputStream实现
EditLogFileInputStream
对FileInputStream进行封装,同时能够获取到editlog的文件路径与文件长度
EditLogOutputStream
抽象类,封装了用于写editlog的基本操作,具体内容由EditLogFileOutputStream实现
EditLogFileOutputStream
用于将修改日志写入editlog中,主要的方法有:
create
创建一个空的edits log文件,内容只有版本号以及OP_INVALID结束标志
write
将输入的内容写入buffer
setReadyToFlush
flush前的准备,往buffer里写入OP_INVALID表示当次日志结束
preallocate
分配1MB空间用于flush日志时使用
flushAndSync
将内存中的日志写入文件,清空缓存中数据,将文件指针指向文件当前位置-1的位置(忽略OP_INVALID的文件结束标志)
close
关闭文件,释放空间
相关文章推荐
- 【框架解析】Hadoop系统分析(一)--shell命令汇总
- 【框架解析】Hadoop系统分析(六)--secondarynamenode
- 【框架解析】Hadoop系统分析(九)--Http服务
- 【框架解析】Hadoop系统分析(十)--对象序列化
- 【框架解析】Hadoop系统分析(五)--namenode其他
- 【框架解析】Hadoop系统分析(七)--namenode后台进程
- 【框架解析】Hadoop系统分析(十一)--RPC
- 【框架解析】Hadoop系统分析(四)--namenode regular
- 【框架解析】Hadoop系统分析(三)--namenode format
- 【框架解析】Hadoop系统分析(二)--代码模块汇总
- 更快、更强——解析Hadoop新一代MapReduce框架Yarn
- Hadoop技术内幕之RPC框架解析(上)
- Hadoop技术内幕之RPC框架解析(下)
- 解析Hadoop新一代MapReduce框架Yarn
- 更快、更强——解析Hadoop新一代MapReduce框架Yarn
- Hadoop学习笔记(2)hadoop框架解析
- Hadoop RPC 框架解析
- 更快、更强——解析Hadoop新一代MapReduce框架Yarn
- Hadoop MapReduce核心技术浅析-----RPC框架解析
- [读书笔记]深入解析MapReduce架构设计与实现原理——CH4 Hadoop RPC基本框架