1、hama概论 建立在hadoop上的分布式 并行 计算模型。 基于 map/reduce 和 bulk synchronous 的实现框架。 运行环境需要关联 zookeeper、hbase、hdfs 组件。 集群环境中的系统架构由 bspmaster/groomserver (computation engine )、zookeeper (distributed l
1、hama概论
·建立在hadoop上的分布式并行计算模型。
·基于 map/reduce 和 bulk synchronous 的实现框架。
·运行环境需要关联 zookeeper、hbase、hdfs 组件。
·集群环境中的系统架构由 bspmaster/groomserver(computation engine)、zookeeper(distributed locking)、hdfs/hbase(storage systems) 这3大块组成。
如图所示:
·hama中有2个主要的模型:
– 矩阵计算(matrix package)
– 面向图计算(graph package)
·hama项目起源于在2008年5月19日
·hama主要成员 edward j. yoon (高丽棒子)
·hama项目的最大支持者 韩国nhn互联网搜索引擎以及网络游戏公司,貌似中国的百度,详见这里。
2、hama介绍
2008年5月hama被视为apache众多项目中一个被孵化的项目,目前(2010年12月)在hama的项目网站上还没有正式的release版本,作为hadoop项目中的一个子项目,bsp模型是hama计算的核心,并且实现了分布式的计算框架,采用这个框架可以用于矩阵计算(matrix)和面向图计算(grah)、网络计算(network)。
我的废话:
1、如果要深入了解到 hama中采用到的技术体系,需要去阅读一些bsp、mpi、pregel等相关资料,可以有助于对hama项目的了解。
2、看来apache基金会对google未开源的核心技术彻底的做了一个山寨版本,比如我之前提到过关于yahoo山寨了google的那些技术。
3、hama中依然存在spfo的单点问题,如果主节点bspmaster挂了,依然全挂,当然有其他的解决办法,不过这里主要想指出的是hama暂时还没有设计到这点。
4、hama在mapreduce的基础上实现了2种算法,iterative 和 block ,其中iterative比较简单,而block相对复杂些。
3、关于bsp模型
hama中最关键的就是bsp(bulk synchronous parallel-“大型”同步模型)模型, bsp的概念由valiant(1990)提出的,“块”同步模型,是一种异步mimd-dm模型,支持消息传递系统,块内异步并行,块间显式同步,该模型基于一个master协调,所有的worker同步(lock-step)执行, 数据从输入的队列中读取, 该模型的架构如图所示:
另外,bsp并行计算模型可以用 p/s/g/i 4个参数进行描述:
· p为处理器的数目(带有存储器)
· s为处理器的计算速度
· g为每秒本地计算操作的数目/通信网络每秒传送的字节数,称之为选路器吞吐率,视为带宽因子 (time steps/packet)=1/bandwidth
· i为全局的同步时间开销,称之为全局同步之间的时间间隔 (barrier synchronization time)
那么假设有p台处理器同时传送h个字节信息,则g•h就是通信的开销。同步和通信的开销都规格化为处理器的指定条数。
bsp计算模型不仅是一种体系结构模型,也是设计并行程序的一种方法。bsp程序设计准则是 bulk同步 (bulk synchrony),其独特之处在于超步(superstep)概念的引入。一 个bsp程序同时具有水平和垂直两个方面的结构。从垂直上看,一个bsp程序由一系列串行的超步(superstep)组成,如图所示:
这种结构类似于一个串行程序结构。从水平上看, 在一个超步中, 所有的进程并行执行局部计算。一个超步可分为三个阶段 ,如图所示:
1 )本地计算阶段, 每个处理器只对存储本地内存中的数据进行本地计算。
2 )全局通信阶段, 对任何非本地数据进行操作。
3 )栅栏同步阶段, 等待所有通信行为的结束。
bsp模型相对于其他两种模型而言, 具有如下两个方面的优点:
•mpi 和 pvm两种并行计算模型,依赖于接收和发送 的操作对。这样通信方式容易导致上层应用程序产生死锁,而bsp并行计算库是一个程序划分为超步(superstep),使得死锁不再发生。
•bsp模型由于其本身的特点, 使得对于程序的正确性和时间的复杂性预测成为可能。
4、apache hama与google pregel
hama类似google发明的pregel,如果你听过google pregel这个利器的话,那么就对bsp计算模型不会陌生,google的pregel也是基于bsp模型,在google的整个计算体系中有20%的 计算是依赖于pregel的计算模型,google利用pregel实现了图遍历(bfs)、最短路径(sssp)、pagerank计算,我猜想 google的google me 产品很有可能会大量采用pregel的计算方式,用pregel来绘制google me产品中sns的关系图。
google的pregel是采用gfs或bigtable进行持久存储,google的pregel是一个master-slave主从结构,有一个节点扮演master角色,其它节点通过name service定位该顶点并在第一次时进行注册,master负责对计算任务进行切分到各节点(也可以自己指定,考虑load balance等因素),根据顶id哈希分配顶点到机器(一个机器可以有多个节点,通过name service进行逻辑区分),每个节点间异步传输消息,通过checkpoint机制实行容错(更高级的容错通过confined recovery实现),并且每个节点向master汇报心跳(ping)维持状态。
hama是apache中hadoop的子项,所以hama可以与apache的hdsf进行完美的整合,利用hdfs对需要运行的任务和数据进行持久化存储,也可以在任何文件系统和数据库中。当然我们可以相信bsp模型的处理计算能力是相对没有极限的特别对于图计算来说,换句话说bsp模型就像mapreduce一样可以广泛的使用在任何一个分布式系统中,我们可以尝试的对实现使用hama框架在分布式计算中得到更多的实践,比如:矩阵计算、排序计算、pagerank、bfs 等等。
5、hama architecture
apache的hama主要由三个部分组成:bspmaster,groomservers和zookeeper,下面这张图主要概述了hama的整体系统架构,并且描述了系统模块之间的通讯与交互。hama的集群中需要有hdfs的运行环境负责持久化存储数据(例如:job.jar),bspmaster负责进行对groom server 进行任务调配,groom server 负责进行对bsppeers进行调用 程序进行具体的调用,zookeeper负责对groom server 进行失效转发。
bspmaster
在apache hama中bspmaster模块是系统中的一个主要角色,他主要负责的是协同各个计算节点之间的工作,每一个计算节点在其注册到master上来的时候会分配到一个唯一的id。master内部维护着一个计算节点列表,表明当前哪些计算节点出于alive状态,该列表中就包括每个计算节点的id和地址信息,以及哪些计算节点上被分配到了整个计算任务的哪一部分。master中这些信息的数据结构大小取决于整个计算任务被分成多少个partition。因此,一台普通配置的bspmaster足够用来协调对一个大型计算。
下面我们来看看bspmaster做了哪些工作:
• 维护着groom服务器的状态。
• 控制在集群环境中的superstep。
• 维护在groom中job的工作状态信息。
• 分配任务、调度任务到所有的groom服务器节点。
• 广播所有的groom服务器执行。
• 管理系统节点中的失效转发。
• 提供用户对集群环境的管理界面。
一个bspmaster或者多个grooms服务器是通过脚本启动的,在groom服务器中还包含了bspeer的实例,在启动groomserver的时候就会启动了bsppeer,bsppeer是整合在grommserver中的,grommserver通过prc代理与bspmaster连接。当bspmaster、groomserver启动完毕以后,每个groomserver的生命周期通过发送“心跳”信息给bspmaster服务器,在这个“心跳”信息中包含了grommserver服务器的状态,这些状态包含了能够处理任务的最大容量,和可用的系统内存状态,等等。
bspmaster的绝大部分工作,如input ,output,computation,saving以及resuming from checkpoint,都将会在一个叫做barrier的地方终止。master会在每一次操作都会发送相同的指令到所有的计算节点,然后等待从每个计算节点的回应(response)。每一次的bsp主机接收心跳消息以后,这个信息会带来了最新的groom服务器状态,bspmaster服务器对给出一个回应的信息,bspmaster服务器将会与groom 服务器进行确定活动的groom server空闲状态,也就是groom 服务器可资源并且对其进行任务调度和任务分配。 bspmaster与groom server两者之间通讯使用非常简单的fifo(先进先出)原则对计算的任务进行分配、调度。
groomserver
一个groom服务器对应一个处理bspmaster分配的任务,每个groom都需要与bspmaster进行通讯,处理任务并且想bspmaster处理报告状态,集群状态下的groom server需要运行在hdfs分布式存储环境中,而且对于groom server来说 一个groom 服务器对应一个bsppeer节点,需要运行在同一个物理节点上。
zookeeper
zookeeper这里就不多提了,可以参考我之前写的几篇文章,在apache hama项目中zookeeper是用来有效的管理bsppeer节点之间的同步间隔(barrier synchronisation),同时在系统失效转发的功能上发挥了重要的作用。
6、hama对bsp模型的实现
在一个bsp计算模型的程序中包含了一个supersteps步骤,每一个superstep由以下3个体系:
• 本地计算
• 进程通信
• 同步间隔
public class bspeaxmple {
public static class mybsp extends bsp {
@override
public void bsp(bsppeer bsppeer) throws ioexception, keeperexception,
interruptedexception {
// 1. do something locally
// 2. sends/receives data to/from neighbor nodes
bsppeer.send(peername, msg);
while ((message = bsppeer.getcurrentmessage()) != null) {
byte[] data = message.getdata();
}
// 3. barrier synchronization
bsppeer.sync();
}
@override
public configuration getconf() {
return conf;
}
@override
public void setconf(configuration conf) {
this.conf = conf;
}
}
// bsp job configuration
public void main(string[] args) throws exception {
bspjob bsp = new bspjob(new hamaconfiguration(), bspeaxmple.class);
// set the job name
bsp.setjobname("my bsp job");
bsp.setbspclass(mybsp.class);
// submit job
bspjobclient.runjob(bsp);
}
}
接下来将会介绍 hama的具体的用例和安装配置说明,待续。
感谢您的阅读。
相关文章:
apache zookeeper入门2
apache zookeeper入门1
apache zookeeper入门3
–end–
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:)!