开发者社区> 问答> 正文

MaxCompute用户指南:MapReduce:功能介绍:本地运行



基本阶段介绍


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

本地运行和分布式环境运行差异


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


  • 输入表行数限制:目前,最多只会下载 100 行数据。

  • 资源的使用:在分布式环境中,MaxCompute 会限制引用资源的大小,详情请参见 MR 限制汇总。但在本地运行环境中,不会有资源大小的限制。

  • 安全限制: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

关于 WordCount 示例的代码介绍请参见 WordCount 示例
如果您是第一次运行本地调试命令,命令成功结束后,会在当前路径下看到一个名为 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(文件资源)

  • my_project 的同级目录表示项目空间。wc_in 及 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 名字,即project_name.table_name,并通过英文逗号与列的定义做分隔,即:project_name.table_name,col1_name:col1_type,col2_name:col2_type,……。

  • tables 目录中 data 文件表示表的数据。列的数量及数据必须与 _schema_ 文件的定义相符,不能多列或者少列,列之间使用逗号分隔。
      wc_in 的 _schema_ 文件内容,如下所示:
    1.   my_project.wc_in,key:STRING,value:STRING

    data 的文件内容,如下所示:
    1. 0,2

    客户端会从 MaxCompute 中下载表的元信息及部分数据内容,并保存到上述两个文件中。如果再次运行此示例,将直接使用 wc_in 目录下的数据,不会再次下载。

    注意
    仅在 MapReduce 的本地运行模式下支持从 MaxCompute 中下载数据的功能,在 Eclipse 开发插件 中进行本地调试时,不支持将 MaxCompute 的数据下载到本地。

    wc_out 的 _schema_ 文件内容,如下所示:
    1.   my_project.wc_out,key:STRING,cnt:BIGINT

    data 的文件内容,如下所示:
    1.   0,1
    2.   2,1

    客户端会从 MaxCompute 中下载 wc_out 表的元信息,并保存到 _schema_ 文件中。而本地运行后,生成的结果数据,则保存到 data 文件中。

    注意

  • 您也可以自行编辑 _schema_ 及 data 文件,而后将这两个文件放置在对应的表目录下。

  • 在本地运行时,客户端检测到表目录已经存在,则不会从 MaxCompute 中下载这个表的信息。本地的表目录可以是 MaxCompute 中不存在的表。

展开
收起
行者武松 2017-10-23 17:41:30 2387 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
Data+AI时代大数据平台应该如何建设 立即下载
大数据AI一体化的解读 立即下载
极氪大数据 Serverless 应用实践 立即下载