Hadoop学习2-HDFS详解1

HDFS前言

HDFS产生背景:node

数据量愈来愈大,在一个操做系统下存不下全部数据,那么就须要分配到更多的操做系统管理的磁盘中,可是这样不方便管理。因此须要一种系统来管理多台机器上的文件,这句诗分布式文件管理系统,HDFS只是分布式文件管理系统中的一种。

HDFS是什么:安全

Hadoop Distributed File System ,Hadoop分布式文件系统,由不少服务器联合起来实现其功能,集群中的服务器有各自的角色。主要用来解决海量数据的存储问题。

HDFS使用场景:服务器

适合一次写入,屡次读出的场景,且不支持文件的修改。因此适合用来作数据分析,不适合用来作网盘应用。

设计思想:网络

一、分散均匀存储 dfs.blocksize = 128M

二、备份冗余存储 dfs.replication = 3(数据默认存3份)

在大数据系统中的应用:框架

为各种分布式运算框架(如:mapreduce,spark,tez,……)提供数据存储服务。

重点概念:分布式

文件切块,副本存放,元数据

HDFS 的概念和特性

概念:oop

首先,它是一个文件系统,用于存储文件,经过统一的命名空间——目录树来定位文件

其次,它是分布式的,由不少服务器联合起来实现其功能,集群中的服务器有各自的角色;

重要特性:大数据

(1)HDFS中的文件在物理上是分块存储(block),块的大小能够经过配置参数( dfs.blocksize)来规定,默认大小在hadoop2.x版本中是128M,老版本中是64M

(2)HDFS文件系统会给客户端提供一个统一的抽象目录树,客户端经过路径来访问文件,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data

(3)目录结构及文件分块信息(元数据)的管理由namenode节点承担

——namenode是HDFS集群主节点,负责维护整个hdfs文件系统的目录树,以及每个路径(文件)所对应的block块信息(block的id,及所在的datanode服务器)

(4)文件的各个block的存储管理由datanode节点承担

\---- datanode是HDFS集群从节点,每个block均可以在多个datanode上存储多个副本(副本数量也能够经过参数设置dfs.replication)

(5)HDFS是设计成适应一次写入,屡次读出的场景,且不支持文件的修改

_(注:适合用来作数据分析,并不适合用来作网盘应用,由于,不便修改,延迟大,网络开销大,成本过高)_

图解HDFS:
经过上面的描述咱们知道,hdfs不少特色:spa

保存多个副本,且提供容错机制,副本丢失或宕机自动恢复(默认存3份)。注意,副本数再大,也大不过节点数。

运行在廉价的机器上

适合大数据的处理。HDFS默认会将文件分割成block,,在hadoop2.x以上版本默认128M为1个block。而后将block按键值对存储在HDFS上,并将键值对的映射存到内存中。若是小文件太多,那内存的负担会很重。

如上图所示,HDFS也是按照Master和Slave的结构。分NameNode、SecondaryNameNode、DataNode这几个角色。操作系统

NameNode:是Master节点,是大哥(大哥只能有一个)。存储文件
的元数据,如文件名,文件目录结构,文件属性(生成时间,副本数,
文件权限等),以及文件的块列表(就是指文件被划分储存在了
哪些block块上) 。注意:namenode不存文件,只存 fsimage+edits

SecondaryNameNode:是大哥老婆(老婆也就一个)分担大哥namenode
的工做量(特指合并fsimage和edits),虽然能分担一部分
大哥的工做量,但永远不能替代大哥。是NameNode的冷备份,负责定时
默认1小时,从namenode上,获取fsimage和edits来进行合并, 
合并成fsimage.ckpt 并推送给namenode(意味着替换了旧的,所
以namenode和secondrynamenode是交替更新的)。同时还会建立
一个checkpoint还原点。至关于win系统的还原点。减小namenode的工做
量。在紧急状况下,可辅助恢复namenode(只能回复部分,并非全部)
因为secondrynamenode的特色,会发现它仍是蛮鸡肋的,既不能立马
替换挂掉的Namenode并提供服务,又不能彻底恢复Namenode数据。
【为何不能彻底恢复,其实也很好理解,由于好比规定的是每隔一小时
secondry去拿。咱们在十一点进行了大量操做,而后11:59 namenode挂
了。由于secondry还没拿到最新的,因此只能恢复到11点的,11-11:59
的就丢失了】

DataNode:Slave节点,小弟,干活的(小弟就有无数个了)。负责
存储client发来的数据块block;执行数据块的读写操做以及块数据的
校验和(就是验证数据的完整性)。正由于要验证数据的完整性,
因此datanode始终会与namenode保持通信,这个叫作心跳。用来告诉
老大我这个小弟挂没,以及我存储了哪些文件的信息报告。
具体点就是经过向 NN 发送心跳保持与其联系(3 秒一次),
若是 NN 10 分钟没有收到 DN的心跳,则认为其已经 lost,
并 copy 其上的 block 到其它 DN

热备份:b是a的热备份,若是a坏掉。那么b立刻运行代替a的工做。
冷备份:b是a的冷备份,若是a坏掉。那么b不能立刻代替a工做。可是
b上存储a的一些信息,减小a坏掉以后的损失。  

fsimage:元数据镜像文件(文件系统的目录树。)  
edits:元数据的操做日志(针对文件系统作的修改操做记录)

block块大小:Block的大小等于传输时间\*传输速率。在hadoop2.x版本当中
默认大小是128M。而且blcok是datanode当中的子元素。之因此这么说,
是由于datanode的做用之一就是存储实际的数据块。(上面有介绍)
另外,block块的存储空间实际上是个虚拟空间。相似于咱们虽然给每台虚拟
机都设置了50G的存储空间,可是这50G的空间并无说被硬生生的独立出
来啊。能用到50G就用到,用不到也不妨碍别人继续用,差很少就是这么个
意思。所以不存在说空间浪费的说法。此外,分块存贮文件,都是一个
block用完就用下一个,不存在平分的说法。举个例子:
有一个文件130M要存储到HDFS当中,那么就至关于该文件占据了两个block块,
在第一个block块中存放了128M,在第二个blcok块中存
放了2M,同时就像上面咱们所说,block是虚拟的空间,不是独立出去的。
因此第二个blcok块的剩余空间还能存其余文件啊。
另外再提一点,咱们已经知道block是存放文件的,那么要是该文件还有其
他副本呢?很简单,仍是一样的block块也跟着复制。
好比有一个110M的文件,它占据了1个blcok块。可是他还有两个副本,因
此还会再有两个相同的blcok块。差很少就是这个意思,文件有副本,对应
的blcok块也会有相应副本,这是一一对应的。所以,说以并非说文件副
本越多越好。虽然安全了,可是占据的存储空间也就多了。
另外,副本存放策略HDFS也会有规则的

副本存放策略:
1) 第一个副本:放置在上传文件的 DN;若是是集群外提交,则随机挑选一台磁盘不太满,CPU 不太忙的节点。
2) 第二个副本:放置在于第一个副本不一样的机架的节点上
3) 第三个副本:与第二个副本相同机架的不一样节点
4) 更多副本:随机节点

最后回答几个问题

  1. 为何块的大小不能设置的过小,也不能设置的太大。
(1)HDFS的块是指的过小,会增长寻址时间,程序一直在找块的开始位置
(2)若是块设置的太大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需时间。呆滞程序在处理这块数据时会很是慢。

总结:HDFS块的大小设置主要取决于磁盘传输速率

2.如何解决上面咱们所说的,就一个namenode老大,挂掉了数据会丢失的问题呢?(其实这就是单点故障问题)

 1)启动一个拥有文件系统元数据的新NameNode(这个通常不采用,由于复制元数据很是耗时间)

 2)配置一对活动-备用(Active-Sandby)NameNode,活动NameNode失
 效时,备用NameNode当即接管,用户不会有明显中断感受。

    共享编辑日志文件(借助NFS、zookeeper等)

    DataNode同时向两个NameNode汇报数据块信息

    客户端采用特定机制处理 NameNode失效问题,该机制对用户透明
 
方法2就是 HA 高可用方法。

3.通常状况下HDFS当中这三个进程的启动顺序

namenode > datanode > secondarynamenode
相关文章
相关标签/搜索