转载自:http://blog.csdn.net/weixuehao/article/details/16967485
大部分内容转载自以上博客,对某些地方进行了适当的补充。
简介
HDFS(Hadoop Distributed File System )Hadoop分布式文件系统。是根据google发表的论文翻版的。论文为GFS(Google File System)Google 文件系统(中文,英文)。
HDFS的设计:
①以流式数据访问模式来存储超大文件。
2.构建思路:一次写入多次读取是最高效的访问模式。
3.HDFS是为高数据吞吐量优化的,代价是高时间延迟。对于低延迟访问需求HBase更合适。
4.由于nameNode 将文件系统元数据存储在内存中,因此该文件系统所能存储的文件总数受限于nameNode的内存容量。
5.不支持多写入者,也不支持任意位置的修改。
HDFS有很多特点:
① 保存多个副本,且提供容错机制,副本丢失或宕机自动恢复。默认存3份。
② 运行在廉价的机器上。
③ 适合大数据的处理。多大?多小?HDFS默认会将文件分割成block,64M为1个block,但更多的是用的128M,块如此大是为了减少寻址开销。然后将block按键值对存储在HDFS上,并将键值对的映射存到内存中。如果小文件太多,那内存的负担会很重。
如上图所示,HDFS也是按照Master和Slave的结构。分NameNode、SecondaryNameNode、DataNode这几个角色。
NameNode:是Master节点,是大领导。管理数据块映射;处理客户端的读写请求;配置副本策略;管理HDFS的名称空间;
管理文件系统命名空间,维护着文件系统树及整棵树内所以文件和目录。
这些信息以两个文件形式永久保存在本地磁盘:命名空间镜像文件和编辑日志文件。mameNode 也记录着每个文件中各个块所在的节点信息。但并不永久保存块的位置信息。这些信息会在系统启动时由数据节点重建。
SecondaryNameNode:是一个小弟,分担大哥namenode的工作量;是NameNode的冷备份;合并fsimage和fsedits然后再发给namenode。
DataNode:Slave节点,奴隶,干活的。负责存储client发来的数据块block;执行数据块的读写操作。
存储并检索数据块,定期向nameNode发送他所存储块的列表。
热备份:b是a的热备份,如果a坏掉。那么b马上运行代替a的工作。
冷备份:b是a的冷备份,如果a坏掉。那么b不能马上代替a工作。但是b上存储a的一些信息,减少a坏掉之后的损失。
fsimage:元数据镜像文件(文件系统的目录树。)
edits:元数据的操作日志(针对文件系统做的修改操作记录)
namenode内存中存储的是=fsimage+edits。
SecondaryNameNode负责定时默认1小时,从namenode上,获取fsimage和edits来进行合并,然后再发送给namenode。减少namenode的工作量。
nameNode实现容错非常重要,Hadoop为此提供了两种机制:
1、备份那些组成文件系统元数据持久状态的文件。(实时同步,是原子操作。)
2、运行一个辅助nameNode,但他不能被用作nameNode.
作用:定期通过编辑日志合并命名空间镜像,以防止编辑日志过大。(一般在另一台计算机运行,因为占用cup)