您现在的位置 >> Hadoop教程 >> Hadoop实战 >> 专题  
 

Mahout算法调用展示平台2.1

【作者:Hadoop实战专家】【关键词:集群 使用 配置 】 【点击:1478次】【2013-03-2】
3.2集群算法监控模块在集群配置中,点击验证成功后,就会在任务监控页面不停的发送消息,获取集群任务运行的状态(间隔1.2秒,Ajax方式);读取聚类中心,则是直接读取序列文件; 这里提交任务使用多线程提交,这样可以方便监控;分为两个部分,建树、测试;  

相关热门搜索:hadoop集群测试 zookeeper集群配置 dubbo zookeeper 集群

大数据标签:hadoop hdfs yarn mapreduce hbase mahout bigdata

问题导读:
1.本文需要哪些软件?
2.Mahout模块完成什么任务?
3.Hadoop模块的作用是什么?

软件版本:
windows7: Tomcat7、JDK7、Spring4.0.2、Struts2.3、Hibernate4.3、myeclipse10.0、easyui;Linux(centos6.5):Hadoop2.4、Mahout1.0、JDK7;
使用Web工程调用Mahout的相关算法,提供监控,查看任务的执行状态。
自建Web项目,项目首页如下:

1.png (37.38 KB, 下载次数: 1)

  

2014-7-8 20:30 上传

1. 准备        项目可以在
链接:http://pan.baidu.com/s/1kTKDMYV 密码:c9bt

下载。
Hadoop使用官网提供的2.4版本,直接下载即可,然后配置(配置这里不再赘述)、启动各个服务,使用jps,可以看到下面的服务:
64位下载包下载:
百度网盘:
链接: http://pan.baidu.com/s/1hqEDe2S 密码: 224f

1. [root@node33 data]# jps

2. 6033 NodeManager

3. 5543 NameNode

4. 5629 DataNode

5. 5942 ResourceManager

6. 41611 Jps

7. 5800 SecondaryNameNode

8. 6412 JobHistoryServer

复制代码

1.1 Hadoop包
可以使用eclipse新建一个java项目,然后导入Hadoop的包,测试是否可以连接集群,导入的包如下:

2.png (66.55 KB, 下载次数: 1)

  

2014-7-8 20:30 上传

3.png (69.11 KB, 下载次数: 1)

  

2014-7-8 20:30 上传

修改红色框里面的mapred-default.xml、yarn-default.xml中的如下配置(node33是伪分布式Hadoop集群机器的机器名):
mapred-default.xml:

1. 

2.   mapreduce.jobhistory.address

3.   node33:10020

4.   MapReduce JobHistory Server IPC host:port

5. 

复制代码

yarn-default.xml:

1. yarn.application.classpath

2.     

3.                 $HADOOP_CONF_DIR,

4.       $HADOOP_COMMON_HOME/share/hadoop/common/*,

5.       $HADOOP_COMMON_HOME/share/hadoop/common/lib/*,

6.       $HADOOP_HDFS_HOME/share/hadoop/hdfs/*,

7.       $HADOOP_HDFS_HOME/share/hadoop/hdfs/lib/*,

8.       $HADOOP_YARN_HOME/share/hadoop/yarn/*,

9.       $HADOOP_YARN_HOME/share/hadoop/yarn/lib/*

10.         

复制代码

1. yarn.resourcemanager.hostname

2.     node33

复制代码

注意classpath的路径是集群的相应路径;
还有是新建YARNRunner文件,参考:http://blog.csdn.net/fansy1990/article/details/27526167。
首先这样测试,看是否可以连接集群(直接运行一个MR任务,看是否执行),如果不行,肯定是有地方没有设置对。

1.2 Mahout包
导入Mahout的包,Mahout的包获取采用官网提供的方式,自行使用git下载,编译得到,参考:http://mahout.apache.org/developers/buildingmahout.html(注意选择使用Hadoop2的方式,由于这里使用的是2.4 ,所以

1. mvn -Dhadoop2.version=2.4.1 -DskipTests clean install

复制代码
git的使用可以查看开源项目必备管理工具git:git入门
)导入的包有:

4.png (40.11 KB, 下载次数: 1)

  

2014-7-8 20:30 上传

新建文件进行测试,看调用Mahout的算法包是否可以正常运行,并不会报不兼容JobContext和Job不兼容的错误,如果报错,说明编译有问题(可以下载lz编译好的)

2.配置项目可以在

链接:http://pan.baidu.com/s/1kTKDMYV 密码:c9bt

,下载后需要配置:
2.1 Hadoop相关配置(1)在1.准备中的把对应的node33改为自己的机器名;
(2)去掉工程中WebRoot/lib/mahout-*-job.jar 中去掉javax.servlet 和javax.el目录(不然无法启动Tomcat,如果是自己编译的话,如果是下载的则不用,已经去掉了);

(3)修改工程中src/com/fz/util/HadoopUtils文件中的node33以及端口号改为自己的集群机器名/IP和端口;
(4)把工程src目录的所有文件打jar包上传到云平台mapreduce目录下(否则会报类找不到的错误,lib目录下面的mh2.1.jar);
2.2 数据库相关配置修改工程中Configuration/db.properties文件中数据库相应配置(数据库暂时没有使用到);
2.3 Tomcat部署tomcat部署使用配置文件的方式:

1. 

4. 

5.

复制代码

项目部署名使用mn。
3. 功能功能主要包括四个方面:集群配置、集群算法监控、Hadoop模块、Mahout模块,data目录提供测试数据;
3.1 集群配置模块启动工程,打开浏览器访问http://localhost:8080/mh ,即可访问项目,首页看到的即是集群配置。这里需要说明的是在src/com/fz/util/HadoopUtils中不一定要修改,可以在集群配置页面中进行配置亦可;
验证集群是否可以连接的代码:

1. public int checkConnection(String fsStr,String rm) throws IOException{

2.

3.                 Configuration conf = new Configuration();

4.                 conf.set("fs.defaultFS", fsStr);

5.                 conf.set("yarn.resourcemanager.address", rm);

6.                 conf.set("mapreduce.framework.name", "yarn");

7.                 FileSystem fs = FileSystem.get(conf);

8.                 boolean fsOnline=fs.exists(new Path("/"));

9.                 if(!fsOnline){

10.                         return 1;

11.                 }

12.                 JobClient jc = new JobClient(conf);

13.                 ClusterStatus cs = jc.getClusterStatus();

14.                 if(!"RUNNING".equals(cs.getJobTrackerStatus().toString())){

15.                         return 0;

16.                 }

17.                 // 集群验证成功

18.                 HadoopUtils.setConf(conf);

19.                 HadoopUtils.setFs(fs);

20.                 // 通过判断Hadoop.getConf()是否为null来确定是否已经配置过集群

21.                 return 3;

22.         }

复制代码

主要通过两个方面:1、检查HDFS文件;2、检查集群状态是否是running;
配置完成后,点击验证,如果验证成功,即可提示验证成功:

5.png (2.98 KB, 下载次数: 1)

  

2014-7-8 20:30 上传

6.png (3.11 KB, 下载次数: 1)

  

2014-7-8 20:30 上传

3.2集群算法监控模块在集群配置中,点击验证成功后,就会在任务监控页面不停的发送消息,获取集群任务运行的状态(间隔1.2秒,Ajax方式);
当没有任务运行的时候,获取任务运行状态,会直接返回null。在Mahout模块或者Hadoop模块运行MR任务的时候,如果任务成功提交,那么首先会根据此次提交运行的MR任务的个数初始化任务信息类。初始化,做的工作就是找到当前已经运行的任务的ID,然后初始化接下来要运行任务的ID,如下代码:

1. public static void initialCurrentJobs(int nextJobNum) throws IOException{

2.                 /*if(list!=null&&list.size()==10){

3.                         list.clear();

4.                 }*/

5.                 list.clear(); // 清空上次遗留

6.                 JobStatus[] jbs=getJc().getAllJobs();

7.                 JobID jID = findLastJob(jbs).getJobID();

8.                 if(jID==null){

9.                         // the first time start the cluster , will be fixed next time

10.

11.                         // TODO fix the bug

12.                         log.info("The cluster is started before and not running any job !!!");

13.                 }

14.                 log.info("The last job id is :{}", jID.toString());

15.                 for(int i=1;i<=nextJobNum;i++){

16.                         CurrentJobInfo cj = new CurrentJobInfo();

17.                         cj.setJobId(new JobID(jID.getJtIdentifier(),jID.getId()+i));

18.                         list.add(cj);

19.                 }

20.         }

复制代码

这里需要注意的是,如果集群是第一次启动,且没有运行MR任务的话,那么获取的任务ID为空,无法初始化(这个在下个版本修复);
获取当前运行任务的代码如下:

1. public static List getCurrentJobs() throws IOException{

2.

3.

4.                 for(int i=0;i(input, PathType.GLOB, conf)){

15.                         buff.append(cl.getValue().asFormatString(null)).append("\n");

16.                 }

17.                 return buff.toString();

18.         }

复制代码

8.png (16.1 KB, 下载次数: 1)

  

2014-7-8 20:30 上传

9.png (16.05 KB, 下载次数: 1)

  

2014-7-8 20:30 上传

3.3.3文本转换为序列向量这个功能点是一个MR任务,提交任务后,可以在任务监控模块看到任务监控。主要的功能是把文本文件转换为序列向量,为聚类提供输入数据。需设置文本分隔符:

10.png (15.8 KB, 下载次数: 1)

  

2014-7-8 20:30 上传

监控信息:

11.png (14.68 KB, 下载次数: 1)

  

2014-7-8 20:30 上传

3.4 Mahout模块Mahout算法模块主要是调用Mahout算法库中相关算法,然后监控算法运行状态;

3.4.1 聚类算法聚类算法暂时使用kmeans算法,提供算法相关参数(数据在data目录的wine_kmeans.txt):

12.png (20.24 KB, 下载次数: 1)

  

2014-7-8 20:30 上传

这里提交任务使用多线程提交,这样可以方便监控;

13.png (21.68 KB, 下载次数: 1)

  

2014-7-8 20:30 上传

3.4.2 分类算法分类算法暂时使用随机森林算法(数据在data/galss.txt);
分为两个部分,建树、测试;建树使用MR算法,测试使用单机模式;
建树输出模型路径使用相对路径,使用绝对路径会报错!

14.png (19.58 KB, 下载次数: 1)

  

2014-7-8 20:30 上传

点击确定,打开任务监控页面,查看任务提交情况:

15.png (15.4 KB, 下载次数: 1)

  

2014-7-8 20:30 上传

测试随机森林,可以看到随机森林的参数以及测试数据的正确率和模糊矩阵;

16.png (20.46 KB, 下载次数: 1)

  

2014-7-8 20:30 上传

17.png (20.71 KB, 下载次数: 1)

  

2014-7-8 20:30 上传

3.4.3 推荐算法
推荐算法使用item的RecommenderJob,设置参数,提交任务:

18.png (19.16 KB, 下载次数: 1)

  

2014-7-8 20:30 上传

点击确定,成功提交任务后,可以查看监控:

19.png (31.12 KB, 下载次数: 1)

  

2014-7-8 20:30 上传

3.5 帮助模块在首页的右边,可以看到三个帮助页面,可以获取不同模块的帮助信息。

转载:http://blog.csdn.net/fansy1990

大数据系列相关文章:

最新评论
TangYuegao2014-09-10 01:58:29
那还有人觉得java要过时了呢,都说好多年了,
Hadoop-李振刚2014-09-09 01:40:15
《“什么大数据”一篇文章让你了解大数据》 如果你说大数据就是数据大,或者侃侃而谈4个V,也许很有深度的谈到BI或预测的价值,又或者拿Google和Amazon举例,技术流可能会聊起Hadoop和Cloud Computing,不管对错,只是无法勾勒对大数据的整体认识,不说是片面...畅读版【http://t.cn/8szcuQk】
想你的起员2014-09-08 11:51:15
4. 有ZooKeeper等相关经验者优先
timger2014-09-08 11:50:07
一个比较的是实际的值,一个比较的是引用
狼心的眼泪2014-09-07 11:00:33
共性是:都有大量的自定义数据
兰子2014-09-06 11:39:47
有会的么
包包脸hlho2014-09-06 03:05:13
现在的公司也开始讨论从AWS EMR迁移到Qubole hadoop的事情...我越来越看好Qubole这个公司了。。
雪豹2014-09-05 11:06:00
最近刚接触到Hadoop技术,这是一个分布式系统基础架构,由Apache基金会所开发。 用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。有趣的是这个技术的名字Hadoop不是一个缩写,而是一个虚构的名字,是他孩子给一个棕黄色的大象玩具的命名Hadoop [hædu:p]。
zoliy2014-09-04 04:39:22
『Hadoop科普文——常见的45个问题解答-@云创存储』http://t.cn/RvMKCFJ
xianli_inf2014-09-03 07:34:34
来把你的姓氏、星座、属相拼在一起形成新的名字吧。我是易巨鼠……
 
  • Hadoop生态系统资料推荐