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