在hadoop中edits和fsimage是两个至关关键的文件。当中edits负责保存自最新检查点后命名空间的变化。起着日志的作用,而fsimage则保存了最新的检查点信息。这个两个文件里的内容使用普通文本编辑器是无法直接查看的,幸运的是hadoop为此准备了专门的工具用于查看文件的内容。这些工具分别为oev和oiv。能够使用hdfs调用运行。

oev是offline edits viewer(离线edits查看器)的缩写,该工具仅仅操作文件因而并不须要hadoop集群处于执行状态。该工具提供了几个输出处理器。用于将输入文件转换为相关格式的输出文件,能够使用參数-p指定。眼下支持的输出格式有binary(hadoop使用的二进制格式)、xml(在不使用參数p时的默认输出格式)和stats(输出edits文件的统计信息)。该工具支持的输入格式为binary和xml,当中的xml文件为该工具使用xml处理器的输出文件。因为没有与stats格式相应的输入文件,所以一旦输出为stats格式将不能够再转换为原有格式。比方输入格式为bianry。输出格式为xml。能够通过将输入文件指定为原来的输出文件,将输出文件指定为原来的输入文件实现binary和xml的转换,而stats则不能够。

该工具的详细使用语法为:

Usage: bin/hdfs oev [OPTIONS] -i INPUT_FILE -o OUTPUT_FILE
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
-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).

该工具使用的演示样例及输出文件的部分文件内容例如以下:

$ hdfs oev -i edits_0000000000000000081-0000000000000000089 -o edits.xml
<? xml version="1.0" encoding="UTF-8"? >
<EDITS>
<EDITS_VERSION>-56</EDITS_VERSION>
<RECORD>
<OPCODE>OP_DELETE</OPCODE>
<DATA>
<TXID>88</TXID>
<LENGTH>0</LENGTH>
<PATH>/user/hive/test</PATH>
<TIMESTAMP>1413794973949</TIMESTAMP>
<RPC_CLIENTID>a52277d8-a855-41ee-9ca2-a5d0bc7d298a</RPC_CLIENTID>
<RPC_CALLID>3</RPC_CALLID>
</DATA>
</RECORD>
</EDITS>

在输出文件里。每一个RECORD记录了一次操作。在该演示样例中运行的是删除操作。当edits文件破损进而导致hadoop集群出现故障时。保存edits文件里正确的部分是可能的,能够通过将原有的bianry文件转换为xml文件,并手动编辑xml文件然后转回bianry文件来实现。

最常见的edits文件破损情况是丢失关闭记录的部分(OPCODE为-1),关闭记录例如以下所看到的。

假设在xml文件里没有关闭记录。能够在最后正确的记录后面加入关闭记录。关闭记录后面的记录都将被忽略。

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

oiv是offline image viewer的缩写。用于将fsimage文件的内容转储到指定文件里以便于阅读,该工具还提供了仅仅读的WebHDFS API以同意离线分析和检查hadoop集群的命名空间。

oiv在处理很大的fsimage文件时是相当快的,假设该工具不可以处理fsimage。它会直接退出。该工具不具备向后兼容性,比方使用hadoop-2.4版本号的oiv不能处理hadoop-2.3版本号的fsimage,仅仅能使用hadoop-2.3版本号的oiv。同oev一样。就像它的名称所提示的(offline),oiv也不须要hadoop集群处于执行状态。oiv详细语法可以通过在命令行输入hdfs
oiv查看。

oiv支持三种输出处理器,分别为Ls、XML和FileDistribution。通过选项-p指定。Ls是默认的处理器,该处理器的输出与lsr命令的输出极其相似,以同样的顺序输出同样的字段。比方文件夹或文件的标志、权限、副本数量、全部者、组、文件大小、改动日期和全路径等。与lsr不同的是,该处理器的输出包括根路径/。还有一个重要的不同是该处理器的输出不是依照文件夹名称和内容排序的,而是依照在fsimage中的顺序显示。除非命名空间包括较少的信息。否则不太可能直接比較该处理器和lsr命令的输出。Ls使用INode块中的信息计算文件大小并忽略-skipBlocks选项。示比例如以下:

[hadoop@hadoop current]$ hdfs oiv -i fsimage_0000000000000000115 -o fsimage.ls
[hadoop@hadoop current]$ cat fsimage.ls
drwxr-xr-x - hadoop supergroup 1412832662162 0 /
drwxr-xr-x - hadoop supergroup 1413795010372 0 /user
drwxr-xr-x - hadoop supergroup 1414032848858 0 /user/hadoop
drwxr-xr-x - hadoop supergroup 1411626881217 0 /user/hadoop/input
drwxr-xr-x - hadoop supergroup 1413770138964 0 /user/hadoop/output

XML处理器输出fsimage的xml文档,包括了fsimage中的全部信息。比方inodeid等。该处理器的输出支持XML工具的自己主动化处理和分析,因为XML语法格式的冗长,该处理器的输出也最大。示比例如以下:

[hadoop@hadoop current]$ hdfs oiv -i fsimage_0000000000000000115 -p XML -o fsimage.xml
[hadoop@hadoop current]$ cat fsimage.xml
<? xml version="1.0"?>
<fsimage>
<NameSection>
<genstampV1>1000</genstampV1>
<genstampV2>1004</genstampV2>
<genstampV1Limit>0</genstampV1Limit>
<lastAllocatedBlockId>1073741828</lastAllocatedBlockId>
<txid>115</txid>
</NameSection>
<INodeSection>
<lastInodeId>16418</lastInodeId>
<inode>
<id>16385</id>
<type>DIRECTORY</type>
<name></name>
<mtime>1412832662162</mtime>
<permission>hadoop:supergroup:rwxr-xr-x</permission>
<nsquota>9223372036854775807</nsquota>
<dsquota>-1</dsquota>
</inode>
<inode>
<id>16386</id>
<type>DIRECTORY</type>
<name>user</name>
<mtime>1413795010372</mtime>
<permission>hadoop:supergroup:rwxr-xr-x</permission>
<nsquota>-1</nsquota>
<dsquota>-1</dsquota>
</inode>
</INodeSection>
</fsimage>

FileDistribution是分析命名空间中文件大小的工具。为了执行该工具须要通过指定最大文件大小和段数定义一个整数范围[0,maxSize],该整数范围依据段数切割为若干段[0, s[1], ..., s[n-1], maxSize],处理器计算有多少文件落入每一个段中([s[i-1], s[i]),大于maxSize的文件总是落入最后的段中。即s[n-1], maxSize。输出文件被格式化为由tab分隔的包括Size列和NumFiles列的表,当中Size表示段的起始,NumFiles表示文件大小落入该段的文件数量。在使用FileDistribution处理器时还须要指定该处理器的參数maxSize和step。若未指定默觉得0。示比例如以下:

[hadoop@hadoop current]$ hdfs oiv -i fsimage_0000000000000000115 -o fsimage.fd -p FileDistribution maxSize 1000 step 5
[hadoop@hadoop current]$ cat fsimage.fd
Processed 0 inodes.
Size NumFiles
2097152 2
totalFiles = 2
totalDirectories = 11
totalBlocks = 2
totalSpace = 4112
maxFileSize = 1366

Hadoop-2.4.1学习之edits和fsimage查看器的更多相关文章

  1. node学习笔记(一)本地文件目录查看器

    Node.js 新闻 nw.js 前端开发桌面应用 内容 node.js实战 照例提供百度云链接,本来以为是实战系列的那本,但不是,不过这本也不错 链接:https://pan.baidu.com/s ...

  2. 五:Edits Viewer离线日志查看器

    离线日志查看器可以将二进制日志翻译成可读的文件(如XML),只有当hadoop集群停止时才能使用.输入文件支持的类型:XML和二进制.输出文件支持类型:XML 二进制 Stats(标准输出?)     ...

  3. 我的MYSQL学习心得(三) 查看字段长度

    我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  4. vue.js学习之 如何在手机上查看vue-cli构建的项目

    vue.js学习之 如何在手机上查看vue-cli构建的项目 一:找到config文件夹下的index.js文件,打开后,将host的值改为你本地的ip,保存后重启项目 二:输入ip和端口号打开项目 ...

  5. Mybatis源码学习之parsing包(解析器)(二)

    简述 大家都知道mybatis中,无论是配置文件mybatis-config.xml,还是SQL语句,都是写在XML文件中的,那么mybatis是如何解析这些XML文件呢?这就是本文将要学习的就是,m ...

  6. JVM学习笔记-第三章-垃圾收集器与内存分配策略

    JVM学习笔记-第三章-垃圾收集器与内存分配策略 tips:对于3.4之前的章节可见博客:https://blog.csdn.net/sanhewuyang/article/details/95380 ...

  7. Hadoop学习;測试;启动bug;secondary合并edits到fsimage

    一个Hadoop集群拥有多个并行的计算机.用以存储和处理大规模的数据集 Hadoop强调代码向数据迁移 要执行的程序在规模上比数据小的多,更easy移动,此外通过网络移动数据比载入执行程序更花时间,这 ...

  8. 开启Hadoop和Spark的学习之路

    Hadoop Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储. Hadoop实现了一个 ...

  9. Hadoop 2.2.0学习笔记20131210

    伪分布式单节点安装执行pi失败: [root@server- ~]# ./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples ...

随机推荐

  1. hdu1465(放错信 错排公式)

    Problem Description 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了! 做好“一件”事情尚且不易,若想永远成功而总从不失败,那更是难上加难了,就像花钱总是比挣钱容易 ...

  2. Delphi 类的类 class of 用法

    http://blog.csdn.net/blue_morning/article/details/8815609 Delphi 类的类 class of 用法   这个概念本来在一个关于Delphi ...

  3. javascript循环性能比较

    1.数组循环遍历方法 javascript传统的数组遍历有for循环,while循环,以及for-in.本篇文章要比较的是以下几种循环遍历方法: 遍历方式 备注 正向for循环   逆向for循环 减 ...

  4. 无法打开物理文件 XXX.mdf",操作系统错误 5:"5(拒绝访问。)"的解决办法

    http://blog.csdn.net/blackfield/article/details/6550499 用T-SQL命令附加数据库时,出现如下异常信息: 无法打开物理文件 XXX.mdf&qu ...

  5. Java知识回顾 (2) Java 修饰符

    一.Java 修饰符 1.1 访问控制修饰符 Java中,可以使用访问控制符来保护对类.变量.方法和构造方法的访问.Java 支持 4 种不同的访问权限. default (即缺省,什么也不写): 在 ...

  6. mybatis学习之路----批量更新数据两种方法效率对比

    原文:https://blog.csdn.net/xu1916659422/article/details/77971696/ 上节探讨了批量新增数据,这节探讨批量更新数据两种写法的效率问题. 实现方 ...

  7. iphone6/6+ 适配心得

    1.     文档综述 自iphone6/6+发布,ios屏幕分辨率的种类一下从2种变成了四种.对于以前很多手写UI,并且使用绝对坐标的UI,可能会发生异变,本文主要介绍在纯手写UI条件下,ios应用 ...

  8. oracle监听1067错误的处理

    一,oracle监听1067错误的处理修改oracle安装目录D:\DataBase\oracle\product\10.1.0\Db_1\NETWORK\ADMIN\下的 listener.ora和 ...

  9. unity,荧光效果(bloom)实现过程

    两个月前,刚接触unity的时候费了半天劲儿做了个荧光效果(见:http://www.cnblogs.com/wantnon/p/4430749.html),今天终于抽空整理了一下,把过程写下来. 荧 ...

  10. CCLabelAtlas的宽度为奇数时的显示bug

    遇到一个很郁闷的bug,CCLabelAtlas设置文字内容在ipad上和android上正常,就只有iphone怎么显示都不正常.后来把它宽度 + 1,然后就正常了.发现以前宽度设置为21px.23 ...