大数据-HDFS(一)
Hadoop分布式文件系统(HDFS)是指被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统(Distributed File System)。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。HDFS是Apache Hadoop Core项目的一部分。
HDFS的优缺点
优点
1.高容错性
- 数据自动保存多个副本,它通过增加副本的形式,提高容错性。
- 某一个副本丢失以后,可以自动恢复,由HDFS内部机制实现;不需要我们关心。
2.适合批处理
- 它是通过移动计算而不是移动数据。
- 它会把数据位置暴露给计算框架。
3.适合大数据处理
- 数据规模:能够处理数据规模达到GB、TB甚至PB级别。
- 文件规模:能够处理百万规模以上的文件数量。
- 节点规模:能够处理10K节点的规模。
4.流式数据访问
- 一次写入,多次读取,不能修改,只能追加。
- 它能保证数据的一致性。
5.可构建在廉价机器上
- 它通过多副本机制,提高可靠性。
- 它提供了容错和恢复机制。比如某一副本丢失,可以通过其他副本来恢复。
缺点
1.不适合低延时数据访问
- 比如毫秒级以内的数据存储和读取是不行的。
- 它适合高吞吐率的场景,就是在某一时间内写入大量的数据。
2.无法高效的对大量小文件进行存储
- 存储大量小文件的话,会占用NameNode大量的内存来存储文件、目录和块信息。这样试不可取的,因为NameNode的内存是有限的。
- 小文件存储的寻址时间会超过读取时间,违反了HDFS的设计原则。
3.并发写入、文件随机修改
- 一个文件只能有一个写操作,不允许多个线程同时写入。
- 仅支持数据append(追加),不支持文件的随机修改。
HDFS架构分析
HDFS由四部分组成,HDFS Client、NameNode、DataNode和Secondary NameNode。
HDFS是一个主/从(Mater/Slave)体系结构,HDFS集群拥有一个NameNode和一些DataNode。NameNode管理文件系统的元数据,DataNode存储实际的数据。
HDFS客户端:就是客户端。
1、提供一些命令来管理、访问 HDFS,比如启动或者关闭HDFS。
2、与 DataNode 交互,读取或者写入数据;读取时,要与 NameNode 交互,获取文件的位置信息;写入 HDFS 的时候,Client 将文件切分成 一个一个的Block,然后进行存储。
NameNode:即Master。
1、管理 HDFS 的名称空间。
2、管理数据块(Block)映射信息
3、配置副本策略
4、处理客户端读写请求。
DataNode:就是Slave。NameNode 下达命令,DataNode 执行实际的操作。
1、存储实际的数据块。
2、执行数据块的读/写操作。
Secondary NameNode:用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照。最主要作用是辅助NameNode管理元数据信息。
1、辅助 NameNode,分担其工作量。
2、定期合并 fsimage和fsedits,并推送给NameNode。
3、在紧急情况下,可辅助恢复 NameNode。