HDFS的产生和定义
HDFS的定义和产生
HDFS(Hadoop Distributed File System)是一个分布式的文件系统,用于存储文件,通过目录树(跟linux目录结构是一样的)的方式来定位文件,可以单台,也可以多台分布式存储
随着数据量越来越大,一台机器存不下所有的数据,那么就需要多台服务器去存储,例如:一台机器10T的空间,现在有一个100T的数据,那么就需要多台服务器去分别存储这个文件,但是存储之后不方便管理和维护。所以就出现了分布式文件管理系统,HDFS就是其中之一
HDFS的使用场景:适合一次写入,多次读出的场景
HDFS的优缺点
优点
- 高容错性
数据保存多个副本,只要还有一个副本存在,文件就不会丢失,他可以通过增加副本的方式,提高容错性
- 某一个副本丢失后,他可以自动恢复
- 适合处理大数据:数据规模可以处理TB甚至PB级别的数据,可以处理百万以上的文件数量
- 价格便宜:可以使用便宜的机器,通过多副本的机制,提高可靠性
缺点
- 不适合低延时数据访问,例如:毫秒几倍的存储数据
- 无法高效的对大量小文件进行存储,小文件多的话,用占用大量的NameNode目录和块。
- 如果小文件特别多,那么小文件存储的寻址时间会超过读取的时间
- 不支持并发写入:一个文件只能有一个写,不允许多个同时写入,仅支持追加,不支持修改
HDFS的组成
NameNode:管理HDFS的名称空间,配置副本策略,管理数据块的映射信息
DataNode:存储实际的数据块,执行数据块的读写操作
Client:文件切分,文件上传HDFS的时候将文件切分成一个个的block进行上传,于NameNode进行交互,获取文件的位置信息,于DataNode交互,读写数据,Client可以通过一个命令管理和访问HDFS
Secondary NameNode:辅助NameNode工作,例如:定期合并Fsimage和Edits,并推送给NameNode,在紧急情况下可以辅助恢复NameNode
HDFS文件块大小
HDFS中的文件是分块进行存储的,块的大小可以通过dfs.blocksize来规定,默认在2.x和3.x的版本中是128M,1.x版本中是64M
寻址时间为传输时间的1%为最佳状态,寻址时间就是找到block的时间
块的大小不能设置太小,也不能太大
如果块的大小设置太小,会增加寻址时间
如果块的大小设置太大,从磁盘传输数据的时间会明显大于定位这个块开始位置说需要的时间
HDFS块大小设置主要取决去磁盘传输速率,如果磁盘是100M/s,就可以设置为128M