学习云计算,必然得了解Hadoop,而Hadoop中的HDFS(分布式文件系统)是一个基础,接下来就写一下我所理解的HDFS。

  有一个很有特别的村庄,村庄里面有一个很牛逼的人,叫做“大哥”,村民们都信得过他,于是会把自己家的粮食、农具等等各种各样的东西“打包成一个大的包裹”让“大哥”给存着,等用的时候,再去找大哥要。我们可以姑且简单的认为:“大哥”就是服务器Server,村民们是客户端Client,而村民打包的一个大的包裹就是一个很大的文件

  一开始大家相安无事,后来别的村的人(更多的Client)觉得在自己家里放那么多东西,太占地方,于是都找“大哥”,要把东西放他这儿。“大哥”人也算好,来者不拒,可是自己家里就那么多点儿地方,放不下了怎么办?

  于是“大哥”想到一个办法,扩大自己家的地方(服务器扩大硬盘容量),这样就很好的解决了问题。

  可是“大哥”的名气越来越多,往他这儿存东西的人越来越多,无休止的的扩大自己家的地方,也不是一个办法啊。“大哥”开始拼命读书,请教各路朋友支招,最终一个叫做“攻城狮”朋友一下点中要害:“大哥,你现在遇到的问题叫做大数据,有人也称为海量数据,有人也称为bigdata”。“兄台高见,可有破解之道?” “光靠扩充自己的家地方也不是办法,还得想到一个万全之策”。他们经过日夜思考,终于想到一个绝妙的办法,且听我慢慢道来。

  大哥雇佣了其他一些人,我们姑且叫他们“小弟们”,他们是“主从的关系”。小弟们家里会有些地方,这样村民们往大哥这儿存东西的话,大哥并不用自己家的地方,而是放在别的小弟那儿,随着村民们存的东西越来越多,大哥只需要多雇佣点儿小弟就行了。

  上面就是“大哥”和“攻城狮”想到的一个万全之策,他们称之为HDFS,而大哥为了小弟们称呼方便,给自己起了一个花名,叫做“NameNode”,也给小弟们每个人起了个花名:DataNode1、DataNode2、DataNode3、……。对于村民(客户端)来说,我需要存东西到你那儿,直接给你就行了,不用考虑太多,可是大哥心酸,又怎可知。我们看看大哥是如何很好的运作HDFS的。

  假设有个村民要存一个大包裹给大哥,这个大包裹有多大呢,称了称,大概是“6GB”。接下来是大哥面对这“6GB”的东西,思考的一些问题和解决的方法。

1.这么大东西怎么存呢?

  他把这么一个大的东西,切分成了64MB大小的块(Block),给小弟们(DataNode)分出去,而大哥(DataNode)脑子(内存)里面记下各个块都分给了哪个小弟。这样人家村民来取东西的时候,大哥“NameNode”会告诉村民各个块(Block)在哪个小弟手里,然后直接找小弟要就行了。

2.光记在脑子里不行,要是忘了怎么办?

      村民的各种行为(创建、修改、删除)等操作时,大哥不能仅仅记在脑子里,还准备了两个本子(文件),一个叫做EditLog,一个叫做FSImage。无论村民新存东西、修改自己存的东西、删除自己存的东西,大哥“NameNode”都会在EditLog记下一笔。

  万一EditLog或FSImage丢了怎么办?于是他找了个管家,叫做“SecondaryNameNode”,帮他也存着这两个文件,切记,虽然也有NameNode称号,但他仅仅是“管家”,不是“大哥”,要是大哥死了,管家也担当不了大哥的位置。

3.存数据块的小弟“挂了”怎么办呢?

(1)怎么知道小弟“挂了”呢?

  为了保证小弟们好好干活,小弟(DataNode)需要周期性的向大哥(NameNode)汇报情况,称为“心跳信号heartbeat”,如果周期性的收到信号,表示小弟没事;如果没有收到呢,则说明小弟异常了。  

(2)大哥的应对策略是什么呢?

  大哥把大文件分成一个个64MB的小块给了小弟,万一哪个小弟挂了,这个数据块不就丢失了,村民还不得堵我家门。因此大哥把某一个块给其中一个小弟前,会先复制出两份,叫做“副本”,给其他小弟也存着,这种冗余存储,保证了数据的安全性。

(3)副本给哪些小弟呢?

一个数据块默认的3个副本,不是随便给哪个小弟的,一般给符合下面要求的小弟:

  1)第一个副本给任意一个小弟(DataNode)。

  2)第二个副本给第一个小弟的邻居。(同一个机架上

  3)第三个副本给其他小弟,离前面两个都远点儿。(不同机架的DataNode

  备注:同一个机架下的两个服务器带宽比不同机架间两台带宽要大。

(4)副本怎么给小弟

  副本的复制是采用的流水线式复制方法。具体来说:客户端存数据的时候,先把数据写到本地磁盘临时文件中,等写够64MB了,NameNode才会告诉客户端一个DataNode地址,让客户端往里面写数据,第一个DataNode一小部分一小部分的接收数据,然后把接到的数据复制给第二个DataNode,然后第二个DataNode复制给第三个,以这种流水线式的进行副本的复制。

(5)万一有一个小弟挂了怎么办?

  天有不测风云人有旦夕祸福,如果其中一个小弟真挂了,那么现在副本数变成了两个,大哥会再创建一个副本给其他小弟存着,保证副本的数量不少于3个,一切安全第一。

 

尼玛,终于搞定了海量数据存储的问题,大哥雇佣了这么多小弟,不能只存储数据吧,怎么着也得再干点儿别的吧,于是他们又想着去帮助村民去完成他们的一些计算等任务,这个时候,大哥又有了个名字,叫做“JobTracker”,而小弟们又有了个新的名字,叫做“TaskTracker”,又组成了一个新的团队,叫做:MapReduce。

(完)

文档信息

换个角度理解云计算之HDFS的更多相关文章

  1. 换个角度理解云计算之MapReduce

    上一篇简单讲了一下HDFS,简单来说就是一个叫做“NameNode”的大哥,带着一群叫做“DataNode”的小弟,完成了一坨坨数据的存储,其中大哥负责保存数据的目录,小弟们负责数据的真正存储,而大哥 ...

  2. 换个角度理解云计算之MapReduce(二)

    接上篇 3.Combiner操作 前面讲完Map操作,总结一下就是:一个大文件,分成split1~5,对应于Map1~5,每一个Map处理一个split,每一个split的每一行,会用每一个Map的m ...

  3. 深入理解Hadoop之HDFS架构

    Hadoop分布式文件系统(HDFS)是一种分布式文件系统.它与现有的分布式文件系统有许多相似之处.但是,与其他分布式文件系统的差异是值得我们注意的: HDFS具有高度容错能力,旨在部署在低成本硬件上 ...

  4. 以吃货的角度去理解云计算中On-Premise、IaaS、PaaS和SaaS

    了解云计算的一定都听过四个“高大上”的概念:On-Premise(本地部署),IaaS(基础设施及服务).PaaS(平台即服务)和SaaS(软件即服务),这几个术语并不好理解.不过,如果你是个吃货,还 ...

  5. 深入理解hadoop之HDFS

    深入理解hadoop之HDFS 刚刚才写完关于mapreduce的一篇博文,趁热打铁接下来聊聊HDFS.本博文参考资料为HADOOP权威指南第3版完版,博文如有错漏之处,敬请指正. HDFS即Hado ...

  6. 理解云计算的(IaaS PaaS SaaS)

    本文不经允许,不得转载! 云计算技术已经慢慢普及了.我们做技术的有必要学习云计算技术. IaaS:Infrastructure-as-a-Service(基础设施即服务)云计算到来之前,很多企业都是自 ...

  7. 理解云计算三种服务模式——IaaS、PaaS和SaaS

    云计算的服务模式仍在不断进化,但业界普遍接受将云计算按照服务的提供方式划分为三个大类: SaaS(Software as a Service–软件即服务) PaaS(Platform as a Ser ...

  8. 【俗话说】换个角度理解TCP的三次握手和四次挥手

    PS:通俗一点的解释都会在引用块中 Nothing is true, Everything is permitted. 0. 什么是TCP TCP,全称Transmission Control Pro ...

  9. 运用Hadoop能否搭建完整的云计算平台?

    Apache Hadoop 是一个用java语言实现的软件框架,在由大量计算机组成的集群中运行海量数据的分布式计算,它可以让应用程序支持上千个节点和PB级别的数据. Hadoop并不完全代表云计算,所 ...

随机推荐

  1. Maemo平台上如何使用Openvpn

    Maemo是一个开源的智能手机软件平台社区,它是基于Debia的LInux发行版本,Maemo的大多是开源的,并已经制定了Maemo和诺基亚内部的设备与许多开源项目,例如,Debian的Linux内核 ...

  2. 性能测试之--Apache JMeter安装

    Hi,今天给大家分享一下安装JMeter的相关内容~ Apache JMeter 是Apache组织的开源项目,是一个100%纯Java桌面应用,用于压力测试和性能测试. 它能够对HTTP.FTP服务 ...

  3. ASP.NET操作ORACLE数据库之模糊查询

    ASP.NET操作ORACLE数据库之模糊查询 一.ASP.NET MVC利用OracleHelper辅助类操作ORACLE数据库 //连接Oracle数据库的连接字符串 string connect ...

  4. 数据契约(DataContract)

    原文地址:http://www.cnblogs.com/Gavinzhao/archive/2010/06/01/1748736.html 服务契约定义了远程访问对象和可供调用的方法,数据契约则是服务 ...

  5. middleware - bodyparser

    express4之前,bodyparser是express下的一个对象. express4把bodyparser分离出来. 本文中的实例基于以下的这个请求 $.ajax({ url: '/save', ...

  6. C#中调用python方法

    最近因为项目设计,有部分使用Python脚本,因此代码中需要调用python方法. 1.首先,在c#中调用python必须安装IronPython,在 http://ironpython.codepl ...

  7. RHEL6.5中完成播放音乐的“大业”

    参考文章:http://ylw6006.blog.51cto.com/470441/589964 感谢:ylw6006@51CTO 首先,费了不少劲去找到三个文件(还要对应版本el6.i686或el6 ...

  8. Irrlicht 鬼火

    1.下载引擎 2.引入头文件 在VS2010下新建项目,项目->属性->配置属性->VC++目录 在包含目录中:添加 引擎安装目录\include\ 在库目录中:添加 引擎安装目录\ ...

  9. cocos2d-x 2.2.2 android平台移植

    1.完成以上工具的下载安装--cocos2d-x 2.2.2 --eclipse+adt+sdk --ndk 2.创建cocos2d-x工程 在"cocos2d-x-2.2.2\tools\ ...

  10. markdown语法记录

    换行:在结尾加两个空格后回车. 缩进:将输入法切换到全角,两个空格就是两个汉字的大小.