背景:
Doug Cutting开创的开源软件,用java书写代码,实现类似google的搜索。
2003-2004年,google公开了部分GFS和Mapreduce思想的细节,以此为基础DougCutting等人用了2年业余时间实现DFS和Mapreduce机制。
Yahoo诏安Doug Cutting及其项目
Hadoop于2005年秋天作为Lucene的子项目Nutch的一部分证书引入apache基金会。2006年3月份,Map-reduce和Nutch Distribe File System(NDFS
)分别被纳入称为hadoop的项目中
名字来源来自Doug Cutting儿子的玩具,hadoop中。
2.hadoop高度:
1)实现云计算的事实标准开源软件
2)包含数十个具有强大生命力的子项目(HDFS、MapReduce 、Pig、Hive、Hbase(Nosql数据库)、HIve(数据库查询工具,支持sql一般),)。
3)已经在数千节点上运行,处理数据量和排序时间不断打破世界纪录。
3后台进程
NameNode
Secondary namenode 辅助名称节点
JobTracker 作业跟踪器,MapReduce的总控作用,用来处理用户提交的作业,提交的代码。把job切割成一个一个task并分配节点;
监控task,重启失败的task;每个集群只有为一个一个jobtracker;位于master节点里面。
TaskTracker, 位于slave节点,与datanode结合;每个节点只有一个tasktracker,但一个tasktracker可以启动多个JVM,用于并行执行Map或reduce任务。;
与jobtracker交换。
NameNode
1.管理文件系统的命名空间
2.记录每个文件数据块在各个dataNode上的位置和副本信息。
3.协调客户端对文件的访问
4.记录命名空间内的改动或空间本身属性的改动。
5.NameNode使用事务日志记录HDFS元数据的变化,使用映像文件存储文件系统的命名空间,报考文件映射,文件属性等。
DATANode
1.复制所在物理节点的存储管理
2.一次写入,多次读取(不修改)
3.文件由数据块组成,典型的快大小是64mb
4,数据块尽量散布道各个节点
读取数据流程
1.客户端要访问HDFS中的一个文件
2.首先从namenode获得组成这个文件的数据块位置列表
3.根据列表知道存储数据块的datanode
4.访问datanode 获取数据
5.namenode 并不参与数据实际传输
HDFS的可靠性
1.冗余副本策略
可以在hdfs-site.xml中设置复制因子指定副本数量
所有数据块独有副本
dataNode启动时,遍历本地文件系统,产生一份hdfs数据块和本地文件的对应关系列表blockreport汇报给namenode。
2.机架策略
A 集群一般放在不同机架上,机架间带宽要比机架内带宽要小
B HDFS的“机架感知” 节点之间传递字节包,获得机架信息。
C 一般在本机架存放一个副本,在其他机架再存放别的副本,这样可以防止机架失效时丢失数据, 也可以提高带宽利用率。
3.心跳机制
A NameNode 周期性从datanode 接收心跳信号和块报告
B NameNode根据块报告验证元数据
C 没有按时发送心跳的datanode会被标记为宕机,不会再给他任何IO请求。
D 如果datanode 失效造成副本数量下降,并且低于预先设置的阀值,namenode会检测出这些
数据块,并在合适的时机进行重新复制。
E 引发重新复制的原因还包括数据副本本身损坏、磁盘错误、复制因子被增大等。
4.安全模式
A NameNode 启动时会先经过一个“安全模式” 阶段
B 安全模式阶段不会产生数据写
C 在此阶段NameNode 收集各个datanode 的报告,当数据块达到最小副本数以上时候,
会被认为是“安全”的
D 在一定比例(可设置)的数据块被确认为“安全”后,再过诺干时间,安全模式结束。
E 当检测到副本数不足的数据块时,该块会被复制直到达最小副本数。
5.校验和
每个数据块都参数校验和
校验和会作为单独一个隐藏文件保存在命名空间下
6.回收站
删除文件时候,其实是放入回收站、trash
回收站里的文件可以快速恢复
可以设置时间阀值,当回收站里面的文件存放时间超过这个阀值,就会被永久删除,并且释放占用的数据块。
7.元数据保护
映像文件刚和事务日志是namenode的核心数据,可以配置为拥有多个副本
副本会降低NameNode的处理速度,但增加安全性
NameNode依然是单点的,如果发生故障,要手工切换。
8,快照机制
支持存储某个时间点的映像,需要时可以使数据重返这个时间点的状态
Hadoop目前还不支持快照,已经列入开发计划