您的位置:首页 > 其它

2012-11-26 13:06 mahout调用流程分析

2013-01-07 15:23 218 查看
2012-11-26 13:06 http://hi.baidu.com/izouying/item/cea7e76658e85937ac3e83f6

mahout调用流程分析

剖析mahout脚本

mahout 位于$MAHOUT_HOME/bin目录下,是所有mahout调用的入口。
主要会做各类环境变量的设置。
MAHOUT_JAVA_HOME:指定java的执行路劲,会覆盖$JAVA_HOME
MAHOUT_HEAPSIZE :JAVA运行堆栈的内存大小
HADOOP_CONF_DIR : hadoop 配置文件路径主要是*-site.xml这些文件的位置
MAHOUT_OPTS : mahout运行时的java参数
MAHOUT_CONF_DIR :类文件属性文件所在文件,文件名是类名简写,默认位置$MAHOUT_HOME/src/conf
MAHOUT_LOCAL : 设置是否本地运行,如果设置这个参数就不会运行hadoop了,一旦设置这个参数,那HADOOP_CONF_DIR 和HADOOP_HOME 这两个参数的设置就自动失效了。
MAHOUT_CORE :是否应用开发环境的core,还是发布的core。

参数-core 指定引用包的路径

案例调用流程

要运行example的时候,最终的触发语句如下:
exec"$HADOOP_BINARY" jar $MAHOUT_JOB $CLASS "$@"
1、$HADOOP_BINARY 就是hadoop的执行文件
2、$MAHOUT_JOB: 就是mahout-examples-*-job.jar 所在位置
3、$CLASS : 是默认的 org.apache.mahout.driver.MahoutDriver
4、$@ : 就是要调用的class名字,比如org.apache.mahout.clustering.syntheticcontrol.kmeans.Job

三、对org.apache.mahout.driver.MahoutDriver

加载mapping文件:

加载driver.classes.props 文件,此文件要路径应保存在classpath路径上。

此属性文件的内容,主要是一个全名称的class名与简写class名的映射关键,并且还有class注释说明。模板fully.qualified.class.name =shortJobName : descriptive string

比如: org.apache.mahout.utils.vectors.VectorDumper= vectordump : Dump vectors from a sequence file to text

上面这个映射关系是从driver.classes.default.props文件找到的。

MahoutDriver会先加载driver.classes.props,如果没有driver.classes.props这个文件。那就会加载driver.classes.default.props。

加载类默认指定props文件:

文件名是<shortJobName>.props,具体类的属性或参数文件。格式如下
i|input =/path/to/my/input
o|output = /path/to/my/output
m|jarFile = /path/to/jarFile
# etc -each line is shortArg|longArg = value

剩余参数解析

剩余参数可以是在mapping文件中定义过的shortJobName,已经shortJobName类需要用到的参数,从命令行传入的参数会覆盖shortJobName.props中定义的参数。
如果在要运行vecDump这个类

在mapping文件中定义也就是driver.classes.props 或者driver.classes.default.props文件中定义:

org.apache.mahout.utils.vectors.VectorDumper= vecDump : dump vectors from a sequence file

全名称类名 = 缩写类名称: 功能描述

定义vecdump.props文件

o|output = /tmp/vectorOut
s|seqFile = /my/vector/sequenceFile

运行指令

$MAHOUT_HOME/bin/mahoutrun vecDump -s /my/otherVector/sequenceFile
在命令行中的参数–s 会覆盖在vecdump.props中的定义的s参数

最终的执行指令参数为
{"--output","/tmp/vectorOut", "-s","/my/otherVector/sequenceFile"}

如果还有其他参数需要传入的话,就用-Dkey=value的形式

PS:将工程导入eclipse中。

在导入前需要执行mvn eclipse:eclipse
将导入的功能右键选中pom.xml 执行mvn build 就可以编译你修改过的内容了。
测试修改的内容,可以参考example中的shell脚本调用。需要注意的是需要设置MAHOUT_CORE或-core 参数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: