王炸科技头像

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

来源:
       

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

  转载请注明出处:http://blog.csdn.net/lastsweetop/article/details/8992505hdfs设计原则

  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.多处写和随机修改??

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

  为了最小化查找时间比例,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节点工作,它的主要工作内容就是定期根据编辑

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

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

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

  限制的条件,hdfsfederation在hadoop2.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的系统叫做failovercontroller,

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

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

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

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

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

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

hadoop深入研究:(一)hdfs介绍-第1张图片

  原文地址:hadoop深入研究:(一)——hdfs介绍,感谢原作者分享。