Hadoop日常整理02-分布式文件系统HDFS

目录

 

简介

特点

HDFS技术细节

一、概述

二、Block

三、NameNode

四、DataNode

五、复本放置策略

六、机架感知策略


简介

摘自https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html#Introduction的Introduction

The Hadoop Distributed File System (HDFS) is a distributed file system designed to run on commodity hardware. It has many similarities with existing distributed file systems. However, the differences from other distributed file systems are significant. HDFS is highly fault-tolerant and is designed to be deployed on low-cost hardware. HDFS provides high throughput access to application data and is suitable for applications that have large data sets. HDFS relaxes a few POSIX requirements to enable streaming access to file system data. HDFS was originally built as infrastructure for the Apache Nutch web search engine project. HDFS is part of the Apache Hadoop Core project. 

Hadoop分布式文件系统(HDFS)是一个设计用于在普通硬件上运行的分布式文件系统。它与现有的分布式文件系统有很多相似之处。不过,与其他分布式文件系统的不同之处才是有意义的。HDFS具有高度的容错性,设计用于部署在低成本硬件上。HDFS提供了对应用程序数据的高吞吐量访问,适用于拥有大型数据集的应用程序。HDFS放宽了一些POSIX需求,以支持对文件系统数据的流访问。HDFS最初是作为Apache Nutch web搜索引擎项目的基础设施构建的。HDFS是Apache Hadoop核心项目的一部分。

特点

1.能够通过对数据切块,存储超大文件

2.能够通过心跳机制,快速的应对和检测故障

3.不建议存储大量的小文件

4.通过复本机制,实现可靠的文件系统

HDFS技术细节

一、概述

1.在存储数据的时候会将数据进行切分,切分出来的每一块称之为一个Block

HDFS会将上传需要存储的数据切分,切分出来的每一份都叫一个block。还需要一个记录如何切分

存储在那个节点的功能。比如,一个文件在一个节点存不下,但是文件切分后,切分出的每一块block,可以存储到不同节点,这样效率上会更高。

2.HDFS包含两类主要节点:NameNode和DataNode

3.DataNode节点负责存储具体数据

   NameNode节点负责记录数据以及管理DataNode

即:每一个保存数据的节点称为DataNode,记录切分

保存数据信息的节点叫做NameNode

4.NameNode和DataNode是Hadoop中的进程,实际使用过程中,会将NameNode以及DataNode部署在不同的节点上,因此也用NameNode和DataNode表示节点的名字。

5.在HDFS中,为了保证数据的完整性,将每一个Block进行备份,每一个备份称之为是一个复本。默认复本数量为3,block本身也是一个复本。

6.当对文件进行切块的时候,会给Block分配一个全局递增的ID(Block ID)

二、Block

1.Block表示一个数据块,是HDFS中数据存储的基本单位。

2.每一个文件上传到HDFS中,都会切分成一个或者多个Block。

3.在Hadoop1.0中,每一个Block大小是64M;

   在Hadoop2.0中,每一个Block大小是128M;

注:

实际上指的是1个Block的最大容量

4.如果一个数据不足128M,那么这个数据本身是多大就占用多少容量(不会强制占满128M)

如,访问地址:50070访问hadoop的namenode节点-选择utilies-查找对应文件-查看size属性,可获取实际占用的容量

5.切块的意义

a.能够存储超大文件

b.为了能够进行快速的备份(将数据切分成小块,让多个节点同时备份数据,备份的效率相对更高。)

三、NameNode

1.负责管理DataNode和存储元数据

2.元数据包含:

a.我觉得存放路径(如:需要存储到根目录/,还是存储到其他目录)

b.文件的切块数量

c.快的复本数量(实际开发中,不同的客户端可能会指定不同的复本数量)

d.复本与DataNode的关系(复制的replication复本都存在哪些DataNode上)

3.元数据维系在内存以及磁盘中

4.元数据维系在内存中的目的是为了快速的查询

5.元数据维系在磁盘中的目的是为了崩溃恢复

--如果NamNode宕机了,重新启动的时候依然能够找到元数据

6.元数据的存储目录由hadoop.tmp.dir来指定,在core-site.xml中配置在指定的,如下配置,

<property>
    <name>hadoop.tmp.dir</name>
    <value>/home/software/hadoop-2.7.1-alone/tmp</value>
</property>

 在伪分布式中,在这个存储目录/tmp/dfs中有data、name等目录,分别指代DataNode和NameNode,完全分布式name与data将存在于不同的节点。此时在tmp目录下,路径/tmp/dfs/name/current中保存原数据的主要有两种文件:edits和fsimage文件。

7。元数据的存储文件是:edits和fsimage

所在目录:hadoop根目录下/tmp/dfs/name/current

a.fsimage用于记录元数据,但是其中记录的不是实时的元数据(文件存放路径、切块数量、块的复本数量、复本存储在哪个DataNode)

b.edits用于记录写操作(如:上传到HDFS的操作记录--复本存储在哪个DataNode)

8.当NameNode收到写请求的时候,会先将这个请求记录到edits文件中,如果记录成功在更改内存中的元数据,最后给客户端返回ack表示操作成功。这个过程并不涉及fsimage文件的修改。

9.当edits文件中的操作内容更新到fsimage文件中之后,即可使fsimage中的元数据能保持和内存一致。

10.edits文件内容和fsimage文件内容进行合并的条件:

a.时间维度:当距离上一次合并达到指定的时间(在core-site.xml中进行配置:fs.checkpoint.period,默认是3600,单位是s,也就意味着edits每个1个小时就将数据更新到fsimage中去)之后,将edits更新到fsimage中。---常用

b.空间维度:当edits文件达到指定的大小(core-site.xml中进行配置:fs.checkpoint.size,默认是64M,也就意味着edits达到64M的时候也会将数据更新到fsimage中)的时候会更新到fsimage中---常用

c.在NameNode重启的时候会触发edits和fsimage文件内容的更新合并---不常用

d.手动合并,命令hadoop dfsadmin -rollEdits----不常用

11.NameNode如何管理DataNode:通过心跳机制来管理DataNode

12.DataNode定时(默认是3s,可修改)给NameNode发送心跳信号表示当前的DataNode依然存在,且需要管理

13.心跳信号包含内容:

a.当前节点状态

b.当前节点存储的Block信息(存储哪些Block,防止Block丢失,如果有Block认为删除,那么通过心跳机制,NameNode会知道有Block缺失,会立即从其他节点拷贝一份回来)

14.如果NameNode长时间(默认是10min,即200次心跳)没有收到DataNode的心跳,则认为这个DataNode已经lost(丢失),将这个DataNode上存储的BLock在被分到其他节点上,保证复本数量。

15.NameNode是HDFS中的核心节点,但在Hadoop1.0中,只能存在一个,在Hadoop2.0的完全分布式中,能且最多能存在2个(core-site.xml中fs.defaultFS指定的NameNode所在节点,无法动态改变)

16.当NameNode重启的时候

a.触发edits和fsimage之间的更新合并

b.然后将fsimage中的元数据加载到内存中

c.等待所有DataNode节点的心跳(目的是校验数据的总量是否正确,如果没有收到某个DataNode的心跳,则数据总量就不对,NameNode就会试图恢复这个DataNode保存的数据,即保证备份总量)

17.HDFS处在安全模式中的时候,不对外提供服务

18.当启动HDFS的时候,如果发现处在安全模式,需要等待一会儿;如果校验成功会自动退出安全模式

19.如果HDFS一直处在安全模式中,说明数据是丢失了,就要强制退出安全模式;

命令:hadoop dfsadmin -safemode leave(尽量不使用)

20.在伪分布式下,复本数量必须配置为1。(如果在伪分布式下,复本数量设置为3,根据复本放置策略这些复本要放到不同机架的不同节点上,但是伪分布式下只有1个节点,那就意味着放置会失败;如果重启NameNode,则会自动进入安全模式,进行总量校验,此时会校验失败,且namenode会试图恢复这个DataNode保存的数据,以保证备份总量,所以会一直处于安全模式中退不出来)

四、DataNode

1.用于进行数据的存储

2.数据是以Block的形式存储在DataNode中(每一个block都相当于一个复本)

3.DataNode会每隔3s给NameNode发送心跳

五、复本放置策略

1.在HDFS中,默认是多复本策略,复本数量默认为3

2.第一个复本:如果复本是从集群内部上传(比如从一个DataNode上传),是哪个DataNode上传,则第一个复本就放在哪个DataNode上;

如果是从集群外部上传,NameNode选择一个相对空闲(存储较少内容)的节点存储第一个复本

3.第二个复本:放在和第一个复本不同(逻辑)机架的节点上

4.第三个复本:放在和第二个复本相同(逻辑)机架的不同节点上

六、机架感知策略

1.在Hadoop中,所谓的机架实际上是一个映射,是一个逻辑机架

2.可以将不同的主机映射到同一个机架上

3.可以将不同的物理机架上的节点映射到同一个逻辑机架上

4.实际开发中,一般会将同一个物理机架上的节点放在同一个逻辑机架上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值