初识HDFS
什么是HDFS
HDFS(Hadoop Distributed File System)是基于Hadoop平台使用的分布式文件系统,其作为文件系统,首要功能便是为了存储文件以及提供文件查询功能,其文件系统的查询搜索结构类似Linux,通过目录树定位文件;其次它是分布式的,是由多个服务器节点联合起来提供服务。
为什么引入分布式文件系统
现如今数据量越来越大,单靠一台机器已经无法满足数据量的存储,采用的存储方式由一台机器转向由多台分区存储是一种不错的解决方案,于此同时,如何对存储于多台机器上进行有效管理变成了一个难题,分布式文件系统的引入便解决了这个问题。所以分布式文件系统就是为了解决海量数据的存储管理问题。
HDFS的优劣性
优点
1.可以存储海量数据
存储的数据规模可以达到TB,PB级
2.高容错性
采用多副本存储(默认是三个副本,可以通过修改参数从而改变副本的数量),在不同的节点存储多个相同的副本,当一个节点发生故障,其他的节点可以提供服务。
3.流式数据访问
采用流式数据访问方式,适用于一次写入,多次读出的场景(具体原因在分析完写入于读出原理便可知晓)
4.可以部署在廉价的集群上
Hadoop的部署对单台机器的性能要求不高,即使单一机器可靠性不高,由于容错机制也能保持高可靠性。
劣势
1.不适合低延时的数据访问
HDFS设计的初衷便是满足高数据吞吐量,这必定会以提高时间延迟为代价
2.无法高效对大量小文件进行存储
HDFS设计的适用场景便是一次写入,多次写出,大量的小文件会大大加重namenode的工作负担和内存消耗(具体在分析完namenode的工作原理便可知晓),从而影响整个集群的存储性能。当然对于大量小文件的存储,Hadoop也提供了优化策略
3.不支持并发写入和文件的随机修改
HDFS不支持多线程先入,修改方式也只支持在文件末尾添加内容
HDFS的组成结构
HDFS由Client、Namenode、DataNode、SecondaryNamenode四部分组成
Client:客户机
1.提供命令对管理HDFS
2.提供命令访问HDFS
3.将要存储到HDFS中的文件切分成一个个的数据块(Block),然后进行存储
4.与namenode交互,获取文件存储的位置信息
5.与datanode交互,存入或读取文件
NameNode:名称节点(管理者)
1.用于管理文件系统中的元数据信息
2.管理数据块的映射信息
3.配置副本策略
4.处理客户端的读写请求
DataNode:数据节点
1.用于存储记录文件具体内容的数据块
2.写入或读出文件
SecondaryNameNode:辅助名称节点
1.辅助 NameNode,分担其工作量。
2.定期合并 Fsimage 和 Edits,并推送给 NameNode。
3.在紧急情况下,可辅助恢复 NameNode。(并不能在NameNode挂掉后直接替换NameNode)
数据块
用于存储文件内容信息的独立l逻辑单元,默认大小为128MB,倘若向HDFS中写入一个1MB大小的文件,文件只会占用一个文件块中1MB大小的磁盘空间,并不会占用128MB的磁盘空间(实际传输的文件大小任然是1MB),但是剩余的127MB空间也无法提供其它文件使用。
为什么块大小设置为128MB?
1.减少寻址开销
2.当一个块设置的足够大时,传输一个由多个数据块组成的文件的速率便取决与磁盘传输率
3.现今计算机磁盘的普遍传输速率为100MB/s,寻址时间在10ms左右,让寻址时间占文件传输时间的1/100时性能最佳,由此计算块大小设置为100MB左右最佳
总结
HDFS是基于Hadoop平台的分布式文件系统,用于解决海量数据的存储以及管理问题。