大数据专栏 | ||
---|---|---|
上一篇 | 主目录 | 下一篇 |
目录
【前言】
hadoop分布式文件系统HDFS
简介
【存储方式】
HDFS集群它是怎么给我存储我上传的文件 ?
HDFS集群存储大文件数据的方案:
- 分散存储 :
把一个大文件按照固定的大小切割成很多的小文件 。在hadoop2.x版本当中 数据块大小的默认值是 128M,在hadoop1.x版本当中 数据块大小的默认值是 64M。不管在哪个版本中,该值都是可以更改的。而且不同的文件,他们的切割大小也可以不同,完全是由 客户端 决定 - 冗余存储:
为了提高数据的安全性,HDFS采用的解决方案就是采用冗余存储。在所有的hadoop版本中,默认的冗余值: 3。该值和副本数一样,是可以随意更改,并且不同的文件可以保存不同的备份数。而且也是由客户端决定。当前这个3的意思表示的是:某一个数据块的总数3,而不是表示除了保存这个数据块以外,还要保存3个副本
【可靠性】
- 当hadoop04和hadoop05挂掉之后,HDFS集群会自动的把原来存在于hadoop04和hadoop05这两台机器上的所有的数据快都会自动复制到其他的节点上。
现在的问题是:如果把死掉的hadoop04和hadoop05启动起来 会有什么问题?
重要的结论:客户端在上传文件的时候,已经指定了副本数。所以HDFS会一直尽力的给当前这个文件保存正常的副本数
当多了副本,就会删除;当少了副本,就会复制
【HDFS 的核心】
-
HDFS的架构 : 主从架构 — 一主多从 — 单点故障问题
HDFS的namenode节点千万不能死。 整个HDFS集群都不能对外提供服务
单点故障:当集群中的一个节点宕机之后,就造成了整个集群不可用。保证一个HDFS集群始终都能有一个active namenode 。namenode运行的时候,因为会接受所有的客户端的读写数据(上传 和 下载)的请求。任意时刻,无论哪个客户端发送请求,都得保证有namenode去处理。假如在正常使用过程当中,如果namenode宕机,最合适的方式,肯定是找一个替代品 -
active namenode 运行着 正常的运行,能够接收所有客户端的请求进行共享存储系统(元数据)(生命力非常的顽强)
-
standby namenode 运行着 但是不接受任何客户端的任何请求,仅仅只是等待active namenode的宕机
namenode是 HDFS 集群的管理节点,掌握这整个HDFS集群的关键核心数据(元数据) -
元数据:
元数据(Metadata),又称中介数据、中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。
1、HDFS集群的抽象目录树结构
2、某个文件被切分成了多少个数据块,都分布在那些节点上
hadoop.tar.gz
blk-01 : hadoop02, hadoop03
blk-02 : hadoop02, hadoop04 -
ZooKeeper
1、确保整个HDFS集群中,始终只有一个namenode (选举算法)
2、ZooKeeper实现了一个非常优秀的共享系统
【压力问题】
- 如果集群超大,如果只有 一个namenode的话,当请求的数量很多,这个namenode的负载会很大。当请求的文件200T 很大,如果要进行下载,怎么保证该客户端能够迅速的找到对应的这个200T 文件的所有数据块都存储在哪些服务器里面?就是发请求去请求namenode告诉客户端 所有数据块的位置。客户端要寻找的关于这些所有数据块都分布在那些节点的数据都是 元数据。NameNode的内存可能不够存放所有的元数据。那么怎么解决这个问题?
1、加内存
2、一个namenode存不下,使用多个namenode去存
active namenode 和 standby namenode的状态一模一样, 元数据是一模一样
first namenode 和 second namenode 的状态都是acitve ,元数据不一样
【联邦机制】
- (namenode之间是兄弟关系)
管理的从节点:
1、如果不能交叉,那就意味着,是两个完全独立的集群
2、如果能交叉,每个datanode都可以为不同的namneode去存储元数据。怎么区分这些数据块到底是属于那个namenode ?靠块池
在联邦集群中,每个namenode也得做高可用配置