MaxCompute 学习计划(三)

    xiaoxiao2025-08-23  12

    MapReduce/Graph

    当业务逻辑实在是复杂的时候,用SQL配合UDF(包括UDAF和UDTF)也无法实现的时候,可以使用MapReduce或Graph来实现。

    作业

    MapReduce

    MapReduce文档里的十多个示例程序每个都很重要,务必每个都看懂每行代码的作用。参考链接文档。使用Eclipse / InteliJ IDEA配置开发环境,可以修改warehouse里的数据然后观察任务的运行结果的变化。并用客户端工具运行任务,并了解-classpath和-resources参数的区别。通过System.out和System.err输出日志信息,并使用Logview观察服务器上的日志。使用开发工具开发实现开窗函数。了解沙箱。数加的大数据开发套件里的Open MR里的每个配置,对应到MR的main函数里是什么?可以参考SDK的说明。

    Graph

    同MR,请至少看懂实例代码。链接文档对理解示例非常有帮助。

    重难点

    二次排序。数据会先根据PartitionColumns的设置从Map发到不同Reduce后,先经过排序,然后根据OutputGroupingColumns相同的key进入reduce方法。所以OutputGroupingColumns的设置需要是OutputKeySortColumns的子集。理解了这些后也就可以理解为什么文档里的PartitionColumns和OutputGroupingColumns设置的都是一样的。而OutputKeySortColumns是在OutputGroupingColumns的基础上再增加排序列。 //先把数据PartitionColumns设置分配给不同的Reducer job.setPartitionColumns(new String[] { "i1" }); //在Reducer上执行排序,这样就能保证i2的顺序 job.setOutputKeySortColumns(new String[] { "i1", "i2" }); //这里数据已经都是排序好的,只需要根据i1里的内容来判断是否需要进同一个reduce方法 job.setOutputGroupingColumns(new String[] { "i1" }); 资源表和资源文件的使用方法在UDTF的例子也有提到。一般资源的读取可以写在setup里,只需要读一次。

    思考题

    如果有参数文件为什么不能直接打在jar包里,而是要用资源文件?阿里集团内部SQL+UDF的任务数远多于MapReduce任务,这个现象最直接的原因是什么?

    参考答案

    安全沙箱工程效率

    小技巧

    如何在本地调用odps服务器运行mapreduce任务MR循环心跳超时

    SDK 和 Tunnel

    使用SDK可以让我们可以使用JAVA/PYTHON语言调用MaxCompute命令。Tunnel命令可以让我们把数据批量上传/下载。

    作业

    SDK

    参考JAVA SDK / PYTHON SDK,对比客户端的工具里进入项目空间、表操作、实例操作、资源操作、函数操作,是否已经能自己实现呢?使用JAVA SDK可以到search.maven.org下载javadoc.jar。Python的用户可以参考详细文档。

    Tunnel

    Jar包下载和Endpoint配置。 UploadSession 和 DownloadSession 的说明。 Tunnel命令行是基于SDK开发的。需要了解命令行工具的基本使用方法。注意上传和下载的参数的用法。

    思考题

    基于SDK和TUNNEL实现用JAVA/PYTHON代码运行SQL,并把结果保存下来(需要考虑到Project的READ_TABLE_MAX_ROW限制,返回的数据不能超过10000行)。

    参考答案

    SQLTASK可以跑SQL。可以先把数据保存成一张临时表(CREATE TABLE XXX AS SELECT),并在任务结束后删除。下载数据使用TUNNEL。

    小技巧

    Datahub和Tunnel的使用场景的区别导入数据到分区表的多个分区 相关资源:七夕情人节表白HTML源码(两款)
    最新回复(0)