本文向您介紹本地和分布式環境運行MapReduce的差異和MapReduce本地運行樣本。
各階段介紹
本地運行前:通過在Jar命令中設定–local參數,在本地類比MapReduce的運行過程,從而進行本地調試。
本地運行時:用戶端會從MaxCompute中下載本地調試所需要的輸入表的元資訊、資料,所需要的資源以及輸出表的元資訊,並將這些資訊儲存到一個名為warehouse
的本地目錄中。
本地運行結束後:程式運行結束後,會將計算結果輸出到warehouse
目錄內的一個檔案中。如果本地的warehouse
目錄下已經下載了輸入表及被引用的資源,在下一次運行時,會直接引用warehouse
下的資料及檔案,無需重複下載。
本地運行和分布式環境運行差異
在本地啟動並執行過程中,仍然會啟動多個Map及Reduce進程處理資料,但這些進程不是並發運行,而是依次串列運行。
本地運行樣本
本地啟動並執行樣本如下。
odps:my_project> jar -l com.aliyun.odps.mapred.example.WordCount wc_in wc_out
Summary:
counters: 10
map-reduce framework
combine_input_groups=2
combine_output_records=2
map_input_bytes=4
map_input_records=1
map_output_records=2
map_output_[wc_out]_bytes=0
map_output_[wc_out]_records=0
reduce_input_groups=2
reduce_output_[wc_out]_bytes=8
reduce_output_[wc_out]_records=2
OK
關於WordCount樣本的代碼介紹請參見WordCount樣本。
如果您是第一次運行本地調試命令,命令成功結束後,會在當前路徑下看到一個名為warehouse的路徑。
warehouse
的目錄結構如下所示。
<warehouse>
|____my_project(專案空間目錄)
|____ <__tables__>
| |__wc_in(表資料目錄)
| | |____ data(檔案)
| | |
| | |____ <__schema__> (檔案)
| |__wc_out(表資料目錄)
| |____ data(檔案)
| |
| |____ <__schema__> (檔案)
|
|____ <__resources__>
|
|___table_resource_name (表資源)
| |____<__ref__>
|
|___ file_resource_name(檔案資源)
my_project
的同級目錄表示專案空間。wc_in
及wc_out
表示資料表,您在Jar命令中讀寫的表檔案資料會被下載到這級目錄下。- <__schema__>檔案中的內容表示表的元資訊,其檔案格式定義如下。
project=local_project_name table=local_table_name columns=col1_name:col1_type,col2_name:col2_type partitions=p1:STRING,p2:BIGINT --本樣本中不需要此字。
其中,列名與列類型使用英文冒號分隔,列與列之間使用英文逗號分隔。<__schema__>檔案的最前面需要聲明Project名字及Table名字,即
project_name.table_name
,並通過英文逗號與列的定義做分隔,即project_name.table_name,col1_name:col1_type,col2_name:col2_type,……
。 tables
目錄中data檔案表示表的資料。列的數量及資料必須與_schema_檔案的定義相符,不能多列或者少列,列之間使用逗號分隔。wc_in
的_schema_檔案內容如下。my_project.wc_in,key:STRING,value:STRING
data檔案內容如下。0,2
用戶端會從MaxCompute中下載表的元資訊及部分資料內容,並儲存到上述兩個檔案中。如果再次運行此樣本,將直接使用wc_in
目錄下的資料,不會再次下載。說明 僅在MapReduce的本地運行模式下支援從MaxCompute中下載資料的功能。wc_out
的_schema_檔案內容如下。my_project.wc_out,key:STRING,cnt:BIGINT
data檔案內容如下。0,1 2,1
用戶端會從MaxCompute中下載wc_out
表的元資訊,並儲存到_schema_檔案中。而本地運行後,產生的結果資料,則儲存到data檔案中。說明- 您也可以自行編輯_schema_及data檔案,而後將這兩個檔案放置在對應的表目錄下。
- 在本地運行時,用戶端檢測到表目錄已經存在,則不會從MaxCompute中下載這個表的資訊。本地的表目錄可以是MaxCompute中不存在的表。