离线编辑查看器指南

概述

离线编辑查看器是一种用于解析编辑日志文件的工具。当前的处理器主要用于在不同格式之间进行转换,包括人类可读且比本机二进制格式更容易编辑的 XML。

该工具可以解析 -18(大致为 Hadoop 0.19)及更高版本的编辑格式。该工具仅对文件进行操作,不需要运行 Hadoop 集群。

支持的输入格式

  1. 二进制:Hadoop 在内部使用的本机二进制格式
  2. xml:XML 格式,由 xml 处理器生成,如果文件名有 .xml(不区分大小写)扩展名,则使用

注意:不允许同类型的处理器处理 XML/二进制格式的输入文件。

离线编辑查看器提供了多个输出处理器(除非另有说明,否则可以将处理器的输出转换回原始编辑文件)

  1. 二进制:Hadoop 在内部使用的本机二进制格式
  2. xml:XML 格式
  3. stats:打印统计信息,无法转换回编辑文件

用法

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] 处理器 指定要针对图像文件应用的图像处理器。当前有效的选项为 binaryxml(默认)和 stats
[-v ; --verbose] 打印输入和输出文件名,并将处理器的输出管道输出到控制台以及指定的文件。对于极大的文件,这可能会将处理时间增加一个数量级。
[-f ; --fix-txids] 重新编号输入中的事务 ID,以便没有间隙或无效的事务 ID。
[-r ; --recover] 在读取二进制编辑日志时,使用恢复模式。这将让你有机会跳过编辑日志的损坏部分。
[-h ; --help] 显示工具用法和帮助信息,然后退出。

案例研究:Hadoop 集群恢复

如果 Hadoop 集群出现问题并且编辑文件损坏,则有可能保存至少一部分正确的编辑文件。这可以通过将二进制编辑转换为 XML、手动编辑它,然后将其转换回二进制来完成。最常见的问题是编辑文件缺少结束记录(具有 opCode -1 的记录)。工具应该识别出这一点,并且 XML 格式应该正确关闭。

如果 XML 文件中没有结束记录,则可以在最后一个正确记录后添加一个。opCode -1 之后的任何内容都将被忽略。

结束记录的示例(带 opCode -1)

  <RECORD>
    <OPCODE>-1</OPCODE>
    <DATA>
    </DATA>
  </RECORD>