软件版本号:

windows7: Tomcat7、JDK7、Spring4.0.2、Struts2.3、Hibernate4.3、myeclipse10.0、easyui;Linux(centos6.5):Hadoop2.4、Mahout1.0、JDK7;

使用Webproject调用Mahout的相关算法,提供监控。查看任务的执行状态。

自建Web项目。项目首页例如以下:

1. 准备

项目能够在http://download.csdn.net/detail/fansy1990/7600427(第一部分)、http://download.csdn.net/detail/fansy1990/7600463(第二部分)、http://download.csdn.net/detail/fansy1990/7600489(第三部分)下载。

Hadoop使用官网提供的2.4版本号,直接下载就可以。然后配置(配置这里不再赘述)、启动各个服务。使用jps,能够看到以下的服务:
[root@node33 data]# jps
6033 NodeManager
5543 NameNode
5629 DataNode
5942 ResourceManager
41611 Jps
5800 SecondaryNameNode
6412 JobHistoryServer

1.1 Hadoop包

能够使用eclipse新建一个java项目,然后导入Hadoop的包。測试能否够连接集群,导入的包例如以下:
改动红色框里面的mapred-default.xml、yarn-default.xml中的例如以下配置(node33是伪分布式Hadoop集群机器的机器名):
mapred-default.xml:
<property>
<name>mapreduce.jobhistory.address</name>
<value>node33:10020</value>
<description>MapReduce JobHistory Server IPC host:port</description>
</property>

yarn-default.xml:

<name>yarn.application.classpath</name>
<value>
$HADOOP_CONF_DIR,
$HADOOP_COMMON_HOME/share/hadoop/common/*,
$HADOOP_COMMON_HOME/share/hadoop/common/lib/*,
$HADOOP_HDFS_HOME/share/hadoop/hdfs/*,
$HADOOP_HDFS_HOME/share/hadoop/hdfs/lib/*,
$HADOOP_YARN_HOME/share/hadoop/yarn/*,
$HADOOP_YARN_HOME/share/hadoop/yarn/lib/*
</value>
<name>yarn.resourcemanager.hostname</name>
<value>node33</value>

注意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 ,所以
mvn -Dhadoop2.version=2.4.1 -DskipTests clean install

)导入的包有:

新建文件进行測试,看调用Mahout的算法包能否够正常执行。并不会报不兼容JobContext和Job不兼容的错误,假设报错,说明编译有问题(能够下载lz编译好的)

2.配置

项目能够在 http://download.csdn.net/detail/fansy1990/7600427(第一部分)、http://download.csdn.net/detail/fansy1990/7600463(第二部分)、http://download.csdn.net/detail/fansy1990/7600489(第三部分)下载,下载后须要配置:

2.1 Hadoop相关配置

(1)在1.准备中的把对应的node33改为自己的机器名;
(2)去掉project中WebRoot/lib/mahout-*-job.jar 中去掉javax.servlet 和javax.el文件夹(不然无法启动Tomcat。假设是自己编译的话,假设是下载的则不用。已经去掉了);
(3)改动project中src/com/fz/util/HadoopUtils文件里的node33以及port号改为自己的集群机器名/IP和port;
(4)把projectsrc文件夹的全部文件打jar包上传到云平台mapreduce文件夹下(否则会报类找不到的错误。lib文件夹以下的mh2.1.jar);

2.2 数据库相关配置

改动project中Configuration/db.properties文件里数据库对应配置(数据库临时没有使用到)。

2.3 Tomcat部署

tomcat部署使用配置文件的方式:
<Context
path ="/mh" docBase ="D:\workspase\hadoop_hbase\MahoutAlgorithmPlatform2.1\WebRoot"
privileged ="true" reloadable ="false" >
</Context>

项目部署名使用mn。

3. 功能

功能主要包含四个方面:集群配置、集群算法监控、Hadoop模块、Mahout模块。data文件夹提供測试数据。

3.1 集群配置模块

启动project,打开浏览器訪问http://localhost:8080/mh ,就可以訪问项目,首页看到的即是集群配置。这里须要说明的是在src/com/fz/util/HadoopUtils中不一定要改动,能够在集群配置页面中进行配置亦可;
验证集群能否够连接的代码:
public int checkConnection(String fsStr,String rm) throws IOException{

		Configuration conf = new Configuration();
conf.set("fs.defaultFS", fsStr);
conf.set("yarn.resourcemanager.address", rm);
conf.set("mapreduce.framework.name", "yarn");
FileSystem fs = FileSystem.get(conf);
boolean fsOnline=fs.exists(new Path("/"));
if(!fsOnline){
return 1;
}
JobClient jc = new JobClient(conf);
ClusterStatus cs = jc.getClusterStatus();
if(!"RUNNING".equals(cs.getJobTrackerStatus().toString())){
return 0;
}
// 集群验证成功
HadoopUtils.setConf(conf);
HadoopUtils.setFs(fs);
// 通过推断Hadoop.getConf()是否为null来确定是否已经配置过集群
return 3;
}

主要通过两个方面:1、检查HDFS文件;2、检查集群状态是否是running;

配置完毕后,点击验证,假设验证成功。就可以提示验证成功:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmFuc3kxOTkw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

3.2集群算法监控模块

在集群配置中,点击验证成功后,就会在任务监控页面不停的发送消息。获取集群任务执行的状态(间隔1.2秒,Ajax方式);
当没有任务执行的时候,获取任务执行状态。会直接返回null。在Mahout模块或者Hadoop模块执行MR任务的时候,假设任务成功提交,那么首先会依据此次提交执行的MR任务的个数初始化任务信息类。初始化,做的工作就是找到当前已经执行的任务的ID。然后初始化接下来要执行任务的ID,例如以下代码:
public static void initialCurrentJobs(int nextJobNum) throws IOException{
/*if(list!=null&&list.size()==10){
list.clear();
}*/
list.clear(); // 清空上次遗留
JobStatus[] jbs=getJc().getAllJobs();
JobID jID = findLastJob(jbs).getJobID();
if(jID==null){
// the first time start the cluster , will be fixed next time // TODO fix the bug
log.info("The cluster is started before and not running any job !!!");
}
log.info("The last job id is :{}", jID.toString());
for(int i=1;i<=nextJobNum;i++){
CurrentJobInfo cj = new CurrentJobInfo();
cj.setJobId(new JobID(jID.getJtIdentifier(),jID.getId()+i));
list.add(cj);
}
}

这里须要注意的是,假设集群是第一次启动,且没有执行MR任务的话。那么获取的任务ID为空,无法初始化(这个在下个版本号修复);

获取当前执行任务的代码例如以下:
public static List<CurrentJobInfo> getCurrentJobs() throws IOException{

		for(int i=0;i<list.size();i++){
CurrentJobInfo iJob = list.get(i);
RunningJob runningJob =findGivenJob(iJob.getJobId().toString());
if(runningJob==null){
break;
}
if(i==list.size()-1){ // 放在设置的前面
finished=runningJob.isComplete();
}
iJob.setJobName(runningJob.getJobName());
iJob.setJobIdStr(runningJob.getJobStatus().getJobID().toString());
iJob.setMapProgress(Utils.toPercent(runningJob.mapProgress(),2));
iJob.setRedProgress(Utils.toPercent(runningJob.reduceProgress(), 2));
iJob.setState(JobStatus.getJobRunState(runningJob.getJobState())); // 有时map和reduce都到1时,此值仍是Running,需处理
}
return list;
}

获取到任务信息后,在任务监控界面就能够监控到任务的执行状态。

3.3 Hadoop模块

Hadoop模块眼下包含5个小功能:上传、下载、读取、读取聚类中心点、文本转换为序列向量文件。

3.3.1 上传、下载

上传下载都使用FileSystem的方法,各自是copyFromLocal 和copyToLocal 。

界面仅仅有两个參数:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmFuc3kxOTkw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

3.3.2 读取、读取聚类中心点

读取是依照每行数据来读取的。能够选择读取的行数;读取聚类中心,则是直接读取序列文件;
读取聚类中心向量代码例如以下:
/**
* 读取聚类中心向量
* @param conf
* @param centerPathDir
* @return
* @throws IOException
*/
public static String readCenter(Configuration conf,String centerPathDir) throws IOException{
StringBuffer buff = new StringBuffer();
Path input = new Path(centerPathDir, "part-*");
if(!HadoopUtils.getFs().exists(input)){
return input+" not exist ,please check the input";
}
for(ClusterWritable cl:new SequenceFileDirValueIterable<ClusterWritable>(input, PathType.GLOB, conf)){
buff.append(cl.getValue().asFormatString(null)).append("\n");
}
return buff.toString();
}

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmFuc3kxOTkw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

3.3.3文本转换为序列向量

这个功能点是一个MR任务。提交任务后,能够在任务监控模块看到任务监控。基本的功能是把文本文件转换为序列向量,为聚类提供输入数据。

需设置文本分隔符:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmFuc3kxOTkw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

监控信息:

3.4 Mahout模块

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

3.4.1 聚类算法

聚类算法临时使用kmeans算法。提供算法相关參数(数据在data文件夹的wine_kmeans.txt):
这里提交任务使用多线程提交,这样能够方便监控。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmFuc3kxOTkw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" width="750" alt="" />

3.4.2 分类算法

分类算法临时使用随机森林算法(数据在data/galss.txt)。
分为两个部分。建树、測试;建树使用MR算法,測试使用单机模式;
建树输出模型路径使用相对路径。使用绝对路径会报错。
点击确定,打开任务监控页面,查看任务提交情况:
測试随机森林。能够看到随机森林的參数以及測试数据的正确率和模糊矩阵;

3.4.3 推荐算法

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmFuc3kxOTkw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

点击确定。成功提交任务后,能够查看监控:

3.5 帮助模块

在首页的右边。能够看到三个帮助页面。能够获取不同模块的帮助信息。

分享,成长,快乐

转载请注明blog地址:http://blog.csdn.net/fansy1990

Mahout算法调用展示平台2.1的更多相关文章

  1. mahout算法源码分析之Collaborative Filtering with ALS-WR (四)评价和推荐

    Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 首先来总结一下 mahout算法源码分析之Collaborative Filtering with AL ...

  2. mahout算法源码分析之Collaborative Filtering with ALS-WR拓展篇

    Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 额,好吧,心头的一块石头总算是放下了.关于Collaborative Filtering with AL ...

  3. mahout算法源码分析之Collaborative Filtering with ALS-WR 并行思路

    Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. mahout算法源码分析之Collaborative Filtering with ALS-WR 这个算 ...

  4. libgdx如何调用android平台内容

    使用libgdx已经有一段时间了.最近经常有朋友问我如何在libgdx中调用android的内容. 正常来说libgdx是跨平台的,gdx中的代码是不允许有任何其他平台的相关代码,但实际使用时经常会有 ...

  5. mahout算法库(四)

    mahout算法库 分为三大块 1.聚类算法 2.协同过滤算法(一般用于推荐) 协同过滤算法也可以称为推荐算法!!! 3.分类算法 算法类 算法名 中文名 分类算法               Log ...

  6. prometheus学习系列八: Prometheus Grafana展示平台

    在prometheus中,我们可以使用web页面进行数据的查询和展示, 不过展示效果不太理想,这里使用一款专业的展示平台进行展示. grafana安装 # 下载wget https://dl.graf ...

  7. mahout算法源码分析之Itembased Collaborative Filtering(四)共生矩阵乘法

    Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 经过了SimilarityJob的计算共生矩阵后,就可以开始下面一个过程了,这个过程主要是共生矩阵的乘法 ...

  8. mahout算法源码分析之Itembased Collaborative Filtering(二)RowSimilarityJob

    Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 本篇开始之前先来验证前篇blog的分析结果,编写下面的测试文件来进行对上篇三个job的输出进行读取: p ...

  9. mahout算法源码分析之Itembased Collaborative Filtering(三)RowSimilarityJob验证

    Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 本篇分析上篇的分析是否正确,主要是编写上篇输出文件的读取以及添加log信息打印相关变量. 首先,编写下面 ...

随机推荐

  1. 【转】linux read 用法

    转自:http://www.cnblogs.com/iloveyoucc/archive/2012/04/16/2451328.html 1.基本读取 read命令接收标准输入(键盘)的输入,或其他文 ...

  2. asp.net——统计输入的字符数目

    asp.net——统计输入的字符数目 题目: 在页面中有一个TextBox输入框,一个显示文字用的Label,一个提交按钮Button.在TextBox中输入一段英文字母,点击按钮提交后统计其中字母‘ ...

  3. CSS——background

    背景经常用到以下属性: background-color: aliceblue; background-image: url('2017102601.png'); background-positio ...

  4. Python三方库xlrd,xlwd-Excel读写

    恩,我是翻译汪,主要内容来自http://www.python-excel.org/ 在xlrd,xlwt这两个库中,Excel的结构表示为workbook整个Excel对象,sheet工作表,row ...

  5. Linux基础之网络协议

    互联网通信原理 从物理层面来说,每台计算机在一开始都是彼此孤立的,为了实现信息的交流与共享,计算机之间必须要建立通信网络.例如人与人之间的交流,他们必须要共用一套语言系统,才能交流成功.计算机之间也是 ...

  6. python读取单个文件操作

    python读取单个文件,参考<笨方法学python>的第15节. 运行方式是采用:python python文件名 要读取的文件名 代码中 script, filename = argv ...

  7. 【技术累积】【点】【java】【28】Map遍历

    Map遍历 map的遍历一般有几种吧 遍历entrySet for(Map.Entry<String,String> entry : map.entrySet()){ } Iterator ...

  8. c#仿照qq登录界面编辑框内容操作

    using System; using System.Drawing; using System.Windows.Forms; namespace 案例演示 { public partial clas ...

  9. 扩增子图表解读1箱线图:Alpha多样性

    箱线图 箱形图(Box-plot)又称为盒须图.盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图.因形状如箱子而得名.在宏基因组领域,常用于展示样品组中各样品Alpha多样性的分布 第一种情 ...

  10. 如何使用 Python 创建一名可操控的角色玩家

    在 这个系列的第一篇文章 中,我解释了如何使用 Python 创建一个简单的基于文本的骰子游戏.在第二部分中,我向你们展示了如何从头开始构建游戏,即从 创建游戏的环境 开始.但是每个游戏都需要一名玩家 ...