通过简单瘦身,Studio提升UDF和MapReduce开发体验

2019-07-20 07:22栏目:科技传媒

责任编辑:

客户端做的就是给服务器发起任务的调度的指令。之前提到的jar命令就是一种方法。鉴于实际上运行场景的多样性,这里介绍其他的几种常见方法:

sample数据测试

很多用户的需求是能sample部分线上表的数据到本机来测试,而这studio也提供了支持。在editor中UDF类MyLower.java上右键,点击"运行"菜单,弹出run configuration对话框,配置MaxCompute project,table和column,这里我们想将hy_test表的name字段转换为小写:

图片 1

点击OK后,studio会先通过tunnel自动下载表的sample数据到本地warehouse(如图中高亮的data文件),接着读取指定列的数据并本地运行UDF,用户可以在控制台看到日志输出和结果打印:

图片 2

客户端配置AK、EndPoint:

Shuffle阶段-分配Reducer:把Mapper输出的单词分发给Reducer。Reducer拿到数据后,再做一次排序。因为Reducer拿到的数据已经在Mapper里已经是排序过的了,所以这里的排序只是针对排序过的数据做合并排序。

测试UDF

UDF或MR开发好后,下一步就是要测试自己的代码,看是否符合预期。studio提供两种测试方式:

图片 3

不允许JNI调用

MapReduce

studio对MapReduce的开发流程支持与开发UDF基本类似,主要区别有:

  • MapReduce程序是作用于整张表的,而且输入输出表在Driver中已指定,因此如果使用sample数据测试的话在run configuration里只需要指定project即可。

  • MapReduce开发好后,只需要打包成jar上传资源即可,没有注册这一步。

  • 对于MapReduce,如果想在生产实际运行,可以通过studio无缝集成的console来完成。具体的,在Project Explorer Window的project上右键,选择Open in Console,然后在console命令行中输入类似如下的命令:
    jar -libjars wordcount.jar -classpath D:odpscltwordcount.jar com.aliyun.odps.examples.mr.WordCount wc_in wc_out;

用户在DataWorks上执行MapReduce作业的时候,文件大于10M的JAR和资源文件不能上传到Dataworks,导致无法使用调度去定期执行MapReduce作业。

说起MapReduce就少不了WordCount,我特别喜欢文档里的这个图片。

单元测试

依赖于MaxCompute提供的Local Run框架,您只需要像写普通的单测那样提供输入数据,断言输出就能方便的测试你自己的UDF或MR。在examples目录下会有各种类型的单测实例,可参考例子编写自己的unit test。这里我们新建一个MyLowerTest的测试类,用于测试我们的MyLower:

图片 4

作者:隐林

大数据开发套件的定时任务/工作流可以配置调度周期和任务依赖,配合前面提到的方法里的MapReduce作业/Shell作业,实现任务的调度。

MaxCompute Studio提升UDF和MapReduce开发体验,maxcomputemapreduce

UDF全称User Defined Function,即用户自定义函数。MaxCompute提供了很多内建函数来满足用户的计算需求,同时用户还可以创建自定义函数来满足定制的计算需求。用户能扩展的UDF有三种:UDF(User Defined Scalar Function),UDTF(User Defined Table Valued Function)和UDAF(User Defined Aggregation Function)。

同时,MaxCompute也提供了MapReduce编程接口,用户可以使用MapReduce提供的接口(Java API)编写MapReduce程序处理MaxCompute中的数据。

通过MaxCompute Studio提供的端到端的支持,用户能快速开始和熟悉开发自己的UDF和MapReduce,提高效率。下面我们就以一个例子来介绍如何使用Studio来开发自己的UDF:

​本文为云栖社区原创内容,未经允许不得转载。返回搜狐,查看更多

MapReduce

创建UDF

假设我们要实现的UDF需求是将字符串转换为小写(内建函数TOLOWER已实现该逻辑,这里我们只是通过这个简单的需求来示例如何通过studio开发UDF)。studio提供了UDF|UDAF|UDTF|Mapper|Reducer|Driver的模板,这样用户只需要编写自己的业务代码,而框架代码会由模板自动填充。

    1. 在src目录右键 new | MaxCompute Java

图片 5

    1. 输入类名,如myudf.MyLower,选择类型,这里我们选择UDF,点击OK。

图片 6

  • 3. 模板已自动填充框架代码,我们只需要编写将字符串转换成小写的函数代码即可。

图片 7

第一步:大于10M的resources通过MaxCompute CLI客户端上传,

客户端发起add jar/add file等资源操作,把在客户端的机器(比如我测试的时候是从我的笔记本)上,运行任务涉及的资源文件传到服务器上。这样后面运行任务的时候,服务器上才能有对应的代码和文件可以用。如果以前已经传过了,这一步可以省略。

关于MaxCompute

欢迎加入MaxCompute钉钉群讨论
图片 8

阅读原文请点击

Studio提升UDF和MapReduce开发体验,maxcomputemapreduce UDF全称User Defined Function,即用户自定义函数。MaxCompute提供了很多内建函数来满足用...

通过上述方法,我们可以在Dataworks上跑大于10M的MR作业。

setOutputOverwrite(boolean isOverwrite)设置对输出表是否进行覆盖。类似SQL里的Insert into/overwrite Talbe的区别。

发布UDF

好了,我们的MyLower.java测试通过了,接下来我们要将其打包成jar资源(这一步可以通过IDE打包,参考用户手册)上传到MaxComptute服务端上:

    1. 在MaxCompute菜单选择Add Resource菜单项:

图片 9

    1. 选择要上传到哪个MaxCompute project上,jar包路径,要注册的资源名,以及当资源或函数已存在时是否强制更新,然后点击OK。

图片 10

  • 3. jar包上传成功后,接下来就可以注册UDF了,在MaxCompute菜单选择Create Function菜单项。

图片 11

  • 4. 选择需要使用的资源jar,选择主类(studio会自动解析资源jar中包含的主类供用户选择),输入函数名,然后点击OK。

图片 12

原标题:通过简单瘦身,解决Dataworks 10M文件限制问题

如果Reduce后面还需要做进一步的Reduce计算,可以用拓展MapReduce模型(简称MRR)。MRR其实就是Reduce阶段结束后,不直接输出结果,而是再次经过Shuffle后接另外一个Reduce。

创建MaxCompute Java Module

首先,你得在intellij中创建一个用于开发MaxCompute Java程序的module。具体的,File | new | module ... module类型为MaxCompute Java,配置Java JDK和MaxCompute console的安装路径,点击next,输入module名,点击finish。

这里配置console的目的主要有两个:

  • 编写UDF和MR需要依赖MaxCompute框架的相关jar,而这些jar在console的lib目录均存在,studio能帮您将这些lib自动导入到module的依赖库中。

  • studio能集成console,一些动作通过console操作将十分方便。

图片 13

至此,一个能开发MaxCompute java程序的module已建立,如下图的jDev。主要目录包括:

  • src(用户开发UDF|MR程序的源码目录)
  • examples(示例代码目录,包括单测示例,用户可参考这里的例子开发自己的程序或编写单测)
  • warehouse(本地运行需要的schema和data)

图片 14

解决方案:

Shuffle阶段-合并排序:也是发生在Mapper上。会先对数据进行排序。比如WordCount的例子,会根据单词进行排序。排序后的合并,又称Combiner阶段,因为前面已经根据单词排序过了,相同的单词都是连在一起的。那可以把2个相邻的合并成1个。Combiner可以减少在后续Reduce端的计算量,也可以减少Mapper往Reducer的数据传输的工作量。

生产使用

上传成功的jar资源和注册成功的function(在Project Explorer相应project下的Resources和Functions节点中就能及时看到,双击也能显示反编译的源码)就能够实际生产使用了。我们打开studio的sql editor,就能愉快的使用我们刚写好的mylower函数,语法高亮,函数签名显示都不在话下:

图片 15

list resources;//查看资源

无法访问外部数据源(不能当爬虫,不能读RDS等)

第二步:目前通过MaxCompute CLI上传的资源,在Dataworks左侧资源列表是找不到的,只能通过list resources查看确认资源;

    map();

客户端下载地址:

任务提交

第三步:瘦身Jar,因为Dataworks执行MR作业的时候,一定要本地执行,所以保留个main就可以;

不允许读本地文件(比如JSON里就用到了,就需要改用GSON)

add jar C:test_mrtest_mr.jar -f;//添加资源

Reduce阶段

摘要: 用户在DataWorks上执行MapReduce作业的时候,文件大于10M的JAR和资源文件不能上传到Dataworks,导致无法使用调度去定期执行MapReduce作业。 解决方案: jar -resources test_mr.

setOutputKeySortColumns(String[] cols)设置 Mapper 输出到 Reducer 的 Key 排序列。

做数据准备,包括创建表和使用Tunnel命令行工具导入数据

客户端先解析-classpath参数,找到main方法相关的jar包的位置

这个命令发起作业。MapReduce的任务是运行在MaxCompute集群上的,客户端需要通过这个命令把任务运行相关的信息告诉集群。

图片 16

不支持反射/自定义类加载器(所以不支持一些第三方包)

odpscmd -e/-f:odpscmd的-e命令可以在shell脚本里直接运行一个odpscmd里的命令,所以可以在shell脚本里运行odpscmd -e 'jar -resources xxxxxx'这样的命令,在shell脚本里调用MapReduce作业。一个完整的例子是

工欲善其事,必先利其器。MR的开发提供了基于IDEA和Eclipse的插件。其中比较推荐用IDEA的插件,因为IDEA我们还在持续做迭代,而Eclipse已经停止做更新了。而且IDEA的功能也比较丰富。

快速开始

输入数据

JobConfig

功能解读

setMemoryForJVM(int mem)设置 JVM虚拟机的内存资源,单位:MB,默认值 1024.

前言

Shuffle-合并排序

安全沙箱

资源表和文件可以让一些小表/小文件可以方便被读取。鉴于读取数据的限制需要小于64次,一般是在setup里读取后缓存起来,具体的例子可以参考这里。

Map阶段

-resources告诉服务器,在运行任务的时候,需要用到的资源有哪些。

大数据开发套件可以配置MapReduce作业。

运行环境

版权声明:本文由金沙国际登录网址发布于科技传媒,转载请注明出处:通过简单瘦身,Studio提升UDF和MapReduce开发体验