Chinaunix首页 | 论坛 | 博客
  • 博客访问: 589208
  • 博文数量: 83
  • 博客积分: 5453
  • 博客等级: 大校
  • 技术积分: 894
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-10 13:51
文章分类

全部博文(83)

文章存档

2015年(2)

2014年(1)

2013年(1)

2012年(3)

2011年(14)

2010年(7)

2009年(7)

2008年(12)

2007年(17)

2006年(19)

我的朋友

分类: 服务器与存储

2011-10-09 17:19:33

本次记录HDFS的设计。

HDFS的适用场景和目标

HDFS来源于Google FS,所以和GoogleFS的设计是一致的。

1 存什么?后端的,海量数据,大数据集(大文件)。小文件已经在前端归并到某个大数据集。

2 用什么存?使用廉价PC硬件,节点容易发生故障,因此需要high fault tolerance。

3 怎么存?

  • 发挥多个节点并行存储的能力,或者负载均衡,因此大文件条带化到多个节点。
  • 海量数据要求可扩展性,简单的一致性模型one-writer。

 

HDFS系统结构

一个NameNode,其他的是DataNode。

Client从NameNode获得文件系统服务,或者说文件元数据,如文件名,目录,路径,权限等。

Client直接从DataNode获得实际数据。

hdfsarchitecture

这个图比较清楚的说明了Client与DataNode和NameNode的关系。

 

Name Node

提供文件目录树服务,也常被其他分布式文件系统称为“元数据服务器”

看看name node都存储了些什么文件:

  • in_use.lock
  • current:
    • fsimage  fstime  VERSION  edits  edits.new  
  • image:
    • fsimage
  • previous.checkpoint:
    • fsimage  fstime  VERSION  edits  edits.new

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文件足够小,基本方法就是周期性的:

  • 从NameNode读取edits和fsimage
  • 归并edits到fsimage
  • 将edits和fsimage返回给NameNode

配置和启动SecondaryNameNode很简单:

  • conf/masters指定的就是SecondaryNameNode
  • bin/start-dfs.sh会启动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如何结合的。

阅读(1237) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~