您的位置:首页 > 运维架构

【框架解析】Hadoop系统分析(八)--editlog管理

2013-02-22 17:07 211 查看
Editlog文件记录了日常针对数据文件的操作,在Hdfs启动时,会合并fsimage文件与editlog文件,构成整个hdfs整个文件系统。对editlog进行操作主要的类有如下:



FSEditLog

操作editlog文件,包括打开、关闭、写入等操作

open

使用EditLogOutputStream打开所有的editlog文件,准备往里写入数据。
close

关闭所有打开的editlog文件

判断editlog是否处于同步中状态,如果处于正在同步日志,则等待1秒后重试直到退出同步状态。
将EditLogOutputStream中内容全部flush进文件
关闭文件

createEditLogFile

创建对应的editlog文件
logEdit

记录操作到editlog中,但是还没有进行持久化,之后将本次操作计入统计数据

参数op

参数名称参数值备注
OP_INVALID-1日志结束时写入-1标识
OP_ADD0拿到lease标识
OP_RENAME1更改文件名
OP_DELETE2删除文件
OP_MKDIR3创建目录
OP_SET_REPLICATION4更改副本数
OP_SET_PERMISSIONS7设置权限
OP_SET_OWNER8设置文件所有者和组
OP_CLOSE9归还lease
OP_SET_GENSTAMP10设置文件版本序列号
OP_SET_NS_QUOTA11设置命名空间硬盘额度
OP_CLEAR_NS_QUOTA12清楚命名空间硬盘额度
OP_TIMES13文件更新/访问时间
OP_SET_QUOTA14设置空间额度
OP_GET_DELEGATION_TOKEN18获取授权标识
OP_RENEW_DELEGATION_TOKEN19更新授权标识
OP_CANCEL_DELEGATION_TOKEN20取消授权标识
OP_UPDATE_MASTER_KEY21更新master key
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

关闭文件,释放空间
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: