本文向您介紹本地和分布式環境運行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中不存在的表。