Hama介绍、安装以开发环境搭建(以备后用)
一、Hama介绍
Apache Hama是一个纯BSP(Bulk Synchronous Parallel)计算框架,模仿了Google的Pregel。用来处理大规模的科学计算,特别是矩阵和图计算。
BSP概念由Valiant(2010图灵奖获得者)在1990年提出,具体参看 wikipedia 。Google在2009年发表了<Pregel: A System for Large-Scale Graph Processing>论文,在分布式条件下实现了BSP模型。
二、Hama安装
安装环境:
OS: Ubuntu
JAVA: jdk1.6
Hadoop: hadoop-1.0.3
安装Hama之前,应该首先确保系统中已经安装了hadoop,实验室集群使用的版本为hadoop-1.0.3
1、下载及解压Hama文件,下载地址:http://hama.apache.org/index.html,选用的是目前最新版本:hama0.6。解压之后的存放位置自己设定,本人将其解压至/home目录下,更名为hama。
2、修改配置文件
1)hama-site.xml内容如下,每台机器具有相同的配置:(因集群中并没有单独的zookeeper,就没有对其进行设定)
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>bsp.master.address</name> <value>dm4:40000</value> <description>The address of the bsp master server. Either the literal string "local" or a host:port for distributed mode </description> </property> <property> <name>fs.default.name</name> <value>hdfs://dm4:9000/</value> <description> The name of the default file system. Either the literal string "local" or a host:port for HDFS.不建议填写为“dm4:9000/” </description> </property> <property> <name>hama.zookeeper.quorum</name> <value>dm4</value> <description>Comma separated list of servers in the ZooKeeper Quorum. For example, "host1.mydomain.com,host2.mydomain.com,host3.mydomain.com". By default this is set to localhost for local and pseudo-distributed modes of operation. For a fully-distributed setup, this should be set to a full list of ZooKeeper quorum servers. If HAMA_MANAGES_ZK is set in hama-env.sh this is the list of servers which we will start/stop zookeeper on. </description> </property> </configuration>
2)在hama-env.sh文件中加入JAVA_HOME变量,由于每台机器jdk的位置不同,各台机器要单独配置
3)配置groomservers文件。hama与hadoop具有相似的主从结构,该文件存放从节点的IP地址,每个IP占一行,集群以dm4为主节点,dm1和dm2节点宕机待启动,这里只将dm3、dm5、dm6和dm7这四台机器的IP地址填入文件中。由于部分机器外网可以访问,这里就不粘贴IP地址了,免得引起不必要的麻烦。
4)hama0.6自带的hadoop核心包为1.0.0,与集群hadoop1.0.3不一致,需要进行替换,具体是在hadoop的lib文件夹下找到hadoop-core-1.0.3.jar和hadoop-test-1.0.3.jar,拷贝到hama的lib目录下,并删除hadoop-core-1.0.0.jar和hadoop-test-1.0.0.jar两个文件,每台主机都要执行这一操作。
Hama启动
启动程序命令(启动之前需启动hadoop)
bin/start-bspd.sh
通过web UI 查看hama的相关情况: http://***.***.***.***:40013/bspmaster.jsp (***.***.***.***代表主节点IP,即dm4的IP),运行结果如下:
实例
运行例子程序
这里我们选用Pagerank例子程序。
首先上传数据到HDFS,数据的格式为:
Site1 Site2 Site3
Site2 Site3
Site3
执行Hama,其中/tmp/input/input.txt和/tmp/pagerank-output分别为输入文件和输出文件夹。
root@dm4:/home/hama# bin/hama jar hama-examples-0.6.0.jar pagerank /user/root/testdata/pagelink /user/root/output/pagerank-output
执行结果如下:
三、开发环境搭建
使用eclipse搭建开发环境。
1、新建一个普通的java工程,将一下jar包添加至工程。
commons-configuration-1.7.jar ; commons-httpclient-3.0.1.jar ; commons-logging-1.1.1.jar; commons-lang-2.6.jar ; hadoop-core-1.0.3.jar ; hama-*.jar (core、examples、graph、ml); zookeeper-3.4.5.jar.
2、工程中新建一个文件夹,命名为conf,右键——build path——Use as Source Folder,将hama的配置文件拷贝至该文件夹中。
3、测试。新建一个类,内容如下:
public static void main(String[] args) throws IOException,InterruptedException, ClassNotFoundException { PiEstimator.main(args); }
运行结果如下:
至此,利用hama进行BSP研究与开发的准备工作已经完成。
(2013.6.9 补充:目前还没有针对远程调试的插件,可以在Hama源码上做修改,做单机debug ! 运行没问题的情况下再打包,放在分布式环境下运行 ! )
其他细节可参考资料1-5。
另:
可是使用Whirr将hama部署在EC2等其他云环境下。Whirr是apache基金会下的项目:一个运行云服务的库。有三个主要特点:
1、独立于所有的云环境的情况下运行服务。因此,并不需要担心各个服务提供商所具有的不同的服务风格。
2、一个常见的服务API。针对不同的服务提供不同的服务细节。
3、智能缺省服务。缺省的情况下,系统有较好的运行速度,同时,也允许根据用户需要自定义配置文件。
具体细节可以参考:http://whirr.apache.org/
参考资料:
1、http://wiki.apache.org/hama/CompatibilityTable
2、http://www.cnblogs.com/DingaGa/archive/2012/12/16/2820331.html
3、http://www.oriovo.com/cloud/hama-cluster.html
4、http://hama.apache.org/index.html
5、http://wiki.apache.org/hama/GettingStarted