HDFS editlog文件解析与反解析

本文主要内容翻译自:
https://hadoop.apache.org/docs/r3.1.1/hadoop-project-dist/hadoop-hdfs/HdfsEditsViewer.html
个人添加了几个命令的示例。

目录

  • 概述
  • 使用
    • 命令使用说明
    • XML processor
    • binary processor
    • State processor
  • 案例学习:hadoop集群恢复

概述

  HDFS中解析edit log的工具是 Offile Edits Viewer,对应的命令是hdfs oev。当前的processor主要用于不同格式之间的转换,包括XML,和native binary,相比native binary,XML是人类可读且易于编辑的格式。
  该工具只对文件进行操作,不需要运行Hadoop集群。
  支持的输入格式:

  • binary: native binary format ,hadoop内部使用
  • xml: XML format, 由xml processor生成,在文件扩展名为.xml(不区分大小写)时使用。

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

  Offline Edits Viewer提供了几种输出processor(除非另有说明,否则处理器的输出可以转换回原始编辑文件):

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

使用

命令使用介绍

$ hdfs oev -h
Usage: bin/hdfs oev [OPTIONS] -i INPUT_FILE -o OUTPUT_FILE
Offline edits viewer
Parse a Hadoop edits log file INPUT_FILE and save results
in OUTPUT_FILE.
Required command line arguments:
-i,--inputFile <arg>   edits file to process, xml (case
                       insensitive) extension means XML format,
                       any other filename means binary format.
                       XML/Binary format input file is not allowed
                       to be processed by the same type processor.
-o,--outputFile <arg>  Name of output file. If the specified
                       file exists, it will be overwritten,
                       format of the file is determined
                       by -p option

Optional command line arguments:
-p,--processor <arg>   Select which type of processor to apply
                       against image file, currently supported
                       processors are: binary (native binary format
                       that Hadoop uses), xml (default, XML
                       format), stats (prints statistics about
                       edits file)
-h,--help              Display usage information and exit
-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.
-v,--verbose           More verbose output, prints the input and
                       output filenames, for processors that write
                       to a file, also output to screen. On large
                       image files this will dramatically increase
                       processing time (default is false).

选项说明

  • -i,–inputFile : 必选,指定输入文件
  • -o,–outputFile : 必选,指定输出文件
  • -p,–processor :可选,指定processor,默认是XML
  • -r,–recover: 可选,读取binary格式文件时,可以是recovery模式,这将忽略edit log中corrupt的部分
  • -v,–verbose: 可选,verbose模式。在写入文件的时候,同时会写到屏幕中

XML processor

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

  示例如下:

$ hdfs oev -i current/edits_0000000000007961554-0000000000007961630 -o edit.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<EDITS>
  <EDITS_VERSION>-64</EDITS_VERSION>
  <RECORD>
    <OPCODE>OP_START_LOG_SEGMENT</OPCODE>
    <DATA>
      <TXID>7961554</TXID>
    </DATA>
  </RECORD>
  <RECORD>
    <OPCODE>OP_ADD</OPCODE>
    <DATA>
      <TXID>7961555</TXID>
      <LENGTH>0</LENGTH>
      <INODEID>2216852</INODEID>
      <PATH>/var/log/hadoop-spark/.8e3ea7ad-51fe-42a4-82ef-3fe43d8cc175</PATH>
      <REPLICATION>3</REPLICATION>
      <MTIME>1563958515153</MTIME>
      <ATIME>1563958515153</ATIME>
      <BLOCKSIZE>268435456</BLOCKSIZE>
      <CLIENT_NAME>DFSClient_NONMAPREDUCE_38132218_1</CLIENT_NAME>
      <CLIENT_MACHINE>192.168.10.4</CLIENT_MACHINE>
      <OVERWRITE>true</OVERWRITE>
      <PERMISSION_STATUS>
        <USERNAME>hadoop</USERNAME>
        <GROUPNAME>hadoop</GROUPNAME>
        <MODE>420</MODE>
      </PERMISSION_STATUS>
      <ERASURE_CODING_POLICY_ID>0</ERASURE_CODING_POLICY_ID>
      <RPC_CLIENTID>48789ad8-39fe-427f-afdc-10e4d9d4a8a5</RPC_CLIENTID>
      <RPC_CALLID>9001462</RPC_CALLID>
    </DATA>
  </RECORD>
...
...

binary processor

  将XML格式的文件反解析为binary格式,用以重构edit log。

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

  使用示例:

$ hdfs oev -i edit.xml -o editlog -p binary -v
input  [edit.xml]
output [editlog]

State processor

  State processor用于聚合editlog文件中包含的操作代码计数。

 bin/hdfs oev -p stats -i edits -o edits.stats

  使用示例:

$ hdfs oev -i edit.xml -o edit.stats -p stats -v
input  [edit.xml]
output [edit.stats]
    VERSION                             : -64
    OP_ADD                         (  0): 25
    OP_RENAME_OLD                  (  1): 0
    OP_DELETE                      (  2): 25
    OP_MKDIR                       (  3): 0
    OP_SET_REPLICATION             (  4): 0
    OP_DATANODE_ADD                (  5): 0
    OP_DATANODE_REMOVE             (  6): 0
    OP_SET_PERMISSIONS             (  7): 0
    OP_SET_OWNER                   (  8): 0
    OP_CLOSE                       (  9): 25
    OP_SET_GENSTAMP_V1             ( 10): 0
    OP_SET_NS_QUOTA                ( 11): 0
    OP_CLEAR_NS_QUOTA              ( 12): 0
    OP_TIMES                       ( 13): 0
    OP_SET_QUOTA                   ( 14): 0
    OP_RENAME                      ( 15): 0
    OP_CONCAT_DELETE               ( 16): 0
    OP_SYMLINK                     ( 17): 0
    OP_GET_DELEGATION_TOKEN        ( 18): 0
    OP_RENEW_DELEGATION_TOKEN      ( 19): 0
    OP_CANCEL_DELEGATION_TOKEN     ( 20): 0
    OP_UPDATE_MASTER_KEY           ( 21): 0
    OP_REASSIGN_LEASE              ( 22): 0
    OP_END_LOG_SEGMENT             ( 23): 1
    OP_START_LOG_SEGMENT           ( 24): 1
    OP_UPDATE_BLOCKS               ( 25): 0
    OP_CREATE_SNAPSHOT             ( 26): 0
    OP_DELETE_SNAPSHOT             ( 27): 0
    OP_RENAME_SNAPSHOT             ( 28): 0
    OP_ALLOW_SNAPSHOT              ( 29): 0
    OP_DISALLOW_SNAPSHOT           ( 30): 0
    OP_SET_GENSTAMP_V2             ( 31): 0
    OP_ALLOCATE_BLOCK_ID           ( 32): 0
    OP_ADD_BLOCK                   ( 33): 0
    OP_ADD_CACHE_DIRECTIVE         ( 34): 0
    OP_REMOVE_CACHE_DIRECTIVE      ( 35): 0
    OP_ADD_CACHE_POOL              ( 36): 0
    OP_MODIFY_CACHE_POOL           ( 37): 0
    OP_REMOVE_CACHE_POOL           ( 38): 0
    OP_MODIFY_CACHE_DIRECTIVE      ( 39): 0
    OP_SET_ACL                     ( 40): 0
    OP_ROLLING_UPGRADE_START       ( 41): 0
    OP_ROLLING_UPGRADE_FINALIZE    ( 42): 0
    OP_SET_XATTR                   ( 43): 0
    OP_REMOVE_XATTR                ( 44): 0
    OP_SET_STORAGE_POLICY          ( 45): 0
    OP_TRUNCATE                    ( 46): 0
    OP_APPEND                      ( 47): 0
    OP_SET_QUOTA_BY_STORAGETYPE    ( 48): 0
    OP_ADD_ERASURE_CODING_POLICY   ( 49): 0
    OP_ENABLE_ERASURE_CODING_POLIC ( 50): 0
    OP_DISABLE_ERASURE_CODING_POLI ( 51): 0
    OP_REMOVE_ERASURE_CODING_POLIC ( 52): 0
    OP_INVALID                     ( -1): 0

  上述的每个OpCode都会对应NameNode的特定操作。

案例学习:hadoop集群恢复

  如果Hadoop集群出现问题,并且编辑文件已损坏,则可以保存至少部分正确的编辑文件。这可以通过将二进制编辑转换为XML来完成,手动编辑它,然后将其转换回二进制。最常见的问题是编辑文件缺少关闭记录(操作码-1的记录)。工具应该能够识别这一点,并且XML格式应该正确关闭。
  如果XML文件中没有结束记录,可以在最后一条正确记录之后添加一条。操作码为-1的记录之后的任何内容都将被忽略。

结束记录示例(操作码-1)

<RECORD>
  <OPCODE>-1</OPCODE>
  <DATA>
  </DATA>
</RECORD>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值