剖析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 參數