面对今天的互联网公司,每天都会有上亿次的用户访问量,用户每进行一次操作,都会产生数据,面对传统的存储系统不能满足存储要求,迫切需要一种系统来管理多台机器上的文件,这种系统就是分布式文件管理系统。HDFS只是分布式文件管理系统中的一种。
HDFS(hadoop Distributed File System),它是一个分布式系统,用于存储文件,通过目录数来定位;其次,它是分布式的,由许多服务器联合起来实现的功能,集群中的服务器有各自的角色。
①.高容错性
②.适合处理大数据
③.可构建在廉价的机器上,通过多副本机制,提高可靠性
①不适合低延时数据访问,比如毫秒级的查询,是做不到的
②无法高效的对大量小文件进行存储
③不支持并发写入,文件随机修改
1.namenode(nn):就是master,它是一个管理者
①管理HDFS的名称空间
②配置副本策略
③管理数据块(Block)映射信息
④处理客户端读写请求
2.datanode:就是slave。namenode下达命令,datanode执行实际的操作
①存储实际的数据块
②执行数据块的读/写操作
3.Clint:就是客户端
①文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行上传
②与NameNode交互,获取文件的位置信息;
③与Datanode交互,读取或者写入数据
④Client提供一些命令来管理HDFS,比如NameNode格式化
⑤Client可以通过一些命令来访问HDFS,比如HDFS的增删改查操作
4.Secondary NameNode
并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务
①辅助NameNode,分担其工作量,比如定期合并Fsimage和Edits,并推送给NameNode
②在紧急情况下,可辅助恢复NameNode
HDFS中的文件在物理上是分开存储(Block),块的大小可以通过配置参数(dfs.blocksize)来规定,默认大小 在Hadoop2.x/3.x版本中是128M,1.x版本是64M
思考?为什么块的大小不能设置太小,也不能设置太大
1.HDFS的块设置太小,会增加寻址时间,程序一直在找块的开始
2.如果块设置的太大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需要的时间。导致程序在处理这块数据时,会非常慢。
总结:HDFS块的大小主要取决与磁盘传输速率