今天群里提出了一个有趣的问题:
今天群里提出了一个有趣的问题:
前面两篇(一)(二)解决方案分别从静态数据(Invariant Data)分离以及分布式缓存来优化迭代式Mapreduce,但是由于Mapreduce天生的缺陷,再加上分布式缓存是分布存放在本地磁盘的,没有一个好的读取方案的话,就会大大提高了每个task的磁盘IO次数。这篇博客算是迭代式Mapreduce的收尾了,来整体分析一下我的解决方案和Haloop方案吧。
昨天分析了ipc包下的RPC、Client类,今天来分析下ipc.Server。Server类因为是Hadoop自己使用,所以代码结构以及流程都很清晰,可以清楚的看到实例化、停止、运行等过程。
上篇博客分析了ipc包下的RPC类,这篇博客来看看Client类吧。
Hadoop是典型的单元数据服务器模型,它将控制流与数据流分离开来,同时两种流的通信机制也不一样,分别为RPC和流式通信,这篇博客主要介绍Hadoop的RPC流程……。关于RPC的简介可以参考:百度百科。
此篇文章主要是前一篇的后续,主要讲Hadoop的分布式缓存机制的原理与运用。
分布式缓存在MapReduce中称之为DistributedCache,它可以方便map task之间或者reduce task之间共享一些信息,同时也可以将第三方包添加到其classpath路径中去。Hadoop会将缓存数据分发到集群的所有准备启动的节点上,复制到在mapred.temp.dir中配置的目录。
回溯法是一个即带有系统性又带有跳跃性的搜索算法,它在问题的解空间树中,按深度优先搜索策略,从根结点出发搜索解空间树。算法搜索至解空间树的任一结点时,先判断该结点是否包含问题的解。如果肯定不包含,则跳过对该结点为根的子树的搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先策略搜索。