脱机图像查看器是一种工具,可将hdfs fsimage文件的内容转储为人类可读的格式,并提供只读WebHDFS API,以允许脱机分析和检查Hadoop群集的名称空间。该工具能够相对快速地处理非常大的图像文件。该工具处理Hadoop 2.4及更高版本随附的布局格式。如果要处理较旧的布局格式,则可以使用Hadoop 2.3的Offline Image Viewer或oiv_legacy Command。如果该工具无法处理图像文件,它将干净地退出。Offline Image Viewer不需要运行Hadoop集群;它的操作完全脱机。
脱机图像查看器提供了几个输出处理器:
Web是默认的输出处理器。它启动一个HTTP服务器,该服务器公开只读的WebHDFS API。用户可以使用HTTP REST API以交互方式调查名称空间。它不支持安全模式,也不支持HTTPS。
XML创建fsimage的XML文档,并在fsimage中包含所有信息。该处理器的输出适合使用XML工具进行自动处理和分析。由于XML语法的冗长性,该处理器还将生成最大量的输出。
FileDistribution是用于分析名称空间映像中文件大小的工具。为了运行该工具,应通过指定maxSize和一个步骤来定义整数范围[0,maxSize]。整数范围分为大小为段的段:[0,s [1],…,s [n-1],maxSize],处理器计算系统中每个段中有多少文件[s [i] -1],s [i])。请注意,大于maxSize的文件始终属于最后一段。默认情况下,输出文件的格式设置为制表符,分隔两列表:Size和NumFiles。其中,“大小”表示该段的开始,而“ numFiles”是该大小属于该段的图像文件数量。通过指定选项-format,将以易于理解的方式格式化输出文件,而不是“大小”列中显示的字节数。此外,
带分隔符(实验):生成一个文本文件,其中包含inode和inode-under-construction共同的所有元素,并由定界符分隔。缺省分隔符为\ t,尽管可以通过-delimiter参数更改。
ReverseXML(实验性):这与XML处理器相反。它从XML文件重建fsimage。使用此处理器,可以轻松创建fsimage进行测试,并在损坏时手动编辑fsimage。
Web处理器启动HTTP服务器,该服务器公开只读的WebHDFS API。用户可以通过-addr选项指定要监听的地址(默认为localhost:5978)。
bash $ bin / hdfs oiv -i fsimage 2007年4月14日13:25:14信息offlineImageViewer.WebImageViewer:WebImageViewer 开始。收听/127.0.0.1:5978。按Ctrl + C停止查看器。
用户可以通过以下shell命令访问查看器并获取fsimage的信息:
bash $ bin / hdfs dfs -ls webhdfs://127.0.0.1:5978 / 找到2项 drwxrwx-*-根超级组0 2014-03-26 20:16 webhdfs://127.0.0.1:5978 / tmp drwxr-xr-x-根超级组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 内容类型:application / json 内容长度:252 {“ FileStatuses”:{“ FileStatus”:[ {“ fileId”:16386,“ accessTime”:0,“ replication”:0,“ owner”:“ theuser”,“ length”:0,“ permission”:“ 755”,“ blockSize”:0,“ modificationTime” :1392772497282,“类型”:“目录”,“组”:“超组”,“ childrenNum”:1,“ pathSuffix”:“用户”} ]}}
Web处理器现在支持以下操作:
XML处理器用于转储fsimage中的所有内容。用户可以通过-i和-o命令行指定输入和输出文件。
bash $ bin / hdfs oiv -p XML -i fsimage -o fsimage.xml
这将创建一个名为fsimage.xml的文件,其中包含fsimage中的所有信息。对于非常大的图像文件,此过程可能需要几分钟。
将脱机图像查看器与XML处理器一起应用将产生以下输出:
<?xml version =“ 1.0”?> <fsimage> <名称部分> <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>目录</ type> <name> </ name> <mtime> 1392772497282 </ mtime> <permission>用户:supergroup:rwxr-xr-x </ permission> <nsquota> 9223372036854775807 </ nsquota> <dsquota> -1 </ dsquota> </ inode> ...剩余的输出被省略...
ReverseXML处理器与XML处理器相反。用户可以通过-i和-o命令行指定输入XML文件和输出fsimage文件。
bash $ bin / hdfs oiv -p ReverseXML -i fsimage.xml -o fsimage
这将从XML文件重建fsimage。
FileDistribution处理器可以分析名称空间映像中的文件大小。用户可以通过-maxSize和-step命令行以字节为单位指定maxSize(默认情况下为128GB)和step(默认情况下为2MB)。
bash $ bin / hdfs oiv -p FileDistribution -maxSize maxSize -step size -i fsimage -o输出
处理器将计算出系统中每个段中有多少个文件。输出文件的格式为制表符分隔的两列表,显示为以下输出:
大小NumFiles 4 1 12 1 16 1 20 1 totalFiles = 4 totalDirectories = 2 totalBlocks = 4 totalSpace = 48 maxFileSize = 21
为了使输出结果更具可读性,用户可以另外指定-format选项。
bash $ bin / hdfs oiv -p FileDistribution -maxSize maxSize -step size -format -i fsimage -o输出
这将导致以下输出:
大小范围NumFiles (0 B,4 B] 1 (8 B,12 B] 1 (12 B,16 B] 1 (16 B,21 B] 1 totalFiles = 4 totalDirectories = 2 totalBlocks = 4 totalSpace = 48 maxFileSize = 21
定界处理器生成fsimage的文本表示形式,每个元素都由定界符字符串分隔(默认情况下为\ t)。用户可以通过-delimiter选项指定新的分隔符字符串。
bash $ bin / hdfs oiv -p分隔-定界符delimiterString -i fsimage -o输出
此外,用户可以通过以下命令指定一个临时目录来缓存中间结果:
bash $ bin / hdfs oiv -p分隔的-定界符delimiterString -t临时目录-i fsimage -o输出
如果未设置,则定界处理器将在输出文本之前在内存中构造名称空间。该处理器的输出结果应类似于以下输出:
路径复制修改时间AccessTime PreferredBlockSize BlocksCount FileSize NSQUOTA DSQUOTA权限UserName GroupName / 0 2017-02-13 10:39 1970-01-01 08:00 0 0 0 9223372036854775807 -1 drwxr-xr-x根超组 / dir0 0 2017-02-13 10:39 1970-01-01 08:00 0 0 0 -1 -1 drwxr-xr-x根超组 / dir0 / file0 1 2017-02-13 10:39 2017-02-13 10:39 134217728 1 1 0 0 -rw-r--r--根超级组 / dir0 / file1 1 2017-02-13 10:39 2017-02-13 10:39 134217728 1 1 0 0 -rw-r--r--根超级组 / dir0 / file2 1 2017-02-13 10:39 2017-02-13 10:39 134217728 1 1 0 0 -rw-r--r--根超级组
旗 | 描述 |
---|---|
-i | --inputFile 输入文件 | 指定输入的fsimage文件(如果使用ReverseXML处理器,则为XML文件)进行处理。需要。 |
-o | --outputFile 输出文件 | 如果指定的输出处理器生成一个文件名,则指定输出文件名。如果指定的文件已经存在,它将被静默覆盖。(默认情况下输出到stdout)如果输入文件是XML文件,它还将创建一个<outputFile> .md5。 |
-p | - 处理器处理器 | 指定要应用于图像文件的图像处理器。当前有效的选项是Web(默认),XML,Delimited,FileDistribution和ReverseXML。 |
-addr 地址 | 指定要监听的地址(主机:端口)。(预设为localhost:5978)。该选项与Web处理器一起使用。 |
-maxSize 大小 | 指定要分析的文件大小的范围[0,maxSize](以字节为单位)(默认为128GB)。此选项与FileDistribution处理器一起使用。 |
步 长 | 指定分布的粒度(以字节为单位)(默认为2MB)。此选项与FileDistribution处理器一起使用。 |
-格式 | 以易于阅读的方式而不是多个字节来格式化输出结果。(默认情况下为false)。此选项与FileDistribution处理器一起使用。 |
-定界符 arg | 与定界处理器一起使用的定界字符串。 |
-t | --temp 临时目录 | 使用临时目录缓存中间结果以生成定界输出。如果未设置,则定界处理器在输出文本之前在内存中构造名称空间。 |
-h | - 帮帮我 | 显示工具用法和帮助信息,然后退出。 |
由于基于ProtocolBuffer的fsimage(HDFS-5698)引入了内部布局更改,因此OfflineImageViewer消耗了过多的内存,并失去了某些功能,例如缩进处理器。如果要在没有大量内存的情况下进行处理或使用这些处理器,则可以使用oiv_legacy命令(与Hadoop 2.3中的oiv相同)。
将dfs.namenode.legacy-oiv-image.dir设置为适当的目录,以使备用NameNode或SecondaryNameNode在检查点期间以旧的fsimage格式保存其名称空间。
使用oiv_legacy命令将旧格式设置为fsimage。
bash $ bin / hdfs oiv_legacy -i fsimage_old -o输出
旗 | 描述 |
---|---|
-i | --inputFile 输入文件 | 指定要处理的输入fsimage文件。需要。 |
-o | --outputFile 输出文件 | 如果指定的输出处理器生成一个文件名,则指定输出文件名。如果指定的文件已经存在,它将被静默覆盖。需要。 |
-p | - 处理器处理器 | 指定要应用于图像文件的图像处理器。有效选项包括Ls(默认值),XML,Delimited,Indented,FileDistribution和NameDistribution。 |
-maxSize 大小 | 指定要分析的文件大小的范围[0,maxSize](以字节为单位)(默认为128GB)。此选项与FileDistribution处理器一起使用。 |
步 长 | 指定分布的粒度(以字节为单位)(默认为2MB)。此选项与FileDistribution处理器一起使用。 |
-格式 | 以易于阅读的方式而不是多个字节来格式化输出结果。(默认情况下为false)。此选项与FileDistribution处理器一起使用。 |
-跳过块 | 不要枚举文件中的单个块。这样可以节省处理时间并在文件很大的名称空间上节省文件空间。Ls处理器读取这些块以正确确定文件大小,并忽略此选项。 |
-printToScreen | 将处理器的输出通过管道传输到控制台以及指定的文件。在极大的名称空间上,这可能会使处理时间增加一个数量级。 |
-定界符 arg | 与Delimited处理器结合使用时,将默认制表符分隔符替换为arg指定的字符串。 |
-h | - 帮帮我 | 显示工具用法和帮助信息,然后退出。 |