离线编辑查看器指南

概述

离线编辑查看器(Offline Edits Viewer)是一个用于解析编辑日志文件的工具。当前处理器主要用于不同格式之间的转换,包括人类可读且比原生二进制格式更易于编辑的XML格式。

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

支持的输入格式:

  1. binary: Hadoop内部使用的原生二进制格式
  2. xml: XML格式,由xml处理器生成,当文件名具有.xml(不区分大小写)扩展名时使用

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

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

  1. binary: Hadoop内部使用的原生二进制格式
  2. xml: XML格式
  3. stats: 打印统计信息,此操作无法转换回Edits文件

使用说明

XML 处理器

XML处理器可以创建一个包含编辑日志信息的XML文件。用户可以通过命令行参数-i和-o指定输入和输出文件。

   bash$ bin/hdfs oev -p xml -i edits -o edits.xml

XML处理器是Offline Edits Viewer中的默认处理器,用户也可以使用以下命令:

   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)。每个操作码对应NameNode中的特定操作。

选项

标志 描述
[-i ; --inputFile] input file Specify the input edits log file to process. Xml (case insensitive) extension means XML format otherwise binary format is assumed. Required.
[-o ; --outputFile] output file Specify the output filename, if the specified output processor generates one. If the specified file already exists, it is silently overwritten. Required.
[-p ; --processor] processor Specify the image processor to apply against the image file. Currently valid options are binary, xml (default) and stats.
[-v ; --verbose] Print the input and output filenames and pipe output of processor to console as well as specified file. On extremely large files, this may increase processing time by an order of magnitude.
[-f ; --fix-txids] Renumber the transaction IDs in the input, so that there are no gaps or invalid transaction IDs.
[-r ; --recover] When reading binary edit logs, use recovery mode. This will give you the chance to skip corrupt parts of the edit log.
[-h ; --help] Display the tool usage and help information and exit.

案例研究:Hadoop集群恢复

如果hadoop集群出现问题且编辑文件损坏,可以尝试保存至少部分正确的编辑文件内容。这可以通过将二进制编辑文件转换为XML格式,手动编辑后再转换回二进制来实现。最常见的问题是编辑文件缺少结束记录(操作码为-1的记录)。该工具应能识别这种情况,并确保XML格式正确闭合。

如果XML文件中没有结束记录,您可以在最后一条正确记录后添加一条。操作码为-1的记录之后的任何内容都会被忽略。

关闭记录的示例(操作码为-1):

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