开发ODPS MR任务

MaxCompute提供MapReduce编程接口。您可以通过创建ODPS MR类型节点并提交任务调度,使用MapReduce Java API编写MapReduce程序来处理MaxCompute中的数据。

前提条件

重要

您需要上传并提交、发布使用的资源后,再创建ODPS MR节点。

背景信息

MapReduce是一个分布式运算程序的编程框架,核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。MaxCompute提供两个版本的MapReduce编程接口:详情请参见MapReduce

  • MaxCompute MapReduce:MaxCompute的原生接口,执行速度快、开发快捷、不暴露文件系统。

  • MaxCompute扩展MapReduce(MR2):对MaxCompute MapReduce的扩展,支持更复杂的作业调度逻辑。MapReduce的实现方式与MaxCompute原生接口一致。

在DataWorks中,您可以通过ODPS MR节点实现MaxCompute MapReduce任务的调度运行,以及与其他作业的集成操作。

使用限制

ODPS MR节点的使用限制请参见使用限制

编辑代码:简单示例

以下以一个简单示例为您介绍ODPS MR节点的使用:统计wc_in表中各字符串出现的次数,并将结果写入wc_out表。

  1. 上传并提交、发布资源mapreduce example.jar,操作详情请参见创建并使用MaxCompute资源

    说明

    关于mapreduce example.jar包内部的实现逻辑请参见WordCount示例

  2. 在ODPS MR节点输入以下代码后运行。

    --创建输入表。
    CREATE TABLE if not exists wc_in (key STRING, value STRING);
    --创建输出表。
    CREATE TABLE if not exists wc_out (key STRING, cnt BIGINT);
        ---创建系统dual。
        drop table if exists dual;
        create table dual(id bigint); --如果工作空间不存在该伪表,则需要创建并初始化数据。
        ---向系统伪表初始化数据。
        insert overwrite table dual select count(*)from dual;
        ---向输入表wc_in插入示例数据。
        insert overwrite table wc_in select * from (
        select 'project','val_pro' from dual 
        union all 
        select 'problem','val_pro' from dual
        union all 
        select 'package','val_a' from dual
        union all 
        select 'pad','val_a' from dual
          ) b;
    -- 引用刚刚上传的JAR包资源,可以在资源管理栏中找到该资源,右键引用资源。
    --@resource_reference{"mapreduce-examples.jar"}
    jar -resources mapreduce-examples.jar -classpath ./mapreduce-examples.jar com.aliyun.odps.mapred.open.example.WordCount wc_in wc_out

    代码说明如下:

    • --@resource_reference:您可以右键单击资源名称,选择引用资源,即可自动产生该条语句。

    • -resources:引用到的JAR资源文件名。

    • -classpath:JAR包的路径。由于已经引用了资源,此处路径统一为./下的JAR包。

    • com.aliyun.odps.mapred.open.example.WordCount:执行过程调用JAR中的主类,需要和JAR中的主类名称保持一致。

    • wc_in:MR的输入表名称,已在上述代码中提前创建。

    • wc_out:MR的输出表名称,已在上述代码中提前创建。

    • 一个MR调用多个JAR资源时,classpath写法为-classpath ./xxxx1.jar,./xxxx2.jar,即两个路径之间用英文逗号(,)分隔。

    返回结果:OK

  3. 在ODPS SQL节点中查询输出表wc_out的数据。

    select * from wc_out;

    返回结果:

    +------------+------------+
    | key        | cnt        |
    +------------+------------+
    | package    | 1          |
    | pad        | 1          |
    | problem    | 1          |
    | project    | 1          |
    | val_a      | 2          |
    | val_pro    | 2          |
    +------------+------------+

编辑代码:进阶示例

更多场景的ODPS MR任务开发,请参见:

后续步骤

当您完成当前节点的任务开发后,通常您可进行以下操作。

  • 调度配置:配置节点的周期性调度属性。任务需要周期性调度运行时,您需要设置节点后续实际运行过程中的重跑属性、调度依赖关系等,操作详情请参见任务调度属性配置概述

  • 任务调试:对当前节点的代码进行测试运行,确认代码逻辑符合预期,操作详情请参见任务调试流程

  • 任务发布:完成所有开发相关操作后,您需要将所有任务节点进行发布,发布后节点即会根据调度配置结果进行周期性运行,操作详情请参见发布任务

  • MapReduce常见问题:您可了解MR任务执行过程中的常见问题,便于出现异常时快速排查解决。