分类: 服务器与存储
2011-10-09 17:19:33
本次记录HDFS的设计。
HDFS的适用场景和目标HDFS来源于Google FS,所以和GoogleFS的设计是一致的。
1 存什么?后端的,海量数据,大数据集(大文件)。小文件已经在前端归并到某个大数据集。
2 用什么存?使用廉价PC硬件,节点容易发生故障,因此需要high fault tolerance。
3 怎么存?
HDFS系统结构
一个NameNode,其他的是DataNode。
Client从NameNode获得文件系统服务,或者说文件元数据,如文件名,目录,路径,权限等。
Client直接从DataNode获得实际数据。
这个图比较清楚的说明了Client与DataNode和NameNode的关系。
Name Node
提供文件目录树服务,也常被其他分布式文件系统称为“元数据服务器”
看看name node都存储了些什么文件:
NameNode 将文件系统的修改按日志的形式存储。
在启动的时候,NameNode从fsimage中读取HDFS状态,然后将edits的内容归并到fsimage中。
向HDFS写入新的内容,可发现只有current/edits.new修改时间变化,说明新纪录附加到currrent/edits.new末尾。
重新启动HDFS,可发现上次启动前current的内容移动到了启动后的previous.checkpoint。重启后,current和image都是新内容。
Secondary NameNode
文档上说是“过时的”,建议使用“checkpoint Node”和“backup Node”。
从stable(0.20.203)的代码看还是使用secondaryNameNode,也许development的代码使用了checkpoint。
看来代码和文档还没有匹配上,呵呵。不论怎样,先看看它产生的内在需求。
前面所述,NameNode仅在启动阶段归并edits内容到fsimage。
假如是一个长时间运行的系统,edits文件有可能非常巨大,导致NameNode重启时的归并edits时间很长。
Secondary NameNode就是为解决这个问题,保持edits文件足够小,基本方法就是周期性的:
配置和启动SecondaryNameNode很简单:
实例,
conf/core-site.xml指定NameNode为192.168.16.62,
conf/masters指定一个SecondaryNameNode 192.168.15.63
conf/slaves指定两个DataNode 192.168.15.63 192.168.15.64
#bin/start-all.sh
starting namenode, logging to /mnt/hadoop-0.20.203.0/bin/../logs/hadoop-root-namenode-U1.out
192.168.15.64: starting datanode, logging to /mnt/hadoop-0.20.203.0/bin/../logs/hadoop-root-datanode-U3.out
192.168.15.63: starting datanode, logging to /mnt/hadoop-0.20.203.0/bin/../logs/hadoop-root-datanode-U2.out
192.168.15.63: starting secondarynamenode, logging to /mnt/hadoop-0.20.203.0/bin/../logs/hadoop-root-secondarynamenode-U2.out
starting jobtracker, logging to /mnt/hadoop-0.20.203.0/bin/../logs/hadoop-root-jobtracker-U1.out
192.168.15.64: starting tasktracker, logging to /mnt/hadoop-0.20.203.0/bin/../logs/hadoop-root-tasktracker-U3.out
192.168.15.63: starting tasktracker, logging to /mnt/hadoop-0.20.203.0/bin/../logs/hadoop-root-tasktracker-U2.out
Rack Awareness Replicas Placement
这个特性很好,说白了就是在放置副本的时候兼顾网络拓扑。
因为,有可能都不能访问到整个机架上的任何机器,比如机架掉电,机架switch或者路由损坏。
相当于将副本放置到关联少的,尽可能隔离的机器上。
本次结语
HDFS具有“单一元数据服务器,多数据服务器”的典型结构。
下次看看MapReduce与HDFS如何结合的。