HDFS相关概念

Block是什么

1. Block是HDFS中数据存储的基本单位,即一个文件在HDFS中是由一个或者多个Block构成

2. Block的大小默认是128M,通过dfs.blocksize(hdfs-site.xml)来调节大小,单位是字节

3. 如果一个文件本身不到一个Block的大小,那么这个文件是多大则对应的Block就是多大。例如,一个文件是10M大小,则其对应的Block就是10M

4. HDFS会对Block进行编号 - Block ID

5. 切块的意义:
   a. 能够存储超大文件
   b. 能够进行快速的备份

NameNode是什么

1. NameNode是HDFS的主(核心)节点

2. NameNode的职责:
    a. 管理DataNode
    b. 记录元数据(metadata)

3. 元数据主要包含:
    a. 文件的存储路径
    b. 文件的权限
    c. 文件大小
    d. Block的大小
    e. Block ID
    f. 副本数量
    g. BlockID和DataNode的映射关系,注意,默认情况下,一个BlockID对应三个DataNode的地址

4. 元数据是存储在内存以及磁盘中
    a. 在内存中的目的是为了查询快
    b. 在磁盘中的目的是为了崩溃恢复

5. NameNode的元数据在磁盘上的存储位置由hadoop.tmp.dir属性来决定

6. 元数据的存储文件:
    a. edits:记录写操作的文件
    b. fsimage:映像文件。记录元数据。需要注意,这个文件中的元数据和内存中的元数据并不是同步的

7. 当NameNode收到请求之后,将请求记录到edits_inprogress文件中,如果记录成功,则修改内存中的元数据,内存修改完成之后会给客户端返回一个ack信号,此时fsimage文件中的元数据是没有修改的
    
8. fsimage的更新/edits文件的滚动:
    a. 空间:当edits文件达到指定大小(默认是64M,可以通过fs.checkpoint.size来调节)的时候,会产生滚动,将操作执行更新fsimage
    b. 时间:距离上一次更新达到指定的时间(默认是3600s,可以通过fs.checkpoint.period来调节)之后,也会产生edits文件的滚动
    c. 重启:当NameNode重启的时候,会触发edits文件的滚动,将操作执行更新到fsimage文件中
    d. 强制:hadoop dfsadmin -rollEdits

9. edits_inprogress文件在滚动之后会产生一个新的edits以及一个新的edits_inprogress

10. NameNode通过心跳机制来管理DataNode

11. 默认情况下,DataNode每隔3s会给NameNode发送心跳,实际过程中,这个间隔时间会设置在10-30s之间(通过dfs.heartbeat.interval来调节,单位是s)

12. HDFS的心跳机制是通过RPC来实现的

13. 默认情况下,NameNode超过10min没有收到DataNode的心跳,则认为这个DataNode已经lost(丢失),NameNode会将这个DataNode的数据重新备份到其他节点上保证副本数量

14. 心跳信息:
    a. 当前DataNode的状态(预服役、服役、预退役、退役)
    b. 当前DataNode存储的Block ID

15. 当HDFS重新启动的时候,NameNode中的edits文件滚动,fsimage文件更新,NameNode会将fsimage中的元数据加载到内存中,然后等待DataNode的心跳。如果,没有接收到部分DataNode的心跳,则会将这一部分DataNode的数据进行重新备份。如果收到DataNode的心跳,NameNode会对DataNode的Block进行校验。这个过程称之为NameNode的安全模式

16. 安全模式中,如果校验成功,NameNode会自动退出安全模式;如果校验失败,NameNode会试图去恢复数据,然后重新校验

17. 如果在不合理的时间内,HDFS依然没有退出安全模式,则意味着数据产生了丢失,此时需要强制退出安全模式:hadoop dfsadmin -safemode leave

18. 也正是因为安全模式的存在,所以要求在伪分布式中,副本数据必须为1 - 因为安全模式的校验,所以副本数量不能超过节点数量

19. 安全模式中,HDFS只对外提供读服务不提供写服务

副本放置策略

1. 第一个副本:
    a. 集群内部上传:谁上传第一个副本就放在谁身上
    b. 集群外部上传:NameNode会挑选一个相对空闲的节点来存储数据

2. 第二个副本:
    a. Hadoop2.7以前:第二个副本是放在和第一个副本不同机架的节点上
    b. Hadoop2.7开始:第二个副本是放在和第一个副本相同机架的节点上

3. 第三个副本:
    a. Hadoop2.7以前:第三个副本是放在和第二个副本相同机架的节点上
    b. Hadoop2.7开始:第三个副本是放在和第二个副本不同机架的节点上

更多副本:放在相对空闲的节点上

 

机架感知策略

1. 所谓的机架本质上是一个Map映射,IP或者主机名作为键,机架作为值来使用

2. HDFS中所有的机架指的不是物理机架而是逻辑机架

3. 可以将不同物理机架上的节点配置在同一个逻辑机架上
实际过程中,往往是将同一个物理机架上的节点配置在同一个逻辑机架上

DataNode

1. 作用:存储Block

2. DataNode将Block存储在磁盘上,在磁盘上的位置由hadoop.tmp.dir属性来决定,会在dfs/data目录下

3. DataNode会定时的向NameNode发送心跳
DataNode存在4种状态:预服役、服役、预退役、退役

SecondaryNameNode

1. SecondaryNameNode并不是NameNode的备份,而是辅助NameNode进行edits文件的滚动

2. 当存在SecondaryNameNode的时候,edits文件的滚动过程是发生在SecondaryNameNode上;
  如果没有SecondaryNameNode,则edits文件的滚动是发生在NameNode上.到目前为止,HDFS集群只能是NameNode+SecondaryNameNode结构或者是双NameNode结构,
  实际过程中采用双NameNode结构而抛弃掉SecondaryNameNode

HDFS相关目录说明

1. dfs目录是在格式化的时候出现
2. 实际过程中,data、name、namesecondary应该是出现在不同的节点上
3. in_use.lock表示当前主机已经启动了对应的进程,防止重复启动
4. HDFS会将每一次的写操作看作一个事务,然后分配一个全局递增的事务id - txid
5. 在HDFS第一次启动之后,隔1min自动进行一次edits文件的滚动,之后就按照指定的时间间隔进行滚动
6. edits文件的转化命令:
hdfs oev -i edits_0000000000000000003-0000000000000000010 -o edits.xml
7. 所有的edits文件的开头都是OP_START_LOG_SEGMENT,所有的edits文件的结尾都是OP_END_LOG_SEGMENT
8. 上传文件:
    a. OP_ADD:表示在HDFS上创建一个同名._COPYING_文件
    b. OP_ALLOCATE_BLOCK_ID:分配BlockID
    c. OP_SET_GENSTAMP_V2:分配时间戳编号
    d. OP_ADD_BLOCK:利用流将数据写到DataNode的Block中
    e. OP_CLOSE:关流
    f. OP_RENAME_OLD:重命名
9. 文件上传完成之后不能修改
10. fsimage_XXXX.md5会利用md5算法对fsimage_XXXX进行校验。即当fsimage文件被认为改动之后,那么校验就会失败
11. VERSION:
    a. clusterID:在NameNode被格式化的时候自动计算产生。每格式化一次,都重新计算一次。NameNode会将clusterID分发给每一个DataNode,注意,每一个DataNode只接收一次clusterID
    b. storageType:节点类型
    c. blockpoolID:块池编号

回收站

1. 在HDFS中,回收站策略默认是不开启的,即意味着删除文件这个操作会立即生效并且不能撤销
2. 如果需要开启回收站策略,那么需要在core-site.xml中进行配置:
    <!-- 配置回收站垃圾清理的间隔时间,单位是min -->
    <!-- 表示垃圾放入回收站中会暂存1天,如果超过1天还没有还原则会被清理 -->
    <property>
        <name>fs.trash.interval</name>
        <value>1440</value>
    </property>
如果需要将数据从回收站还原,使用的是hadoop fs -mv
日志分析:
NameNode:删除时间 2分钟
moved:移动位置,/user/root/.Trash/Current 回收站内

hadoop fs -expunge #清空回收站

 

posted @ 2020-04-13 12:39  phy2020  阅读(340)  评论(0)    收藏  举报