1、前提:
hama安装前,需要系统已经完成如下操作:
(1) 安装JDK1.6以上版本
(2) 安装Hadoop0.20.x版本(这里我使用的是Hadoop-0.20.2,实际上,Hama仅使用了HDFS)
(3) 安装Zookeeper-3.3.2(Hama自身携带Zookeeper,但是为了彻底了解hama机制,建议自己安装Zookeeper,不要使用Hama自带的Zookeeper)
我的安装调试环境:
三台虚拟机——RedHat Linux 企业版6.0
机器1:域名LENOVO,IP 192.168.56.101
机器2:域名slave1, IP 192.168.56.102
机器3:域名slave2, IP192.168.56.103
关于Hadoop的安装,这里就不废话了,网上有很多教程
2、这里稍微提一下Zookeeper的安装:
Zookeeper的安装教程,在网上也有。
这里提供了已经配置好的Zookeeper-3.3.2的安装包,大家根据自己的安装环境,将ZooKeeper安装包下的conf/zoo.cfg中的域名更改一下就可以了。
server.1=LENOVO:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
需要将所有欲安装zookeeper的机器上都拷贝一份,且存放目录一致
但是需要注意:在Zookeeper_Data文件夹下,有一个myid文件,该文件的内容随着所在主机编号的不同而变化。比如:在LENOVO机器上的zookeeper,其myid的内容为1(因为LENOVO被标记为1号服务器server.1),在slave1机器上的myid,就需要将内容改为2
最后,在/etc/profile文件中,添加如下语句
exportZOOKEEPER_INSTALL=/usr/lily/zookeeper-3.3.2
exportPATH=$PATH:$ZOOKEEPER_INSTALL/bin
这里,我的zookeeper安装路径为/usr/lily/zookeeper-3.3.2
重启系统(或使用”./etc/profile”重载该文件,使更改生效。注意: . 和 /之间有空格)
分别在LENOVO、slave1、slave2上输入zkServer.sh start命令,就可以启动zookeeper集群了(在启动第一个节点时,会报错,提示连接不到其它节点,这是正常的。当所有节点都启动后,就不会报错了)
启动完成后,会发现一个新的进程 QuorumPeerMain
3、安装hama
这里关于Hama有两个文件夹:
HAMA-Project 官网上的最原始的安装包
hama-0.2.0 经过更改调试的安装包(在src/java的源代码中,凡是有//NEU标识的,就代表此处与源代码不同)
由于官网提供的源代码不能直接运行,所以安装时,建议大家安装hama-0.2.0(当然这个
版本也有很多问题,但是最起码可以运行,且可以同时提交两个以上的作业)
hama-0.2.0安装:
我的安装环境:
linux系统
Hadoop-0.20.2
Zookeeper-3.3.2
机器1:域名LENOVO,IP192.168.56.101
机器2:域名slave1, IP 192.168.56.102
机器3:域名slave2, IP192.168.56.103
(1)将hama-0.2.0拷贝到三台机器的指定目录下,如/usr/lily
(2)找到conf/hama-env.sh文件,打开,将
export JAVA_HOME=/usr/java/jdk1.6.0_23的内容,替换为jdk的安装目录(与hadoop相同)
这里,我的jdk安装路径为:/usr/java/jdk1.6.0_23
将export HAMA_MANAGES_ZK的值设置为false,表示在启动hama时,不需要hama启动自带的zookeeper(当然这就需要我们在启动hama之间,手动启动zookeeper集群)
(3)找到conf/hama-site.xml文件,进行如下配置:
<configuration>
<property>
<name>bsp.master.address</name>
<value>LENOVO:40000</value>
//LENOVO为BSPMaster所在的主机域名,40000为端口
<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://LENOVO:9000/</value>
//此处的值,必须与Hadoop的配置文件中保持一致
<description>
The name of the default file system. Either the literal string
"local" or a host:port for HDFS.
</description>
</property>
<property>
<name>hama.zookeeper.quorum</name>
<value>LENOVO,slave1,slave2</value>
//与Zookeeper的zoo.cfg中配置值保持一致
<description>Comma separated list of servers in the ZooKeeperQuorum.
For example,"host1.mydomain.com,host2.mydomain.com,host3.mydomain.com".
By default this is set to localhost for local and pseudo-distributedmodes
of operation. For a fully-distributed setup, this should be set to afull
list of ZooKeeper quorum servers. If HAMA_MANAGES_ZK is set inhama-env.sh
this is the list of servers which we will start/stop zookeeper on.
</description>
</property>
<property>
<name>hama.zookeeper.property.clientPort</name>
<value>2181</value>
//zookeeper的客户端监听端口,必须与Zookeeper的zoo.cfg中配置值保持一致
<description>Property from ZooKeeper's config zoo.cfg.
The port at which the clients will connect.
</description>
</property>
<property>
<name>hama.zookeeper.property.dataDir</name>
<value>/usr/lily/zookeeper-3.3.2/Zookeeper_Data</value>
//必须与Zookeeper的zoo.cfg中配置值保持一致
<description>Property from ZooKeeper's config zoo.cfg.
The directory where the snapshot is stored.
</description>
</property>
</configuration>
(4)在/etc/profile中,添加如下内容:
export HAMA_HOME=/usr/lily/hama-0.2.0
export HAMA_CONF_DIR=/usr/lily/hama-0.2.0/conf
export PATH=$PATH:$HAMA_HOME/bin
这里,我的hama安装路径为/usr/lily/hama-0.2.0
将相同的配置拷贝到其它机器上,重启系统使profile的内容更改生效
配置 hama-0.5.0下conf下的 groomserver
内容:
Slave1
Slave2
(5)启动hama:
启动hama之前,首先确保hadoop和zookeeper集群已经启动成功
之后:
[root@LENOVO ~]# start-bspd.sh
starting bspmaster, logging to/usr/lily/hama-2.0/bin/../logs/hama-root-bspmaster-LENOVO.out
slave1: starting groom, logging to/usr/lily/hama-2.0/bin/../logs/hama-root-groom-slave1.out
slave2: starting groom, logging to/usr/lily/hama-2.0/bin/../logs/hama-root-groom-slave2.out
在BSPMaster上,看到
[root@LENOVO ~]# jps
2441
4448 SecondaryNameNode
4815 QuorumPeerMain
4292 NameNode
6186 BSPMasterRunner
6529 Jps
4515 JobTracker
在slave1和slave2上,看到
[root@slave1 ~]# jps
5283 Jps
3017 DataNode
3373 QuorumPeerMain
4408 GroomServerRunner
3108 TaskTracker
则证明hama安装启动成功
(6)运行示例程序
在hama.jar中,封装了三个示例程序,其中计算pi的程序不能运行(源代码是可以的,更改后,该程序由于需要一些特定信息,所以不能正常运行),其余两个可以正常运行
在控制台下,进入hama.jar所在的目录
运行test作业:
[root@LENOVO workspace3.3.2]#hama jarhama.jar test
11/04/19 09:35:23 INFO bsp.BSPJobClient:Running job: job_201104190843_0004
11/04/19 09:35:26 INFO bsp.BSPJobClient:the Current supersteps number: 0
11/04/19 09:35:29 INFO bsp.BSPJobClient:the Current supersteps number: 2
11/04/19 09:35:32 INFO bsp.BSPJobClient:The total number of supersteps: 2
hahahahahahahahahahahEach task printed the"Hello World" as below:
Tue Apr 19 09:35:25 CST 2011: Hello BSPfrom 1 of 2: slave1:61004
Tue Apr 19 09:35:27 CST 2011: Hello BSPfrom 2 of 2: slave2:61004
jieshu
运行bench作业:(其中,30是指定超步次数)
[root@LENOVO workspace3.3.2]#hama jarhama.jar bench 2 2 30
11/04/19 09:36:23 INFO bsp.BSPJobClient:Running job: job_201104190843_0005
11/04/19 09:36:26 INFO bsp.BSPJobClient: theCurrent supersteps number: 0
11/04/19 09:36:29 INFO bsp.BSPJobClient:the Current supersteps number: 12
11/04/19 09:36:32 INFO bsp.BSPJobClient:the Current supersteps number: 19
11/04/19 09:36:35 INFO bsp.BSPJobClient:the Current supersteps number: 30
11/04/19 09:36:35 INFO bsp.BSPJobClient:The total number of supersteps: 30
Job Finished in 12.693 seconds
至于作业的日志,可以到slave1和slave2上,hama-0.2.0/logs/下查看
日志的级别控制,可以到conf/log4j那个文件,更改内容
至此,hama的安装与调试完毕
(7)如果大家向更改源代码并重新编译hama-0.2.0.jar,则需要参照“Hadoop开发者第一期”中,关于hadoop源代码编译的相关介绍(hama编译时,选择的build.xml文件,就是hama-0.2.0根目录下的build.xml,源文件就是/src/java下的文件,编译成功后,会在hama-0.2.0/build文件夹下,看到编译好的hama-0.2.0.jar,将其发布到所有集群上后(删掉原来的hama-0.2.0.jar,或将原来的hama-0.2.0.jar剪切掉,总之要确保在hama-0.2.0文件下,hama-0.2.0.jar的唯一性,否则会出现版本混乱,造成错误),就可以运行自己的hama了)
编译源代码时,仅需建立普通java工程即可,需要导入Hadoop-0.20.2-core.jar、Zookeeper-3.3.2.jar、commons-logging-1.0.4.jar、log4j-1.2.15.jar这些包,否则编译无法通过