Apache Hadoop 2.9.0
请查看原文:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsImageViewer.html
(如果转发,请标明出处)
概述
Offline Image Viewer 是一个能转换hdfs fsimage 文件的内容到一个人类可读格式,并且提供只读的WebHDFS API来允许线下分析及检测Hadoop集群的命名空间。这个工具能够相对快速的处理非常大的image 文件。Offline Image Viewer 能够处理包括Hadoop versions 2.4以及更高版本。如果想处理低版本的格式,需要使用Hadoop 2.3 的Offline Image Viewer或者使用 oiv_legacy 命令。如果这个工具不能处理一个image文件,它将会干净的退出。Offline Image Viewer不需要运行Hadoop集群,它的操作完全脱机。
Offline Image Viewer提供了下面的输出处理器:
① Web是默认的输出处理器。这个处理器启动一个HTTP 服务器来公开只读的WebHDFS API。用户可以通过使用HTTP REST API来交互式的访问命名空间。
② XML 创建一个包含所有fsimage信息的XML文档。该处理器的输出可以通过XML工具进行自动处理和分析。由于XML语法冗长,此处理器还将生成最大数量的输出。
③ FileDistribution 是一个分析命名空间image文件大小的工具。运行工具之前,需要定义一串整型数字 [0, maxSize] ,指定maxSize和步长。这一串的整型数字被划分为一些小段: [0, s[1], …, s[n-1], maxSize],处理器会为每个小段[s[i-1], s[i])计算系统中有多少文件对应到这个段。超过maxSize 的文件将会落到最后一段。默认情况下,输出文件时一个以tab分隔的2列表:Size 和NumFiles,Size表示这一段的开始,numFiles 是文件大小刚好落入当前段的文件数目。通过指定 -format选项,输出文件将会以人类可读的格式,而不是在Size列中的字节格式。另外Size 将会转变成Size Range列。
④ Delimited (实验) :生成一个文本文件,其中包含inodes和inodes-under-construction所共有的所有元素,并用分隔符分隔。默认分隔符为\ t,但可以通过- delimiter参数更改。
⑤ ReverseXML (实验):这个跟XML处理器刚好相反,它可以将一个XML文件重新转换成fsimage。这个可以很方便的创建用来测试的fsimages ,或者当出现故障的时候手动编辑fsimages 。
使用
Web Processor
Web Processor启动一个HTTP 服务器来提供只读的WebHDFS API。用户可以通过-addr 选项来指定默认的监听端口(默认是localhost:5978)
bash$ bin/hdfs oiv -i fsimage
14/04/07 13:25:14 INFO offlineImageViewer.WebImageViewer: WebImageViewer
started. Listening on 127.0.0.1:5978. Press Ctrl+C to stop the viewer.
用户可以访问viewer,通过下面的shell命令来得到fsimage的信息:
bash$ bin/hdfs dfs -ls webhdfs://127.0.0.1:5978/
Found 2 items
drwxrwx--* - root supergroup 0 2014-03-26 20:16 webhdfs://127.0.0.1:5978/tmp
drwxr-xr-x - root supergroup 0 2014-03-31 14:08 webhdfs://127.0.0.1:5978/user
如果想得到所有文件和目录的信息,可以使用下面的命令:
bash$ bin/hdfs dfs -ls -R webhdfs://127.0.0.1:5978/
用户可以通过 HTTP REST API来得到JSON 格式的FileStatuses :
bash$ curl -i http://127.0.0.1:5978/webhdfs/v1/?op=liststatus
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 252
{"FileStatuses":{"FileStatus":[
{"fileId":16386,"accessTime":0,"replication":0,"owner":"theuser","length":0,"permission":"755","blockSize":0,"modificationTime":1392772497282,"type":"DIRECTORY","group":"supergroup","childrenNum":1,"pathSuffix":"user"}
]}}
Web 处理器可以支持下面的操作:
· LISTSTATUS
· GETFILESTATUS
· GETACLSTATUS
· GETXATTRS
· LISTXATTRS
· CONTENTSUMMARY
XML Processor
XML 处理器可以用来dump fsimage上的所有内容,用户可以使用-i 和 -o来指定输入输出文件。
bash$ bin/hdfs oiv -p XML -i fsimage -o fsimage.xml
这将创建一个包含fsimage所有信息的文件fsimage.xml 。对特别大的image文件,处理需要很多分钟。
使用Offline Image Viewer XML处理器来分析将会得到以下信息:
<?xml version="1.0"?>
<fsimage>
<NameSection>
<genstampV1>1000</genstampV1>
<genstampV2>1002</genstampV2>
<genstampV1Limit>0</genstampV1Limit>
<lastAllocatedBlockId>1073741826</lastAllocatedBlockId>
<txid>37</txid>
</NameSection>
<INodeSection>
<lastInodeId>16400</lastInodeId>
<inode>
<id>16385</id>
<type>DIRECTORY</type>
<name></name>
<mtime>1392772497282</mtime>
<permission>theuser:supergroup:rwxr-xr-x</permission>
<nsquota>9223372036854775807</nsquota>
<dsquota>-1</dsquota>
</inode>
...remaining output omitted...
Options
Flag | 描述 |
-i|--inputFileinput file | 指定输入的fsimage文件(如果 ReverseXML processor被使用,那么就是XML文件)。必须选项 |
-o|--outputFileoutput file | 如果需要输出处理器生成一个文件,必须指定输出文件名。如果指定的文件已经存在,就会默认覆盖。如果输入文件时一个XML文件,就会默认输出到stdout,同时也会生成<outputFile>.md5。 |
-p|--processorprocessor | 根据不同的image文件指定image处理器。目前有效的选项是Web (default), XML, Delimited, FileDistribution 和 ReverseXML |
-addr address | 指定监听的地址(host:port),默认是localhost:5978。这个选项是Web processer使用的。 |
-maxSize size | 指定一个需要根据字节分析的文件大小序列 [0, maxSize] ,默认是128GB。这个是FileDistribution processor使用的选项。 |
-step size | 指定以字节为单位的分布粒度,默认是2MB,这个是FileDistribution processor使用的选项。 |
-format | 格式化输出结果为用户可读的格式而不是一堆字节,默认是false。这个是FileDistribution processor使用的选项。 |
-delimiter arg | Delimited processor使用的delimiter 字符串 |
-t|--temptemporary dir | 使用临时目录来缓存中间结果以生存delimiter 输出,如果没有设置,Delimited processor在输出文本之前在内存中构造命名空间。 |
-h|--help | 显示工具的使用和帮助信息并退出 |
分析结果
Offline Image Viewer 使得收集HDFS命名空间的庞大数据变得容易。这些信息可以用来浏览文件系统的使用模式以及查找符合条件的特定文件,以及其他类型的命名空间分析。
oiv_legacy 命令
由于基于ProtocolBuffer的fsimage (HDFS-5698),引入了内部布局更改,OfflineImageViewer 会消耗更多的内存,并丢失一些功能,例如Indented 处理器。如果要在没有大量内存的情况下进行处理或者使用这些处理器,可以使用oiv_legacy命令(同Hadoop 2.3中的oiv 一样)。
使用
1. 设置dfs.namenode.legacy-oiv-image.dir为适当的目录,以使standby NameNode o或者SecondaryNameNode在其检查点期间将命名空间保存为旧的fsimage格式。
2. 使用oiv_legacy 命令来解析旧版本的fsimage
bash$ bin/hdfs oiv_legacy -i fsimage_old -o output
Options
Flag | 描述 |
-i|--inputFileinput file | 指定需要输入的fsimage文件。必须项 |
-o|--outputFileoutput file | 如果需要输出处理器生成一个文件,则指定输入的文件名。如果指定的文件已经存在,就会默认覆盖。必须项 |
-p|--processorprocessor | 根据image文件指定image处理器。有效的选项有Ls (default), XML, Delimited, Indented, FileDistribution 和 NameDistribution |
-maxSize size | 指定一个需要根据字节分析的文件大小序列 [0, maxSize] ,默认是128GB。这个是FileDistribution processor使用的选项。 |
-step size | 指定以字节为单位的分布粒度,默认是2MB,这个是FileDistribution processor使用的选项。 |
-format | 格式化输出结果为用户可读的格式而不是一堆字节,默认是false。这个是FileDistribution processor使用的选项。 |
-skipBlocks | 不要枚举文件中的单个块。这可以节省处理时间和在具有非常大文件的命名空间上输出文件空间。Ls处理器读取块以正确确定文件大小,并忽略此选项。 |
-printToScreen | 将处理器输出管道连接到控制台以及指定文件。在非常大的命名空间上,这可能会将处理时间增加一个数量级。 |
-delimiter arg | 当与Delimited 处理器结合使用时,将使用arg指定的字符串替换默认tab分隔符 |
-h|--help | 显示工具的使用和帮助信息并退出 |
------------ 全文完 -----------------------------




