分享

关于fsimage 和edits 疑问

Wyy_Ck 发表于 2016-12-29 16:46:25 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 4 9169
1、fsimage
[mw_shl_code=bash,true][hadoop@master current]$ hdfs oiv -i fsimage_0000000000000000000 -o fs.ls
16/12/29 16:27:42 INFO offlineImageViewer.FSImageHandler: Loading 2 strings
16/12/29 16:27:42 INFO offlineImageViewer.FSImageHandler: Loading 1 inodes.
16/12/29 16:27:42 INFO offlineImageViewer.FSImageHandler: Loading inode references
16/12/29 16:27:42 INFO offlineImageViewer.FSImageHandler: Loaded 0 inode references
16/12/29 16:27:42 INFO offlineImageViewer.FSImageHandler: Loading inode directory section
16/12/29 16:27:42 INFO offlineImageViewer.FSImageHandler: Loaded 0 directories
16/12/29 16:27:42 INFO offlineImageViewer.WebImageViewer: WebImageViewer started. Listening on /127.0.0.1:5978. Press Ctrl+C to stop the viewer.[/mw_shl_code]
执行之后里面一直卡着。
[mw_shl_code=shell,true][hadoop@master current]$ ll fsimage_0000000000000000000
-rw-rw-r--. 1 hadoop hadoop 352 Dec 20 15:58 fsimage_0000000000000000000[/mw_shl_code]

2、edits
    是不是每一次操作,不管什么操作,都会单独生成一个edits文件。
   [mw_shl_code=shell,true][hadoop@master current]$ hdfs oev -i edits_0000000000000036094-0000000000000036095 -o 1
[hadoop@master current]$ cat 1
<?xml version="1.0" encoding="UTF-8"?>
<EDITS>
  <EDITS_VERSION>-63</EDITS_VERSION>
  <RECORD>
    <OPCODE>OP_START_LOG_SEGMENT</OPCODE>
    <DATA>
      <TXID>36094</TXID>
    </DATA>
  </RECORD>
  <RECORD>
    <OPCODE>OP_END_LOG_SEGMENT</OPCODE>
    <DATA>
      <TXID>36095</TXID>
    </DATA>
  </RECORD>
</EDITS>[/mw_shl_code]如上也看不出具体是什么操作。


谢谢谢谢!

已有(4)人评论

跳转到指定楼层
langke93 发表于 2016-12-29 18:17:09
本帖最后由 langke93 于 2016-12-29 18:18 编辑

第一个问题:
确定是卡着吗?
如果是卡着可能跟内存有关系

第二个问题
每个操作都是会被记录的,是不是生成一个edits不清楚,不过如果达到一定的量,edits应该会是合并的

回复

使用道具 举报

Wyy_Ck 发表于 2016-12-30 11:12:49
langke93 发表于 2016-12-29 18:17
第一个问题:
确定是卡着吗?
如果是卡着可能跟内存有关系

第一个问题: 有人说是我的fsimage文件是空的, 是吗 看不出来
第二个问题: 我看了下每分钟都会生成一个editslog文件,其实没有具体的操作。
回复

使用道具 举报

qcbb001 发表于 2016-12-30 14:21:16
Wyy_Ck 发表于 2016-12-30 11:12
第一个问题: 有人说是我的fsimage文件是空的, 是吗 看不出来
第二个问题: 我看了下每分钟都会生成一 ...


命令hdfs oiv用于将fsimage文件转换成其他格式的,楼主先看下面例子
##############

必须参数:

-i,–inputFile <arg>      输入FSImage文件.

-o,–outputFile <arg> 输出转换后的文件,如果存在,则会覆盖

可选参数:

-p,–processor <arg>   将FSImage文件转换成哪种格式: (Ls|XML|FileDistribution).默认为Ls.

-h,–help           显示帮助信息

例子1:

hdfs oiv -i /data1/hadoop/dfs/name/current/fsimage_0000000000019372521 -o /home/hadoop/fsimage.txt

执行后查看more /home/Hadoop/fsimage.txt

#############################
再看楼主的例子
hdfs oiv -i fsimage_0000000000000000000 -o fs.ls

这个输出 fs.ls,太特殊了。建议按照上面例子。
第一先转换
第二通过Linux命令查看。
如果没有,那就是没有数据了

#############################

关于edits,下面有些资料,希望可以帮助楼主理解


NameNode的$dfs.namenode.name.dir/current/文件夹的几个文件:

current/
|-- VERSION
|-- edits_*
|-- fsimage_0000000000008547077
|-- fsimage_0000000000008547077.md5
`-- seen_txid
其中存在大量的以edits开头的文件和少量的以fsimage开头的文件。那么这两种文件到底是什么,有什么用?下面对这两中类型的文件进行详解。在进入下面的主题之前先来搞清楚edits和fsimage文件的概念:
  (1)、fsimage文件其实是Hadoop文件系统元数据的一个永久性的检查点,其中包含Hadoop文件系统中的所有目录和文件idnode的序列化信息;
  (2)、edits文件存放的是Hadoop文件系统的所有更新操作的路径,文件系统客户端执行的所以写操作首先会被记录到edits文件中。

  fsimage和edits文件都是经过序列化的,在NameNode启动的时候,它会将fsimage文件中的内容加载到内存中,之后再执行edits文件中的各项操作,使得内存中的元数据和实际的同步,存在内存中的元数据支持客户端的读操作。

  NameNode起来之后,HDFS中的更新操作会重新写到edits文件中,因为fsimage文件一般都很大(GB级别的很常见),如果所有的更新操作都往fsimage文件中添加,这样会导致系统运行的十分缓慢,但是如果往edits文件里面写就不会这样,每次执行写操作之后,且在向客户端发送成功代码之前,edits文件都需要同步更新。如果一个文件比较大,使得写操作需要向多台机器进行操作,只有当所有的写操作都执行完成之后,写操作才会返回成功,这样的好处是任何的操作都不会因为机器的故障而导致元数据的不同步。

  fsimage包含Hadoop文件系统中的所有目录和文件idnode的序列化信息;对于文件来说,包含的信息有修改时间、访问时间、块大小和组成一个文件块信息等;而对于目录来说,包含的信息主要有修改时间、访问控制权限等信息。fsimage并不包含DataNode的信息,而是包含DataNode上块的映射信息,并存放到内存中,当一个新的DataNode加入到集群中,DataNode都会向NameNode提供块的信息,而NameNode会定期的“索取”块的信息,以使得NameNode拥有最新的块映射。因为fsimage包含Hadoop文件系统中的所有目录和文件idnode的序列化信息,所以如果fsimage丢失或者损坏了,那么即使DataNode上有块的数据,但是我们没有文件到块的映射关系,我们也无法用DataNode上的数据!所以定期及时的备份fsimage和edits文件非常重要!

  在前面我们也提到,文件系统客户端执行的所以写操作首先会被记录到edits文件中,那么久而久之,edits会非常的大,而NameNode在重启的时候需要执行edits文件中的各项操作,那么这样会导致NameNode启动的时候非常长!在下篇文章中我会谈到在Hadoop 1.x版本和Hadoop 2.x版本是怎么处理edits文件和fsimage文件的。



回复

使用道具 举报

Wyy_Ck 发表于 2017-1-9 09:42:58
qcbb001 发表于 2016-12-30 14:21
命令hdfs oiv用于将fsimage文件转换成其他格式的,楼主先看下面例子
##############

谢谢谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条