sujins 2020-03-20
随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理。HDFS只是分布式文件管理系统中的一种;
HDFS是基于java的分布式文件系统,允许您在hadoop集群中的多个节点上存储大量数据。它专门存储超大数据文件,为整个hadoop生态圈提供了基础的存储服务;
HDFS的使用场景:适合一次写入,多次读出的场景,且不支持文件的修,改,适合使用做数据分析,并不适合用来做网盘应用;
HDFS是一个主从体系架构,由于分布式存储的性质,集群拥有两类点NameNode和DataNode;
NameNode(nn):就是master,它是一个主管,管理者;
1.管理HDFS的名称空间;
2.配置副本策略;
3.管理数据块(block)映射信息;
4.处理客户端读写请求;
DataNode(数据节点):就是slave,NameNode下达命令,DataNode执行实际操作;
1.存储实际的数据块;
2.执行数据库的读/写操作;
Client:就是客户端
1.文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的block,然后进行上传;
2.与NameNode交互,获取文件的位置信息;
3.与DataNode交互,读取或者写入数据;
4.Client提供一些命令来管理HDFS,比如N阿么Node格式化;
5.Client可以通过一些命令来访问HDFS,比如对HDFS增删改查操作;
Secondary NameNode:并非NAMENoel的热备。当NAMENoel挂掉的时候,它并不能马上体寒NameNode并提供服务;
1.辅助NameNode,分担其工作量,比如定期合并Fsimage和Edits,并推送给NameNode;
2.在紧急情况下,可复制恢复NameNode;
高容错性:
1.数据自动保存多个副本。它通过增加副本的形式,提供容错性;
2.某一个副本丢失以后,它可以自动恢复;
适合大数据处理:
1.能够处理数据规模达到GB,TB,甚至PB级别的数据;
2.能够处理百万规模以上的文件数量,数量相当之大;
流式文件访问:一次性写入,多次读取,保证数据一致性;
可构建在廉价机器上:通过多副本提供高可靠性,提供容错和恢复机制;
不适合低延迟数据访问场景:比如毫秒级,低延迟与高吞吐率;
不适合小文件存取场景:占用NameNode大量内存;
不适合并发写入,文件随机修改场景:一个文件只能有一个写者;
HDFS中的文件在物理上是分块存储(block),块的大小可以通过配置参数(dfs.blocksize)来规定,默认大小在hadoop2.x版本中是128M,老版本中是64M;
为什么块的大小不能设置大小,也不能设置太大?
1.HDFS的快设置大小,会增加寻址时间,程序一直在找块的开始位置;
2.如果块设置的太大,从磁盘传输的时间会明显大于定位这个块开始位置所需的时间。导致程序在处理这块数据时,会非常慢;
总结:HDFS块的大小设置主要取决于磁盘传输速率;