-
Hama
概况
Hama
是基于
BSP(Bulk
Synchronous Parallel)
计算技术的并行计算框架,用于大量的科
学
计算(比如矩阵、图论、网络等)
。
BSP
计算技术最大的优势是加快迭代,在解决最小路径
等问题
中可以快速得到可行解()
。同时,
Hama
< br>提供简单的编程,比如
flexible
模型、传统
p>
的消息传递模型,而且兼容很多分布式文件系统,比如
HDFS
p>
、
Hbase
等。用户可以使用现
有的
Hadoop
集群进行
Hama BSP
.
现在
Hama
最新的版本为
2012
年
6
月
31
号发行的这是
Hama
做为
Apache
顶级项目
后首次发布的版本,该版本包含两个显着的新特性,分别是消息压缩器
和完整的
Google
Pregel
克隆,另外在计算系统性能和可持续性上都得以提升。
Hama
结构
Hama
主要有三部分构成:
BSPMaster
、
GroomServers
和
p>
Zookeeper
。与
Hadoop
p>
结构
很相似,但没有通信和同步机制的部分。
Hama
的集群由一个
BSPMa
ster
和多个互不关联的
GroomServer
作计算结点组成,
HDFS
和
Zookeeper
都可以是独立的集群。
启动从
BSPMaster
开始,
如果是
master
会启动
BSPMaster
、
GroomServer
两个进程,如果只是计
算结点则只会启动
GroomServer
,启动
/
关闭脚本都是
Master
机器远程在
GroomServer
机器上执行。
BSPMaster
BSPMaster
即集群的主,
负
责了集群各
GroomServer
结点的管理与作业的调度,
就我所
知它还存在单点的问题。
相当于
Hadoop
的
JobTracker
或
HDFS
的
NameNode
。
其基本作用如
下:
1.
维持<
/p>
Groom
服务器状态。
2.
维护
su
persteps
和集群中的计数器。
3.
维护
Jo
b
的进度信息。
4.
调度作业和任务分配给
Groom
服务器
5.
分配执行的类和配置,整个
Groom
服务器。
6.
为用户提供集群控制接口(
Web
和基于控制台)
。
GroomServer
<
/p>
GroomServer
是一个
proc
ess
,通过
BSPMaster
启动
BSP
任务。每一个
Groom
都有
BSPMaster
通信,可以通过
p>
BSPMaster
获取任务,报告状态。
GroomServer
在
HDFS
或
者其他
文件系统上运行,通常,
GroomServer
与与数据结点在一个物理结点上运行,以保证获得最
佳性能。
Zookeeper
Zookeeper
用来管理
BSPPeer
的同步,用于实现
Barrier
Synchron
isation
机制。在
ZK
上,
p>
进入
BSPPeer
主要有进入
Barrier
和离开
Barrier
操作,所有进入
Barrier
的
Peer
会在
zk
上创
建一个
EPHEMERAL
的
node
(
/bsp/JobID/Superste
p NO./TaskID
)
,
最后一
个进入
Barrier
的
Peer
p>
同时还会创建一个
ready
node(/bsp/JobID/Superstep
NO
./ready)
,
Peer
进入阻塞
状态等待
zk
上所有
task
的
node
都删除后退出
Barrier
BSP Programming
Model
BSP(Bulk Synchronous Parallel
,整体同步并行计算模型
)
是英国计算机科学家
Viliant
在上
世纪
80
年代提出的一种并行计算模型。
Google<
/p>
发布的一往篇论文
(
《
< br>Pregel:
A
System
for
Large
-
Scale Graph
Processing
》
)
使得这一概
念被更多人所认识,据说在
Google 80%
的程序运
p>
行在
MapReduce
上,
20%
的程序运行在
Pregel
< br>上。和
MapReduce
一样,
Google
并没有开源
Pregel
,
Apache
按
Pregel
p>
的思想提供了类似框架
Hama
。
Hama
BSP
是基于大容量同步并行模型,利用分布式节点计算大量步骤。通常,
BSP
程
序包含一序列的
superstep
。每一个
superstep
包含三个步骤:
Local computation
Process communication
Barrier synchronization
Bulk Synchronous Parallel
Model()
Hama
提供用户自
定义的函数
bsf()
,通过
bsf<
/p>
函数,用户可以编写自己的
BSP
程序,
并
且
BSP
程序可以控制整个程序的并
行部分,意味着
bsf
函数不仅仅是程序普通的一部分。在
p>
版本中,完成
BSF
函数,仅仅需要达成通
信接口协议,这样就可以获得更多的参数。
BSP
是一种跟
MapReduce
平行的一种并行计算
方法
,
如果说
MapReduce<
/p>
是把底
层的数据传输和分配完全对用户屏蔽了的话
,
那
BSP
就是一种要对底
层的数据传
输和分配进行手动编程规定的模式了
.
这点上跟
MPI(
一种古老的并行模式
)
很像
.
每个计算节点进行并行计算
,
在
p>
communication
的阶段进行收发
,
将运行结果记录在
barrier
上
,
等到所有计算节点运行到
barrier,
< br>所有的计算节点在继续运行。通过这些原理可
以理解为三个步骤:
send, sync, receive.
Communication
在
p>
bsp
函数中,用户可以使用
commun
ication
函数通过使用
BSPPeerProtocol
完成多种
操作,
BSF
通信标准库中会提供多种
communication
函数
:
Function
put(BSPMessage msg)
getCurrentMessage()
getNumCurrentMessages()
sync()
getPeerName()
Description
Puts a message
to local queue
Returns a received
message
Returns the number of received
messages
Barrier synchronization
Returns a peer’s hostname
send(String peerName, BSPMessage msg)
Sends a message to another peer