HDFS:Hadoop Distributed File System,Hadoop分布式文件系统,主要用来解决海量数据的存储问题。node
为各种分布式运算框架(如:MapReduce,spark,hive.....)提供数据存储服务。
数据库
数据切块、副本存放、元数据安全
- 首先,它是个文件系统。用于存储文件,经过统一的命名空间——目录树来定位文件。
- 其次,它是分布式的。由不少服务器联合起来实现其功能,集群中的服务器有各自的角色。
经过上面的描述,hdfs有不少特色:服务器
如上图所示,HDFS也是按照Master和Slave的结构。分为NameNode(NN)、SecondaryNameNode、DataNode(DN)这几个角色。网络
NameNode:名称节点。框架
- 是HDFS的主节点、管理员。
- 是接收客户端(命令行、Java API程序 )的请求:建立目录、上传数据、下载数据、删除数据等等。
- 管理和维护HDFS的日志和元信息
DataName:数据节点。 负责存储client发来的数据库block;执行数据块的读写操做。分布式
SecondaryNameNode:是NameNode的冷备份;合并fsimage和fsedits而后再发给namenodeoop
fsimage:元数据镜像文件(文件系统的目录树)
edits:元数据的操做日志(针对文件系统作的修改操做记录)
namenode内存中存储的是=fsimage+edits。
SecondaryNameNode负责定时默认1小时,从namenode上,获取fsimage和edits来进行合并,而后在发送给namenode,减小namenode的工做量。性能
1.低延时数据访问。在yoghurt交互性的应用上,应用须要在ms或者几个s的时间内获得响应。因为HDFS为高吞吐率作了设计,也所以牺牲了快速响应。对于低延时的应用,能够考虑HBase或者Cassandra。
2.大量的小文件。标准的HDFS数据块的大小是128M(2.x),存储小文件并不会浪费实际的存储空间,可是无疑会增长在NameNode上的元数据。大量的小文件会影响整个集群的性能。
Btrfs为小文件作了优化-inline file,对于小文件有很好的空间优化和访问时间优化。
3.多用户写入、修改文件。HDFS的文件只能有一个写入者,并且写操做只能在文件结尾以追加的方式进行。它并不支持多个写入者,也不支持在文件写入后,对文件的任意位置的修改。大数据
可是在大数据领域,分析的是已经存在的数据。这些数据一旦产生就不会修改。所以,HDFS的这些特性和设计的局限也就容易理解了。HDFS为大数据领域的数据分析,提供了很是重要并且十分基础的文件存储功能。
1.冗余备份:每一个文件存储成一系列数据块(Block)。为了容错,文件的全部数据块都会有副本(副本数量即复制因子,dfs.replication)。
2.副本存放:采用机架感知(Rak-aware)的策略来改进数据的可靠性、高可用和网络带宽的利用率。
3.心跳检测:NameNode周期性地从集群种的每个DataNode接收心跳包和块报告,收到心跳包说明该DataNode工做正常。
4.安全模式:系统启动时,NameNode会进入安全模式。此时不容许出现数据块的写操做。
5.数据完整性检测:HDFS客户端软件实现了对HDFS文件内容的校验(CheckSum)和检查(dfs.bytes-per-checksum)。
若是NameNode失效,那么客户端或者MapReduce做用均没法读写查看文件。
1.启动一个拥有文件系统元数据的新NameNode(这个通常不采用,由于复制元数据很是消耗时间)。 2.配置一对活动-备用(Active-Standby)NameNode,活动NameNode失效时,备用NameNode当即接管,用户不会有明显中断的感受。