全部产品
MaxCompute

本地运行

更新时间:2017-06-07 13:26:11   分享:   

用户通过在jar命令中设置–local参数,在本地模拟MapReduce的运行过程,从而进行本地调试。本地运行时,客户端会从MaxCompute中下载本地调试所需要的输入表的元信息、数据,所需要的资源以及输出表的元信息,并将这些信息保存到一个名为warehouse的本地目录中。在程序运行结束后,会将计算结果输出到warehouse目录内的一个文件中。如果本地的warehouse目录下已经下载了输入表及被引用的资源,在下一次运行时,会直接引用warehouse下的数据及文件,而不会重复下载。

在本地运行过程中,仍然会启动多个Map及Reduce进程处理数据,但这些进程不是并发运行,而是依次串行运行。此外这个模拟运行过程与真正的分布式运行有如下差别:

  • 输入表行数限制:目前,最多只会下载100行数据;
  • 资源的使用:在分布式环境中,MaxCompute会限制引用资源的大小,详情请参考 应用限制 。但在本地运行环境中,不会有资源大小的限制;
  • 安全限制:MaxCompute MapReduce及UDF程序在分布式环境中运行时受到 Java沙箱 的限制。但在本地运行时,则没有此限制;

下面将给出一个简单的本地本地运行示例:

  1. odps:my_project> jar -l com.aliyun.odps.mapred.example.WordCount wc_in wc_out
  2. Summary:
  3. counters: 10
  4. map-reduce framework
  5. combine_input_groups=2
  6. combine_output_records=2
  7. map_input_bytes=4
  8. map_input_records=1
  9. map_output_records=2
  10. map_output_[wc_out]_bytes=0
  11. map_output_[wc_out]_records=0
  12. reduce_input_groups=2
  13. reduce_output_[wc_out]_bytes=8
  14. reduce_output_[wc_out]_records=2
  15. OK

备注:

如果用户是第一次运行本地调试命令,命令成功结束后,会在当前路径下看到一个名为warehouse的路径。warehouse的目录结构如下所示:

  1. <warehouse>
  2. |____my_project(项目空间目录)
  3. |____ <__tables__>
  4. | |__wc_in(表数据目录)
  5. | | |____ data(文件)
  6. | | |
  7. | | |____ <__schema__> (文件)
  8. | |__wc_out(表数据目录)
  9. | |____ data(文件)
  10. | |
  11. | |____ <__schema__> (文件)
  12. |
  13. |____ <__resources__>
  14. |
  15. |___table_resource_name (表资源)
  16. | |____<__ref__>
  17. |
  18. |___ file_resource_name(文件资源)

myproject的同级目录表示项目空间。wcin及wc_out表示数据表,用户在jar命令中读写的表文件数据会被下载到这级目录下。__schema文件中的内容表示表的元信息,其文件格式定义为:

  1. project=local_project_name
  2. table=local_table_name
  3. columns=col1_name:col1_type,col2_name:col2_type
  4. partitions=p1:STRING,p2:BIGINT -- 本示例中不需要此字

其中,列名与列类型使用冒号”:”分隔,列与列之间使用逗号”,”分隔。schema文件的最前面需要声明Project名字及Table名字,即projectname.tablename,使用逗号与列的定义做分隔。data文件表示表的数据。列的数量及数据必须与__schema文件的定义相符,不能多列或者少列,列之间使用逗号分隔。

wcin的_schema文件内容:

  1. my_project.wc_in,key:STRING,value:STRING

data文件内容示例:

  1. 0,2

客户端会从MaxCompute中下载表的元信息及部分数据内容并保存到上述两个文件中。如果再次运行这个示例,将直接使用wc_in目录下的数据,不会再次下载。需要特殊声明的是,从MaxCompute中下载数据的功能只在MapReduce的本地运行模式下才支持,在 Eclipse开发插件 中进行本地调试时,不支持将MaxCompute的数据下载到本地。

wcout的_schema文件内容:

  1. my_project.wc_out,key:STRING,cnt:BIGINT

data文件内容:

  1. 0,1
  2. 2,1

客户端会从MaxCompute现在wcout表的元信息,并保存到_schema文件中。而data文件的内容是在本地运行后,生成的结果数据文件。

Note:

  • 用户也可以自行编辑schema及data文件,而后将这两个文件放置在对应的表目录下。在本地运行时,客户端检测到表目录已经存在,则不会从MaxCompute中下载这个表的信息。本地的表目录可以是MaxCompute中不存在的表。
本文导读目录
本文导读目录
以上内容是否对您有帮助?