当前位置:Gxlcms > mysql > hadoop深入研究:(一)hdfs介绍

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

时间:2021-07-01 10:21:17 帮助过:38人阅读

转载请注明出处: 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 查看评论

人气教程排行