本文固定链接:https://www.askmac.cn/archives/hadoop-offline-image-viewer-guide.html
本文是官方文档的翻译,原文地址是:
http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsImageViewer.html
1.概述
Offline Image Viewer是一个专场将hdfs fsimage文件中的文件到可读的格式的工具,提供了一个只读的WebHDFS API 来允许离线分析和检查Hadoop 集群的namespace。这个工具可以相对较快的处理非常大的image文件。这个工具处理布局格式包含了hadoop 2.4版本及以上。如果你想处理旧的布局格式,你可以使用hadoop 2.3版本的 Offline Image Viewer或者 oiv_legacy命令。如果这个工具不能够处理一个镜像文件,其将干净地退出。Offline Image Viewer不需要hadoop集群是正在运行的;其操作完全处于offline状态。
Offline Image Viewer 提供了一系列输出进程:
1.Web 是默认的输出进程。它发动一个HTTP服务,暴露只读的WebHDFS API。用户可以通过HTTP REST API来探讨namespace的交互。
2.XML 创建了一个fsimage的XML文件,其中包含了fsimage的所有信息,类似于lsr进程。这个进程的输出是自动化的过程,并且被XML工具分析。由于XML 冗长的语法,这个进程将输出大量的输出(www.askmac.cn)。
3.FileDsitribution 用来分析namespace image中的文件大小。为了运行这个工具,必须定义一个整数范围[0,maxSize],并且同时指定一个maxSize。这个整数范围划分为每一步的段:[0,s[1],…,s[n-1],maxsize],而且进程计算每个段(s[i-1],s[i])中的文件数。注意文件超过maxsize的总是会放入最后一个段中。输出文件是以tab分隔的2个字段:SIZE和NumFiles的表。size代表开始的段,numFiles表示从image装入这个段的文件数目。
4.Delimited(实现性质的):生成一个text 文件,包含所有节点和节点以内建设的常见元素,以分隔符封。默认的分隔符是\t,通过-delimiter参数可以改变。
2.用法
2.1Web 进程
Web 进程发动一个HTTP服务,暴露只读的WebHDFS API。用户可以通过-ddr选项来指定监听的地址(默认是localhost:5978)
bash$ bin/hdfs oiv -i fsimage |
用户可以用过下列shell命令来查看和获取fsimage的信息:
bin/hdfs dfs -ls webhdfs://127.0.0.1:5978/ |
注意:前面oiv -i xxxxx选择的fsimage启动的进程不能关闭(www.askmac.cn)
获得所有文件和目录,你可以简单的使用-R选项,命令如下:
bin/hdfs dfs -ls -R webhdfs://127.0.0.1:5978/ |
用户也可以用过HTTP REST API来获得JSON格式的文件状态:
curl -i http://127.0.0.1:5978/webhdfs/v1/?op=liststatus |
Web进程目前支持下列操作(也就是op=后面的3可选参数):
- LISTSTATUS
- GETFILESTATUS
- SETACLSTATUS
2.2 XML 进程
XML进程被用来转储fsimage中所有的文本。用户可以通过-i和-o命令参数来指定输入和输出文件(www.askmac.cn)。
bin/hdfs oiv -p XML -i fsimage -o fsimage.xml |
这将创建一个名称是fsimage.xml的文件包含fsimage中所有的信息。对于非常大的image 文件,这个过程可能会话几分钟。
3.选项
标示 | 描述 |
-i|–inputFile | 指定进程的输入fsimage 文件。必须 |
-o|outputFile | 指定进程输出生成的文件名。如果这个文件存在会直接覆盖。(默认是直接输出到标准输出) |
-p|–processor | 指定image file应用的image进程。当前有效的选项是Web(默认),XML和FileDistribution |
-addr address | 指定一个地址(主机:端口)。(默认是loalhost:5978)。这个选项被Web进程使用 |
-maxSize size | 指定分析的文件大小范围,以字节为单位(默认是128G)。这个参数被FileDistribution进程使用 |
-step size | 指定分布式的粒度,单位是字节(迷人是2MB)。这个参数被FileDistribution进程使用 |
-delimiter arg | Delimited 进程使用的分割字符串 |
-t|–temp | 使用临时目录来缓存中间结果来生产Delimited 输出。如果没设置,Delimited进程在输出文件之前,会在内存中构造namespace |
-h|–help | 显示工具的使用方法和帮助信息并且推出 |
4.分析结果
Offline Image Viewer 可以对hdfs namespace中生成大量数据结果。这个信息可以用来探索文件系统使用模式或者找到匹配表中的特定文件,以及其他类型的namespace分析(www.askmac.cn)。
5.oiv_legacy 命令
由于ProtocolBuffer-based fsimage内布局的结构变化,Offline IamgeViewer 过度的使用内存并且会丢失一些功能,例如Delimited,Indeted进程。如果你想不使用太多的内存,或者使用这些进程,你可以使用oiv_legacy命令(和hadoop2.3中的oiv类似)
5.1 用法
1.设置dfs.namenode.legacy-oiv-image.dir一个合适的目录,来让备份NameNode或者SecondaryNameNode 在检查点期间保存其namespace到旧的fsimage格式。
2.在就的fsimage 格式上使用oiv_legacy命令(www.askmac.cn)
bin/hdfs oiv_legacy -i fsimage_old -o output |
5.2选项
标示 | 描述 |
-i|–inputFile | 指定进程的输入fsimage 文件。必须 |
-o|outputFile | 指定进程输出生成的文件名。如果这个文件存在会直接覆盖。必须 |
-p|–processor | 指定image file应用的image进程。有效的选项是Ls(默认),XML,Delimited,Indeted和FileDistribution |
-skipBlocks | 不枚举文件中的个别的块。这个在namespaces有大量文件时,可以节省处理时间和输出文件的空间。Ls进程读取块来正确地判断文件大小并忽略此参数。 |
-printToScreen | 进程输出到指定文件的同时也输出到控制台。对于特别大的namespaces,这个可能会增加大量的时间,一个数量级以上 |
-delimiter | 当结合使用delimited进程时,替换默认的tab间隔符,用指定的字符串代替。 |
-h|–help | 显示工具的使用方法和帮助信息并且推出 |
Leave a Reply