学习云计算,必然得了解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. vSphere6提示已弃用VMFS卷的解决方法

    Deprecated VMFS volume(s) found on the host. Please consider upgrading volume(s) to the latest versi ...

  2. 默认构造方法并非总是public的

    以前印象中一直有一个概念,说"如果没有提供构造方法,java将自动添加一个空的public的构造方法".现在看来,有2个问题,一,默认构造方法未必是public的,二,默认构造方法 ...

  3. tomcat的CATALINA_HOME可以不用设置

    不配置tomcat的环境变量也是可以运行的 用记事本打开tomcat/bin目录下面的startup.bat 在文本的前一部分有下面的脚本代码 rem Guess CATALINA_HOME if n ...

  4. Oracle安装:64位电脑安装64位Oracle、PLSQL步骤

    步骤: 1.安装64位Oracle 2.安装64位PLSql 3.将11.2.0.win32的压缩包解压,放在Oracle的安装目录:product下 4.配置PLSQL参数: Tools -> ...

  5. html给div加超链接的方法

    1.通过window.open函数 <div onclick="window.open('www.baidu.com')">在新窗口跳转至百度</div> ...

  6. 算法入门笔记------------Day2

    1.开灯问题 有n盏灯,编号为1-n,第一个人把所有灯打开,第二个按下所有编号为2的倍数的开关(这些灯都被关掉),第三个人按下所有编号为3的倍数的开关,依次类推,一共有k个人,问最后有哪些灯开着?输入 ...

  7. 移动Web开发中遇见的问题以及解决方法(不断更新中)

    20160524 问题:在使用des加密数据后,作为url参数传递发现,系统会把+自动变为空格,以至于解密的时候出现问题. 例如:uKsRUwdU6+83+J9WfgfflA== 传到服务端后 变为u ...

  8. android目录介绍

  9. ios申请真机调试( xcode 5)详细解析

    已经有开发证书的直接跳过第一步 第一步:申请"开发证书" 进入苹果开发者99美元账号: 选择:Certificates, Identifiers & Profiles 关于 ...

  10. XAF Spreadsheet property Editor

    https://www.devexpress.com/Support/Center/Question/Details/T371232