天天看點

如何在MaxCompute上運作HadoopMR作業

maxcompute(原odps)有一套自己的mapreduce程式設計模型和接口,簡單說來,這套接口的輸入輸出都是maxcompute中的table,處理的資料是以record為組織形式的,它可以很好地描述table中的資料處理過程,然而與社群的hadoop相比,程式設計接口差異較大。hadoop使用者如果要将原來的hadoop mr作業遷移到maxcompute的mr執行,需要重寫mr的代碼,使用maxcompute的接口進行編譯和調試,運作正常後再打成一個jar包才能放到maxcompute的平台來運作。這個過程十分繁瑣,需要耗費很多的開發和測試人力。如果能夠完全不改或者少量地修改原來的hadoop mr代碼就能在maxcompute平台上跑起來,将是一個比較理想的方式。

使用該插件在maxcompute平台跑一個hadoopmr作業的基本步驟如下:

編譯導出wordcount的jar包:wordcount_test.jar ,wordcount程式的源碼如下:

建立輸入表和輸出表

通過tunnel将資料導入輸入表中

待導入文本檔案data.txt的資料内容如下:

例如可以通過如下指令将data.txt的資料導入wc_in中,

配置檔案命名為:wordcount-table-res.conf

配置項說明:

整個配置是一個json檔案,描述hdfs上檔案與maxcompute上表之間的映射關系,一般要配置輸入和輸出兩部分,一個hdfs路徑對應一個resolver配置,tableinfos配置以及matchmode配置。

resolver: 用于配置如何對待檔案中的資料,目前有com.aliyun.odps.mapred.hadoop2openmr.resolver.textfileresolver和com.aliyun.odps.mapred.hadoop2openmr.resolver.binaryfileresolver兩個内置的resolver可以選用。除了指定好resolver的名字,還需要為相應的resolver配置一些properties指導它正确的進行資料解析。

textfileresolver: 對于純文字的資料,輸入輸出都會當成純文字對待。當作為輸入resolver配置時,需要配置的properties有text.resolver.columns.combine.enable和text.resolver.seperator,當text.resolver.columns.combine.enable配置為true時,會把輸入表的所有列按找text.resolver.seperator指定的分隔符組合成一個字元串作為輸入。否則,會把輸入表的前兩列分别作為key,value。

binaryfileresolver: 可以處理二進制的資料,自動将資料轉換為maxcompute可以支援的資料類型,如bigint, bool, double等。當作為輸出resolver配置時,需要配置的properties有binary.resolver.input.key.class和binary.resolver.input.value.class,分别代表中間結果的key和value類型。

tableinfos:使用者配置hdfs對應的maxcompute的表,目前隻支援配置表的名字tblname,而partspec和label請保持和示例一緻。

matchmode:路徑的比對模式,可選項為exact和fuzzy,分别代表精确比對和模糊比對,如果設定為fuzzy,則可以通過正則來比對hdfs的輸入路徑

在maxcompute的指令行下運作如下指令:

這裡假設我們已經将hadoop2openmr-1.0.jar和wordcount_test.jar以及wordcount-table-res.conf已經放置到odpscmd的目前目錄,否則在指定配置和-classpath的路徑時需要做相應的修改。

運作過程如下圖所示:

如何在MaxCompute上運作HadoopMR作業

當作業運作完成後,可以檢視結果表wc_out裡面的内容,驗證作業成功結束,結果符合預期。

如何在MaxCompute上運作HadoopMR作業
如何在MaxCompute上運作HadoopMR作業