最近在做mahout源码调用的时候,发现一个参数:startPhase和endPhase,这两个参数是什么意思呢?比如运行RecommenderJob时,可以看到10个MR任务,所以猜测是否是一个phase代表一个MR?
带着这样的疑问进行了实验:
$HADOOP_HOME/bin/hadoopjarmahout-0.7/core/target/mahout-core-0.7-job.jarorg.apache.mahout.cf.taste.hadoop.item.RecommenderJob--inputinput/intro.csv--outputdate1129/cf00--tempDirdate1129/cftemp00--booleanDatafalse--similarityClassnameSIMILARITY_COOCCURRENCE--startPhase0--endPhase4
但是,实验结果却还是那样,仍然运行了10个MR,然后就去google了,网上看到这个一个观点:ThefirstMRjobisindex0.Sosetting–startPhase1willexecutethe2nd
jobonwards.Puttingin–endPhase2wouldstopafterthe3rdjob.,来自http://lucene.472066.n3.nabble.com/RowSimilarity-startphase-and-endphase-parameters-td2119682.html。这个的意思其实就是说MRjob和phase是同一个意思,但是我实验后却证明不是这样;
而且网上这个话题比较少涉及到,没办法只能看源码了。
看mahout的源码可以看到基本的算法Job都继承来AbstractJob这个类,而AbstractJob这个类里面有一个shouldRunNextPhase方法,这个方法是和startPhase和endPhase这两个参数有关的,所以如果RecommenderJob里面有这个方法的话,那么应该就可以说startPhase和endPhase两个参数是有作用的;
我没有继续分析源码了,下面说下我的做法:我在AbstractJob这个类的shouldRunNextPhase里面加入了打印currentPhase和startPhase,endPhase以及这个方法返回的boolean值,不过这个如果在终端运行(也就是上面提及的在命令行运行)的话,是看不到打印的内容的。同时也可以不打印,而是选择用log,写入log,不过这个要去slave节点机才能看到,比较麻烦,所以就没有使用Log.
如何才能打印出结果呢?使用mvn编译mahout的源代码(修改过的),然后在$MAHOUT_SOUCE/core/targe里面有mahout-core-0.7-job.jar文件,把这个文件拷贝到eclipse,然后直接编写代码调用这个jar文件里面的RecommenderJob类就可以在Console里面看到我们打印的信息了,这样就可以看出来MRJob和phase的区别了。
那么,phase的意义到底是什么呢?其实pahse的含义就是几个MR的一个集合,不定数目的MRjob视为一个phase。这个有什么好处呢?比如你运行RecommenderJob时前面的两个phase都运行成功了,但是后面的运行出错,那么是否要继续从第一个phase开始运行呢,其实完全没有必要,可以设置startPhase和endPhase这两个参数,直接跳过前面两个Phase。
那么回到最开始的问题,为什么我设置了那两个参数,但是却没有作用呢?因为RecommenderJob只有四个phase,而我设置0-4超过了最大值3,所以所有的MRjob仍照常运行。
分享,成长,快乐
分享到:
相关推荐
mahout 入门中文材料,是IBM文章汇总,值得一看
mahout,朴素贝叶斯分类,中文分词,mahout,朴素贝叶斯分类,中文分词,
mahout_help,mahout的java api帮助文档,可以帮你更轻松掌握mahout
maven_mahout_template-mahout-0.8
该资源是mahout in action 中的源码,适用于自学,可在github下载:https://github.com/tdunning/MiA
mahout中的贝叶斯算法的拓展开发包,提供了相关接口可以供用户调用,直接即可跑出结果,相关运行方式参考blog《mahout贝叶斯算法开发思路(拓展篇)》
MAHOUT实战 MAHOUT IN ACTION
mahout-examples-0.11.1 mahout-examples-0.11.1-job mahout-h2o_2.10-0.11.1 mahout-h2o_2.10-0.11.1-dependency-reduced mahout-hdfs-0.11.1 mahout-integration-0.11.1 mahout-math-0.11.1 mahout-math-0.11.1 ...
mahout中bayesian算法的数据流,可以根据excel中的公式来推断出该算法的数据流
mahout in action 第一章 第二章 第三章第四章 第六章第七章 第九章
mahout聚类算法的介绍,例如:Canopy,KMeans,Fuzzy-KMeans,Spectral Clustering等参数介绍和适用场景介绍
mahoutAlgorithms源码分析 mahout代码解析
If you are a Java developer and want to use Mahout and Machine Learning to solve Big Data analytics use-cases then this book is for you. Familiarity with shell-scripts is assumed but no prior ...
mahout-integration-0.7mahout-integration-0.7mahout-integration-0.7mahout-integration-0.7
mahout0.9不能运行在hadoop2中,会报interface错误,用此新编译后的包,可实现mahout+hadoop2的运行环境,其中包括编译后的包及源码。
Mahout 官方文档,简单介绍Mahout概念及其安装和简单使用
Mahout是一个Java的机器学习库。Mahout的完整源代码,基于maven,可以轻易导入工程中
Mahout支持K-Means等聚类算法,在此zip包中已经有打好jar包的资源,不需要用户再打jar包,可以直接使用。
这是这篇博文的工程代码,是MyEclipse的工程文件。...由于原工程开发的时候是在MyEclipse中引用mahout的jar包,所以这个压缩文件并没有相关的jar文件,故运行此项目之前需要做的事请,是需要导入mahout的开发包。
Mahout0.8_API 喜欢的人就请下载吧