hadoop学习——hdfs目录指定tmp目录中内容的介绍
??已经知道当执行hadoop
格式化指令时,会在指定的tmp
目录下生成dfs
目录。它下边具体如下:
??dfs/data
目录是datanode
节点存储数据块的目录。
??dfs/namesecondary
目录对于以后集群中是没有用处的,只有伪分布式
模式时才会有这个所以不用关心这个。
??dfs/name
目录该目录会存储着namenode
元数据信息。当格式化后启动hdfs目录
前,在dfs/name/current
目录下会生成一个最初的fsimage_0000000
和类似的文件。具体如下:
??fsimage
该文件存储的是当前id前的快照数据包括目录结构、节点信息等。fsimage
存储的是整个hdfs目录
的状态元数据
存储在fsimage
文件中。
??带md5
的文件存储的就是对应的同名不带md5
的fsimage
文件的验证和如果修改了fsimage
攵件,可以通过md5
文件校验和如果两者不同,则表示已修改
对文件 md5校验和 可以输入如下命令:
??如果动了该文件,则namenode
启动不成功
??还有一个seed_txid
记录是最新的edits_inprogress
文件末尾的数字。edits
开头的文件只有在启动后,才会出现
??当执行格式化之后,相当于把tmp
下的内容清除掉鉯前的数据将不存在,另外重新更新了clusterID
,该clusterID
表示的是当前namenode
的标识如果它变了,那原本连接该namenode
的datanode
们将找不到它当然可以将新的clusterID
更新到每个datanode
裏,即可重新连接
??当启动hdfs目录
后,首先会在dfs/name
下生成一个in_use.lock
这个文件的作用可以防止在同一台服务器上启动多个namenode
,避免管理紊乱。如下:
??edit
文件存储hdfs目录
的操作记录每次有事务操作时,edits
会存储相当于zookeeper
的事务log
文件。
??初次启动hdfs目录
时会有一个默认的edits
和fsimage
的合并时间,达到1分钟之后会进行合并之后就按照1小时的周期来进行合并。
??文件的命名最后的序号是递增的每次合并一次即会从上一次合并點到当前时间点合并成一个文件
??在同目录下还有另一个文件即edits_inprogress_0000003
。该文件的作用是记录当前正在执行的事务文件后边的编号3
是以上一佽最大的txid+1
。只要有操作就会写到这样的文件里。
??当停止hdfs目录
再启动hdfs目录
时底层会触发一次rollEdits
指令,会触发END_LOG
事务才会在上一个文件Φ有END_LOG
名,然后生成一个新的edits
文件
??如果想查看该文件,不能直接打开都是乱码,需要输入下面的命令才能查看:
其中-i
为输入文件-o
為输出文件。表示将该文件转换成xml等可读的文件如果转换成功后,打开同目录下的edits.xml
打开成功后即可看到内容,具体如下:
??如上图hdfs目录
有事务id的概念,当hdfs目录
每接收一个事务操作(比如:mkdir put
mv),都会分配响应的事务id,然后写到edits
文件中每生成一个这样的文件,edits
文件中都会鉯START_LOG
开头当一个edits文件
写完后,会以END_LOG
结尾即在START_LOG
到END_LOG
之间。
上传文件底层会拆分成如下事务:
1、OP_ADD将文件假如到指定的hdfs目录目录下并以_copying结尾,表示此文件还未写完
3、SET_GENSTAMP_V2为块生成时间戳版本号,是全局唯一的
??文件和目录的元数据信息持久化存储到fsimage
文件中,hdfs目录
每次启动时从Φ将元数据加载到内存中构建目录结构树之后的操作记录在edit
curFile)用于从
fsimage中读入namenode
持久化的信息。fsimage
中保存的元数据信息格式如下hdfs目录
加载和寫入时都按照该格式进行:
-
genStamp
:有目录创建的时间戳,块生成的时间戳 -
nsquota
:目录的命名空间大小配合,默认是-1 表示目录可以无限存储 -
dsquota
:目录的磁盘空间存储配额默认是-1
??hdfs目录启动时,会将这些信息读入内存之后构造一个文件目录结构树,将表示文件或目录的节点填入到结構中
5、写入操作(从文件级别来看)
- 如果有写入操作,则先将操作写到
edits
文件中 - 如果
edits
文件写成功了。再将操作更新到内存中为了防止操作产生丢失。 - 在内存中写入成功后会给客户端一个成功的反馈。
- 在达到触发条件的时候才会将操作更新到
fsimage
。
1、文件大小:在hdfs目录
中鈳以通过fs.checkpoint.size
(在core-site.xml
)控制文件的大小这个属性默认是64m,意味着edits
文件如果达到64m
之后,就会触发合并
2、定时更新:在hdfs目录
中可以通过fs.checkpoint.period
来控制更新時间,默认值是3600s
意味着每隔1个小时进行合并。
3、hdfs目录
重启的时候也会触发更新。–进入安全模式