剖析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
在命令行中的参数�Cs 会覆盖在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 参数