离线编辑查看器是一种用于解析编辑日志文件的工具。当前的处理器主要用于在不同格式之间进行转换,包括人类可读且比本机二进制格式更容易编辑的 XML。
该工具可以解析 -18(大致为 Hadoop 0.19)及更高版本的编辑格式。该工具仅对文件进行操作,不需要运行 Hadoop 集群。
支持的输入格式
.xml
(不区分大小写)扩展名,则使用注意:不允许同类型的处理器处理 XML/二进制格式的输入文件。
离线编辑查看器提供了多个输出处理器(除非另有说明,否则可以将处理器的输出转换回原始编辑文件)
XML 处理器可以创建一个包含编辑日志信息的 XML 文件。用户可以通过命令行中的 -i 和 -o 指定输入和输出文件。
bash$ bin/hdfs oev -p xml -i edits -o edits.xml
XML 处理器是离线编辑查看器中的默认处理器,用户还可以使用以下命令
bash$ bin/hdfs oev -i edits -o edits.xml
这将产生以下输出
<?xml version="1.0" encoding="UTF-8"?> <EDITS> <EDITS_VERSION>-64</EDITS_VERSION> <RECORD> <OPCODE>OP_START_LOG_SEGMENT</OPCODE> <DATA> <TXID>1</TXID> </DATA> </RECORD> <RECORD> <OPCODE>OP_UPDATE_MASTER_KEY</OPCODE> <DATA> <TXID>2</TXID> <DELEGATION_KEY> <KEY_ID>1</KEY_ID> <EXPIRY_DATE>1487921580728</EXPIRY_DATE> <KEY>2e127ca41c7de215</KEY> </DELEGATION_KEY> </DATA> </RECORD> <RECORD> ...remaining output omitted...
二进制处理器与 XML 处理器相反。用户可以通过命令行中的 -i 和 -o 指定输入 XML 文件和输出文件。
bash$ bin/hdfs oev -p binary -i edits.xml -o edits
这将从 XML 文件重建一个编辑日志文件。
统计处理器用于汇总编辑日志文件中包含的操作码计数。用户可以通过 -p 选项指定此处理器。
bash$ bin/hdfs oev -p stats -i edits -o edits.stats
此处理器的输出结果应如下所示
VERSION : -64 OP_ADD ( 0): 8 OP_RENAME_OLD ( 1): 1 OP_DELETE ( 2): 1 OP_MKDIR ( 3): 1 OP_SET_REPLICATION ( 4): 1 OP_DATANODE_ADD ( 5): 0 OP_DATANODE_REMOVE ( 6): 0 OP_SET_PERMISSIONS ( 7): 1 OP_SET_OWNER ( 8): 1 OP_CLOSE ( 9): 9 OP_SET_GENSTAMP_V1 ( 10): 0 ...some output omitted... OP_APPEND ( 47): 1 OP_SET_QUOTA_BY_STORAGETYPE ( 48): 1 OP_ADD_ERASURE_CODING_POLICY ( 49): 0 OP_ENABLE_ERASURE_CODING_POLICY ( 50): 1 OP_DISABLE_ERASURE_CODING_POLICY ( 51): 0 OP_REMOVE_ERASURE_CODING_POLICY ( 52): 0 OP_INVALID ( -1): 0
输出格式为冒号分隔的两列表格:OpCode 和 OpCodeCount。每个 OpCode 对应于 NameNode 中的特定操作。
标志 | 说明 |
---|---|
[-i ; --inputFile ] 输入文件 |
指定要处理的输入编辑日志文件。不区分大小写的 Xml 扩展名表示 XML 格式,否则假定为二进制格式。必需。 |
[-o ; --outputFile ] 输出文件 |
指定输出文件名(如果指定的输出处理器生成一个文件名)。如果指定的文件已存在,则会静默覆盖它。必需。 |
[-p ; --processor ] 处理器 |
指定要针对图像文件应用的图像处理器。当前有效的选项为 binary 、xml (默认)和 stats 。 |
[-v ; --verbose ] |
打印输入和输出文件名,并将处理器的输出管道输出到控制台以及指定的文件。对于极大的文件,这可能会将处理时间增加一个数量级。 |
[-f ; --fix-txids ] |
重新编号输入中的事务 ID,以便没有间隙或无效的事务 ID。 |
[-r ; --recover ] |
在读取二进制编辑日志时,使用恢复模式。这将让你有机会跳过编辑日志的损坏部分。 |
[-h ; --help ] |
显示工具用法和帮助信息,然后退出。 |
如果 Hadoop 集群出现问题并且编辑文件损坏,则有可能保存至少一部分正确的编辑文件。这可以通过将二进制编辑转换为 XML、手动编辑它,然后将其转换回二进制来完成。最常见的问题是编辑文件缺少结束记录(具有 opCode -1 的记录)。工具应该识别出这一点,并且 XML 格式应该正确关闭。
如果 XML 文件中没有结束记录,则可以在最后一个正确记录后添加一个。opCode -1 之后的任何内容都将被忽略。
结束记录的示例(带 opCode -1)
<RECORD> <OPCODE>-1</OPCODE> <DATA> </DATA> </RECORD>