欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

hadoop深入研究:(一)hdfs介绍

程序员文章站 2022-05-26 21:04:23
...

转载请注明出处: http://blog.csdn.net/lastsweetop/article/details/8992505 hdfs设计原则 1.非常大的文件: 这里的非常大是指几百MB,GB,TB.雅虎的hadoop集群已经可以存储PB级别的数据 2.流式数据访问: 基于一次写,多次读。 3.商用硬件: ? ? ? ?hdfs的

转载请注明出处: http://blog.csdn.net/lastsweetop/article/details/8992505

hdfs设计原则

1.非常大的文件:

这里的非常大是指几百MB,GB,TB.雅虎的hadoop集群已经可以存储PB级别的数据

2.流式数据访问:

基于一次写,多次读。

3.商用硬件: ? ? ?

?hdfs的高可用是用软件来解决,因此不需要昂贵的硬件来保障高可用性,各个生产商售卖的pc或者虚拟机即可。

hdfs不适用的场景

1.低延迟的数据访问 ??

hdfs的强项在于大量的数据传输,递延迟不适合他,10毫秒以下的访问可以无视hdfs,不过hbase可以弥补这个缺陷。


2.太多小文件 ? ? ? ? ? ? ?

?namenode节点在内存中hold住了整个文件系统的元数据,因此文件的数量就会受到限制,每个文件的元数据大约150字节

?1百万个文件,每个文件只占一个block,那么就需要300MB内存。你的服务器可以hold住多少呢,你可以自己算算


3.多处写和随机修改 ??

目前还不支持多处写入以及通过偏移量随机修改

hdfs block

为了最小化查找时间比例,hdfs的块要比磁盘的块大很多。hdfs块的大小默认为64MB,和文件系统的块不同,

hdfs的文件可以小于块大小,并且不会占满整个块大小。

查找时间在10ms左右,数据传输几率在100MB/s,为了使查找时间是传输时间的1%,块的大小必须在100MB左右

一般都会设置为128MB


有了块的抽象之后,hdfs有了三个优点:


1.可以存储比单个磁盘更大的文件

2.存储块比存储文件更加简单,每个块的大小都基本相同

3.使用块比文件更适合做容错性和高可用

namenodes和datanodes

hdfs集群有两种类型的节点,一种为master及namenode,另一种为worker及datanodes。


namenode节点管理文件系统的命名空间。它包含一个文件系统的树,所有文件和目录的原数据都在这个树上,这些

信息被存储在本地磁盘的两个文件中,image文件和edit?log文件。文件相关的块存在哪个块中,块在哪个地方,这些

信息都是在系统启动的时候加载到namenode的内存中,并不会存储在磁盘中。


datanode节点在文件系统中充当的角色就是苦力,按照namenode和client的指令进行存储或者检索block,并且周期性

的向namenode节点报告它存了哪些文件的block


namenode节点如果不能使用了,那么整个hdfs就玩完了。为了防止这种情况,有两种方式可供选择

1.namenode通过配置元数据可以写到多个磁盘中,最好是独立的磁盘,或者NFS.

2.使用第二namenode节点,第二namenode节点平时并不作为namenode节点工作,它的主要工作内容就是定期根据编辑

日志(edit log)合并命名空间的镜像(namespace image),防止编辑日志过大,合并后的image它自己也保留一份,等着

namenode节点挂掉,然后它可以转正,由于不是实时的,有数据上的损失是很可能发生的。


hdfs Federation

namenode节点保持所有的文件和块的引用在内存中,这就意味着在一个拥有很多很多文件的很大的集群中,内存就成为了一个

限制的条件,hdfs federation在hadoop 2.x的被实现了,允许hdfs有多个namenode节点,每个管hdfs的一部分,比如一个管/usr,

另一个管/home,每个namenode节点是相互隔离的,一个挂掉不会影响另外一个。


hdfs的高可用

不管namenode节点的备份还是第二namenode节点都只能保证数据的恢复,并不能保证hdfs的高可用性,一旦namenode节点挂掉

就会产生单点故障,这时候要手动去数据备份恢复,或者启用第二节点,新的namenode节点在对外服务器要做三件事:

1.把命名空间的镜像加载到内存中

2.重新运行编辑日志

3.接受各个datanode节点的block报告

在一个大型一点的hdfs系统中,等这些做完需要30分钟左右。


2.x已经支持了高可用性(HA),通过一对namenode热备来实现,一台挂掉,备机马上提供无中断服务

要实现HA,要做三点微调:

1.namenode节点必须使用高可用的共享存储。

2.datanode节点必须象两个namenode节点发送block报告

3.客户端做改动可以在故障时切换到可用的namenode节点上,而且要对用户是无感知的


failover和fencing

将备份namenode激活的过程就叫failover,管理激活备份namenode的系统叫做failover controller,

zookeeper就可以担当这样的角色,可以保证只有一个节点处于激活状态。

必须确认原来的namenode已经真的挂掉了,很多时候只是网络延迟,如果备份节点已经激活了,

原来的节点又可以提供服务了,这样是不行的,防止原来namenode活过来的过程就叫fencing。

可以用STONITH实现, STONITH可以做到直接断电把原namenode节点fencing掉




作者:lastsweetop 发表于2013-5-31 15:31:20 原文链接

阅读:104 评论:0 查看评论

hadoop深入研究:(一)hdfs介绍