二,hdfs体系架构

  (TOC)

  

一、HDFS体系组成概述

  

这是一个分布式文件系统,适用于于一次写入多次读取的场景。包含以下角色:

  
 <代码> NameNode (nn):
  存储文件的元数据,如文件名,文件目录结构,文件属性等,以及每个文件的块列表和块所在的DataNode等。以及响应客户端对hdfs的读写操作,如创建目录,上传文件等。还有保存读写日志。
  
  DataNode (dn):
  在本地文件系统中存储文件块数据,以及块数据的校验和
  
  SecondaryNameNode (snn):
  用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照,相当于对NameNode进行备份。 
  

二,HDFS-NameNode

  

主要职责是管理hdfs的所有节点。
1,响应客户端对hdfs的请求,如增删改查。
2,管理和维护hdfs的元数据信息以及日志(非日志日志)

  

NameNode会在core-site.xml中指定的hadoop.tmp。dir的目录中创建目录:dfs/名称/O旅嫖颐强纯凑飧瞿柯嫉慕峁埂?/p>   

 <代码类="语言python "> (root@bigdata121 tmp) #树dfs/的名字
  dfs/名称
  ├──当前
  │├──edits_0000000000000000001 - 0000000000000000002
  │├──edits_0000000000000000003 - 0000000000000000004
  │├──edits_0000000000000000005 - 0000000000000000006
  │├──edits_0000000000000000007 - 0000000000000000008
  │├──edits_0000000000000000009 - 0000000000000000009
  │├──edits_0000000000000000010 - 0000000000000000011
  │├──edits_0000000000000000012 - 0000000000000000013
  │├──edits_0000000000000000014 - 0000000000000000015
  │├──edits_0000000000000000016 - 0000000000000000017
  │├──edits_0000000000000000018 - 0000000000000000019
  │├──edits_0000000000000000020 - 0000000000000000021
  │├──edits_0000000000000000022 - 0000000000000000024
  │├──edits_0000000000000000025 - 0000000000000000026
  │├──edits_inprogress_0000000000000000027
  │├──fsimage_0000000000000000024
  │├──fsimage_0000000000000000024.md5
  │├──fsimage_0000000000000000026
  │├──fsimage_0000000000000000026.md5
  │├──seen_txid
  │└──版本
  └──in_use.lock  
  

各个文件目录的作用如下:

  当前

1,   

主要存放hdfs的存储的数据的元信息和日志。

  

(1)编辑文件

  

是一个二进制文件,主要记录对hdfs的增删改操作的信息,类似于MySQL的二进制日志。其中edits_inprogress_xxxxx表示是最新编辑的日志,是目前正在使用的。
可以使用命令查看编辑文件的内容:

  
 <代码类="语言python ">//格式:hdfs项目我输入文件- o输出文件(xml格式)
  (root@bigdata121电流)# hdfs项目我edits_inprogress_0000000000000000038 - o/tmp/edits_inprogess.xml
  
  (当前root@bigdata121) #猫/tmp/edits_inprogess.xml
  & lt; ?xml version=" 1.0 " encoding=" utf - 8 " ?比;
  & lt; EDITS>
  & lt; EDITS_VERSION> -63 & lt;/EDITS_VERSION>
  & lt; RECORD>
  & lt; OPCODE> OP_START_LOG_SEGMENT表示操作的类别,这里是表示日志开始记录
  & lt; DATA>
  & lt; TXID> 38 & lt;/TXID>类似于操作的ID,是唯一的
  & lt;/DATA>
  & lt;/RECORD>
  & lt;/EDITS>
  
  & lt; RECORD>
  & lt; OPCODE> OP_ADD_BLOCK//像这个就表示上传文件的操作
  & lt; DATA>
  & lt; TXID> 34 & lt;/TXID>
  & lt; PATH>/jdk-8u144-linux-x64.tar.gz._COPYING_
  & lt; BLOCK>
  & lt; BLOCK_ID> 1073741825 & lt;/BLOCK_ID>
  & lt; NUM_BYTES> 134217728 & lt;/NUM_BYTES>
  & lt; GENSTAMP> 1001 & lt;/GENSTAMP>
  & lt;/BLOCK>
  & lt; BLOCK>
  & lt; BLOCK_ID> 1073741826 & lt;/BLOCK_ID>
  & lt; NUM_BYTES> 0 & lt;/NUM_BYTES>
  & lt; GENSTAMP> 1002 & lt;/GENSTAMP>
  & lt;/BLOCK>
  & lt; RPC_CLIENTID> & lt;/RPC_CLIENTID>
  & lt; RPC_CALLID> 2 & lt;/RPC_CALLID>
  & lt;/DATA>
  & lt;/RECORD>  
  

(2) fsimage文件

  

hdfs中的数据的元数据文件。记录hdfs文件系统中各个数据块的信息,但并不是最新的。需要定时将编辑文件合并到这里,才是最新的。可以使用命令查看fsimage文件的内容:

  
 <代码>//格式:hdfs oiv - p输出格式我输入文件- o输出文件
  (当前root@bigdata121) # hdfs oiv XML -我fsimage_0000000000000000037 - o - p/tmp/fsimage37.xml
  
  (当前root@bigdata121) #猫/tmp/fsimage37.xml
  & lt; ?xml version=" 1.0 " ?比;
  & lt; fsimage> & lt; version> & lt; layoutVersion> -63 & lt;/layoutVersion> & lt; onDiskVersion> 1 & lt;/onDiskVersion> & lt; oivRevision> 17 e75c2a11685af3e043aa5e604dc831e5b14674

二,hdfs体系架构