本文向您介紹如何使用Jar命令在MaxCompute客戶端運行和提交MapReduce作業。
MaxCompute客戶端提供Jar命令用于運行MapReduce作業,舉例如下。
jar -conf \home\admin\myconf -resources a.txt,example.jar -classpath ..\lib\example.jar:.\other_lib.jar -D java.library.path=.\native;
語法介紹
jar [<GENERIC_OPTIONS>] <MAIN_CLASS> [ARGS];
-conf <configuration_file>
-resources <resource_name_list>
-classpath <local_file_list>
-D <name>=<value>
-l
參數說明
<GENERIC_OPTIONS>
包括(均為可選參數):-conf <configuration file>:指定JobConf配置文件。該文件可以影響SDK中JobConf的設置。
JobConf配置文件的模板如下。
<configuration> <property> <name>import.filename</name> <value>resource.txt</value> </property> </configuration>
在上述模板中,通過JobConf配置文件定義一個名為import.filename的變量,該變量的值為resource.txt。
您可以在MapReduce程序中通過JobConf接口獲取該變量的值。通過SDK中JobConf接口您可以達到相同的目的,詳情請參見資源使用示例 。
示例如下。
-- 添加jar包至MaxCompute項目環境,并提交jar作業。 add jar data\mapreduce-examples.jar; jar -resources mapreduce-examples.jar -classpath data\mapreduce-examples.jar org.alidata.odps.mr.examples.WordCount wc_in wc_out; -- 添加file文件和jar包至MaxCompute項目環境,并提交jar作業。 add file data\src.txt; add jar data\mapreduce-examples.jar; jar -resources src.txt,mapreduce-examples.jar -classpath data\mapreduce-examples.jar org.alidata.odps.mr.examples.WordCount wc_in wc_out; -- 添加file文件,基于wc_in表結構創建新表test_table和jar包至MaxCompute項目環境,并提交jar作業。 add file data\a.txt; add table wc_in as test_table; add jar data\work.jar; jar -conf odps-mapred.xml -resources a.txt,test_table,work.jar -classpath data\work.jar:otherlib.jar -D import.filename=resource.txt org.alidata.odps.mr.examples.WordCount args;
-resources <resource_name_list>:MapReduce作業運行時使用的資源聲明。一般情況下,resource_name_list中需要指定Map/Reduce函數所用的資源名稱。
說明如果在Map/Reduce函數中讀取了其他MaxCompute資源,則這些資源名稱也需要被添加到resource_name_list中。
資源之間使用逗號分隔,使用跨項目空間使用資源時,需要在前面加上
PROJECT/resources/
。例如,-resources otherproject/resources/resfile
。在Map/Reduce函數中讀取資源的示例,請參見資源使用示例。
-classpath <local_file_list>:本地執行時的classpath,主要用于指定main函數所在的Jar包的本地路徑(包含相對路徑和絕對路徑)。
包名之間使用系統默認的文件分割符作分割。通常情況下,Windows系統中使用分號(;),Linux系統中使用逗號(,)。如果您在云端服務器運行MapReduce任務,則使用逗號(,)進行分隔。
說明通常,您可能更習慣于將main函數與Map/Reduce函數編寫在一個包中,例如WordCount 代碼示例。因此,在執行示例程序時,-resources及-classpath的參數中都出現了mapreduce-examples.jar。但二者意義不同,-resources引用的是Map/Reduce函數,運行于分布式環境中。而-classpath引用的是main函數,運行于本地,指定的Jar包路徑也是本地文件路徑。
-D <prop_name>=<prop_value>:本地執行時,<mainClass>的Java屬性,可以定義多個。
-l:以本地模式執行MapReduce作業,主要用于程序調試。
<MAIN_CLASS>
:運行主類,例如com.example.Main。[ARGS]
:程序的參數(可選)。這些參數會傳遞給Main
類的main
方法。