`
Funine
  • 浏览: 13430 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

云计算之初识Hadoop——站上山巅看清上山的路

 
阅读更多

云计算、大数据、神经计算、生物计算、人工智能、虚拟现实等等,这些听上去很高大上,很牛逼的名词,学习起来,就让人油然的产生一种望而却步的感觉,其实背后隐藏着的只是自信心的不足。我们从小学习一直走的是一条,打基础,再打基础,继续打基础的道路,可是前面的那些高大上名词的基础是哪些?你打够呢吗?我们从小的学习,就像爬山一样,从山脚顺着一条路,往上一步一步的爬,有的人爬一小段就不行了,就下山了,有的爬到了半山腰,但却不知前路在何方,甚至怀疑这条路到底有没有柳暗花明的那么一天,在迷茫,找寻之中慢慢磨去了那些为之不多,有限的意志力,也只能中途折返。我们何不先山巅之上,顺势往眺望山下,便能发现上山的路有无数条,看清路之后再找到你所要走过的台阶,翻过的巨石。

废话不多说,下面正式进入,我对于Google三大论文中的The Google File System Google MapReduce的理解。

首先,我想说云计算是个什么东西?对于到底什么是云计算,至少可以找到100种解释。现阶段广为接受的是美国国家标准与技术研究院(NIST)定义:云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。可能生硬的概念看着没意思,也并不能理解,其实云计算一直就在我们身边,像是我们平时用的最多的百度云盘,360云盘等等之类的一些云存储服务;还有便是我们用QQ发送的离线文件,也是存储在云端的;我们学校选课的时候可能经常遇到过服务器一下子爆满,崩掉的情况,那么此时如果学校在这几天租用阿里云服务器或是其他的服务器等等,便能轻松承受住瞬间的大批量访问,也是说云服务器也是应用之一。这是现阶段的云计算实际用到的,可能以后我们云计算结合物联网,物理ID等等,可能你就不再需要什么笔记本,手机之类的了,你只需要在提供这种机器上用你的手指,或是虹膜,通过物理ID的识别,可能一下子就能成为你的手机,或是你的电脑,一切的一切都在云端进行,在云端进行存储,完成运算。未来云计算的强大的功能的实现,就像十几年的前大哥大时代,看待如今的智能手机一样。科技发展是飞速的,只要在网络带宽足够快,以及物理ID,物联网的实现的情况下,那么活在云端的生活就不远了。

其次,我再来介绍一下The Google File System(GFS)GFS是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,并提供容错功能。它可以给大量的用户提供总体性能较高的服务。由于搭建这个云平台的硬件设备,都是廉价,并且是很普通的,那么组件失效是常态而不是一种异常现象,所以GFS在设计的时候,所以迅速地侦测、冗余并恢复失效的组件——容错性要好;由于日益增加的产生的数据量需要处理,当经常要处理快速增长的、包含数以万计的对象、长度达TB的数据集时,我们很难管理成千上万的KB规模的文件块,即使底层文件系统提供支持。因此,设计中操作的参数、块的大小必须要重新考虑。对大型的文件的管理一定要能做到高效,对小型的文件也必须支持,但不必优化——大数据的处理;要考虑到可能在云端的一个文件同时被多个客服端访问使用,处理——交互的灵活性。所以在GFS设计的时候,采用GFS Master单独的节点来管理GFS中的所有元数据,通过记录日志的操作,以及自身影子的存在,在Master服务器组件失效时,可实现迅速恢复;GFS Chunk服务器及是,数据存储的地方,每个文件被分割为数个chunk文件块,每个文件块都是唯一标识的,并且每个Chunk文件块默认情况,都有三个副本,在其中一个副本的组件出现失效时便会迅速进行复制;GFS Client接口,实现GFSAPI函数,实现Master服务器和Chunk服务器,Master服务器和客户机之间的交互。由于我们经常要处理的数据都是数GB、数TB,所以选择较大Chunk块尺寸(64MB)其优点:减少ClientMaster通讯、减少Master存储元数据的大小Client对一个Chunk能进行多次操作,减少网络IO。那么这个GFS这个文件系统是如何读数据和写入数据的了,读数据:首先,客户端把文件名和程序指定的字节偏移,根据固定的Chunk大小,转换成文件的 Chunk索引,文件名和Chunk索引发送给Master节点。然后,Master节点将相应的Chunk标识和副本的位置信息发还给客户端。客户端会缓存这些信息(客户端不缓存数据,但是会缓存元数据)。最后,客户端发送请求到最近的存储了目标数据的chunkserver,读取chunk。写入数据:1. 客户端向master询问一个拥有租约的chunk,如果没有,master选择一个chunk 建立租约,并返回这个chunk(作为主chunk)和所有的副本chunk的位置信息。 2. 客户端缓存这些chunk的位置信息以避免和master的多次通信。  3. 客户端将数据按照一个优化过的管道推送到所有chunk serer上(不断地选择就近和负载低的节点)。chunk server接收到数据后立即推送到下一个节点。这个节点的顺序是由主chunk生成的(不一定最先推送到主chunk)。  4. 数据推送完成后,发送写请求到主chunk,主chunk通知所有副本chunk执行写请求,副本写完后,通知主chunk,主chunk返回客户端。对于GFS分布式文件系统,我也只是初步的了解,还有很多理解不清晰的地方,欢迎大家讨论交流。

然后,再来介绍一下 GFS MapReduce这种编程模型。首先我们要先弄清楚,MapReduce是干什么用的?我们都知道Google是搜索引擎起家,那么MapReduce就是Google搜索引擎的精华,它就负责词条的信息的提取,和大规模的算法,文字,图像的处理,能在庞大的数PB级别的数据库中,在很短的时间内找出,用户所需要的数据所在。那么MapReduce是一个怎样的工作原理了?MapReduce是由MapReduce两部分组成的。现在我们要使用MapReduce完成一个User Program的一个任务,那么我们首先把任务文件,分为M份,每一份通常有16MB64MB,然后使用fork将用户进程拷贝到集群内其它机器上。第二,user program的副本中有一个称为master,其余称为workermaster是负责调度的,为空闲worker分配作业(Map作业或者Reduce作业),worker的数量也是可以由用户指定的。第三,被分配了Map作业的worker,开始读取对应分片的输入数据,Map作业数量是由M决定的,和split一一对应;Map作业从输入数据中抽取出键值对,每一个键值对都作为参数传递给map函数,map函数产生的中间键值对被缓存在内存中。第四,缓存的中间键值对会被定期写入本地磁盘,而且被分为R个区,R的大小是由用户定义的,将来每个区会对应一个Reduce作业;这些中间键值对的位置会被通报给mastermaster负责将信息转发给Reduce worker。第五,master通知分配了Reduce作业的worker它负责的分区在什么位置(肯定不止一个地方,每个Map作业产生的中间键值对都可能映射到所有R个不同分区),当Reduce worker把所有它负责的中间键值对都读过来后,先对它们进行排序,使得相同键的键值对聚集在一起。因为不同的键可能会映射到同一个分区也就是同一个Reduce作业(谁让分区少呢),所以排序是必须的。最后,当所有的MapReduce作业都完成了,master唤醒正版的user programMapReduce函数调用返回user program的代码。也就是,Map作业处理一个输入数据的分片,可能需要调用多次map函数来处理每个输入键值对;Reduce作业处理一个分区的中间键值对,期间要对每个不同的键调用一次reduce函数,Reduce作业最终也对应一个输出文件。

最后,再来谈一下Hadoop是什么。Hadoop是一个由Apache基金会所开发的分布式系统基础架构。GoogleGFS分布式系统只是谷歌内部使用的并不是开放的,因此Apache基金会用Java实现了一个开源版本,支持FedoraUbuntuLinux平台。Hadoop是项目的总称。主要是由HDFSMapReduce组成。HDFSGoogle File SystemGFS)的开源实现。MapReduceGoogle MapReduce的开源实现。目前像阿里、百度、京东等等都是通过Hadoop来实现的自家的云平台的搭建,淘宝的阿里云的进步一年一年的双十一的业绩,在571亿成交额的背后,是多么强大的服务器技术,还有今年春运期间对于12306网站服务器的分流。阿里云就是Hadoop技术来实现的。

 

云计算的学习,肯定是一条漫长而又艰辛的路,但还是那句话,你既然选择了开始,就不要轻易选择放弃!相信自己,一定能行!

1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics