Studio进步UDF和MapReduce开发体验,通过简单瘦身

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

摘要:大数量总结服务(马克斯(Max)Compute)的效果详解和应用体验

马克斯Compute(原ODPS) MapReduce常见问题解答,odpsmaxcompute分区

马克斯(Max)Compute 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程序处理马克斯(Max)Compute中的数据。

通过马克斯(Max)Compute
Studio提供的端到端的协理,用户能火速开头和熟谙开发协调的UDF和MapReduce,升高功效。上面大家就以一个例证来介绍如何行使Studio来支付协调的UDF:

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

点此查看原文:http://click.aliyun.com/m/41384/

正文用到的

阿里云数加-大数码测算服务马克斯(Max)Compute产品地址:


创建MaxCompute Java Module

率先,你得在intellij中开创一个用于支付马克斯(Max)Compute
Java程序的module。具体的,File | new | module … module类型为马克斯Compute
Java,配置Java JDK和马克斯Compute
console的设置路径,点击next,输入module名,点击finish。

那边配置console的目标关键有五个:

  • 编排UDF和MR须求爱抚马克斯Compute框架的相关jar,而这几个jar在console的lib目录均存在,studio能帮你将这个lib自动导入到module的看重库中。

  • studio能集成console,一些动作通过console操作将至极有利。

亚洲必赢登录 1

迄今,一个能开发马克斯Compute
java程序的module已建立,如下图的jDev。主要目录包括:

  • src(用户支出UDF|MR程序的源码目录)
  • examples(示例代码目录,蕴含单测示例,用户可参看那里的例子开发自己的次第或编辑单测)
  • warehouse(本地运行须要的schema和data)

亚洲必赢登录 2

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

前言

1. 作业应运而生ClassNotFoundException和NoClassDefFoundError非常败北?

A:
对于ClassNotFoundException很是,一般是依赖的class不在你的jar包中,须要把看重的库打到作业jar包中或者独立上传,并在-resources中指定;
对此NoClassDefFoundError分外,先看看依赖class是还是不是存在于你的jar包,很多情景下是出于版本争辩造成的,可能您依靠的库和服务端自带的jar有顶牛。


创建UDF

若果大家要促成的UDF须要是将字符串转换为题写(内建函数TOLOWER已已毕该逻辑,那里大家只是经过这一个大概的需求来演示如何通过studio开发UDF)。studio提供了UDF|UDAF|UDTF|Mapper|Reducer|Driver的模板,那样用户只要求编制自己的作业代码,而框架代码会由模板自动填写。

    1. 在src目录右键 new | 马克斯Compute Java

亚洲必赢登录 3

    1. 输入类名,如myudf.MyLower,选取种类,那里大家拔取UDF,点击OK。

亚洲必赢登录 4

  • 3.
    模板已自行填充框架代码,大家只需求编制将字符串转换成小写的函数代码即可。

亚洲必赢登录 5

解决方案:

MapReduce已经有文档,用户可以参见文档使用。本文是在文档的根底上做一些类似注解及细节解释上的行事。

2. MR提交命令中-resources和-classpath的知晓?

A:
在马克斯Compute中近乎MR那类分布式数据处理框架,用户的代码一般在偏下八个地方实施:

  • 运行客户端的经过/子进度:这里的用户代码负责准备进行环境、配置义务参数、提交义务,入口日常是main
    class。它不受沙箱限制,执行逻辑由用户代码驱动。同样的,这里的classpath由用户配置,或在console中使用-classpath选项添加看重的classpath路径。
  • 远程执行的worker进度:那里的代码负责执行多少处理逻辑,入口是mapper/reducer
    class。它受限沙箱限制,且执行逻辑由马克斯(Max)Compute框架驱动。用户在命令行配置的-classpath在那边不算(分明,远程机器的门路和客户端机器的门路不可以有限协助同一),任何第三方信赖必须作为resource提前上传至马克斯Compute,并在付出职责时使用-resources选项或JobConf.setResources(String[])来设定。

测试UDF

UDF或MR开发好后,下一步就是要测试自己的代码,看是还是不是合乎预期。studio提供三种测试办法:

先是步:大于10M的resources通过马克斯Compute CLI客户端上传,

功能介绍

3. Mapper数目如何设置?

A:假若没有输入表是可以一向指定map数目setNumMapTasks
   
有输入表的话,setNumMapTasks不见效,须要通过setSplitSize来控制map数,默认是256M。


单元测试

依傍于马克斯(Max)Compute提供的Local
Run框架,您只要求像写普通的单测那样提供输入数据,断言输出就能方便的测试你协调的UDF或MR。在examples目录下会有各体系型的单测实例,可参考例子编写自己的unit
test。那里我们新建一个MyLowerTest的测试类,用于测试大家的MyLower:

亚洲必赢登录 6

客户端下载地址:

MapReduce

4. Reducer数目怎样设置?

A: 通过JobConf的接口setNumReduceTasks可以安装。
对于pipeline作业,Jobconf的接口同样可以设置,只然而设置后有着reduce阶段的个数都是同等的值。
假诺要分等级设置,设置方式如下:
Pipeline pipeline = Pipeline.builder()
.addMapper(TokenizerMapper.class)

.addReducer(SumReducer.class).setNumTasks(5)

.addReducer(IdentityReducer.class).setNumTasks(1).createPipeline();


sample数据测试

洋洋用户的须要是能sample部分线上表的数据到本机来测试,而那studio也提供了支撑。在editor中UDF类MyLower.java上右键,点击”运行”菜单,弹出run
configuration对话框,配置马克斯(Max)Compute
project,table和column,那里我们想将hy_test表的name字段转换为小写:

亚洲必赢登录 7

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

亚洲必赢登录 8

Studio进步UDF和MapReduce开发体验,通过简单瘦身。客户端配置AK、EndPoint:

亚洲必赢登录 9

5. 报错java.lang.OutOfMemoryError: Java heap space,MR的内存设置问题?

A:mapper或reducer的内存由两有些组成,JVM的heap memory和JVM
之外的框架相关内存。
   
设置JVM内存的接口是(都是Java逻辑的话,调节内存是用上边四个接口):
    setMemoryForMapperJVMsetMemoryForReducerJVM (默认是1024
单位MB)
    设置框架内存(c++部分的)的接口是(一般不必要安装):
    setMemoryForMapTasksetMemoryForReduceTask(默认是2048 单位MB)


发布UDF

好了,大家的MyLower.java测试通过了,接下去咱们要将其包装成jar资源(这一步可以因而IDE打包,参考用户手册)上传到马克斯Comptute服务端上:

    1. 在马克斯Compute菜单选取Add Resource菜单项:

亚洲必赢登录 10

    1. 采用要上传到哪个马克斯Compute
      project上,jar包路径,要登记的资源名,以及当资源或函数已存在时是还是不是强制更新,然后点击OK。

亚洲必赢登录 11

  • 3.
    jar包上传成功后,接下去就可以注册UDF了,在马克斯Compute菜单接纳Create
    Function菜单项。

亚洲必赢登录 12

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

亚洲必赢登录 13

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

说起MapReduce就必需WordCount,我更加喜爱文档里的这一个图形。

6. mr 输出到表或某个分区里时,输出的情势时扩大仍然覆盖 ?

A: 会覆盖输出表或分区从前的始末


生育应用

上传成功的jar资源和注册成功的function(在Project
Explorer相应project下的Resources和Functions节点中就能及时看到,双击也能显得反编译的源码)就可见实际生育应用了。大家开拓studio的sql
editor,就能心情舒畅的应用大家刚写好的mylower函数,语法高亮,函数签名突显都不在话下:

亚洲必赢登录 14

第二步:近来透过马克斯Compute
CLI上传的资源,在Dataworks左侧资源列表是找不到的,只可以通过list
resources查看确认资源;

比如说有一张很大的表。表里有个String字段记录的是用空格分割开单词。最终索要统计所有记录中,每个单词出现的次数是稍稍。那完全的猜测流程是

7. 二次排序成效,MR相关配置解释,setMapOutputKeySchema? setOutputKeySortColumns? setPartitionColumns? setOutputGroupingColumns?

A:
平常情形下,GroupingColumns包括在KeySortColumns中,KeySortColumns和PartitionColumns要含有在Key
schema中。

  • 在Map端,Mapper输出的Record会根据设置的PartitionColumns总括哈希值,决定分配到哪些Reducer,会依照KeySortColumns对Record进行排序。
  • 在Reduce端,输入Records在遵守KeySortColumns排序好后,会依据GroupingColumns指定的列对输入的Records举办分组,即会挨个遍历输入的Records,把GroupingColumns所指定列相同的Records作为一回reduce函数调用的输入。

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:\odps\clt\wordcount.jar
    com.aliyun.odps.examples.mr.WordCount wc_in wc_out;

list resources;//查看资源

亚洲必赢登录,输入阶段:依照工作量,生成多少个Mapper,把那个表的数据分配给这个Mapper。每个Mapper分配到表里的一片段记录。

8. 请问mr job的map或者reduce如若想提前终止job, 执行什么样代码?

A:
抛很是就足以,例如throw new RuntimeException("XXX"); 会导致job失利,job也就甘休了。


关于MaxCompute

欢迎参与马克斯(Max)Compute钉钉群商讨
亚洲必赢登录 15

读书原文请点击

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

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

Map阶段:每个Mapper针对每条数据,解析其中的字符串,用空格切开字符串,得到一组单词。针对内部每个单词,写一条记下

9. 请问map阶段有时候为何会有interrupted,可是map 最后依旧达成了?

A:因为有backup instance在跑,发生backup instance一般是因为有好几map
instances分明慢于其余的,就会在其余机器上启动一个一如既往的worker来跑,这些效能看似于hadoop的展望执行,只要其中某个成功跑完,其余的就足以停掉了(变为interrupted)


亚洲必赢登录 16

Shuffle阶段-合并排序:也是发生在Mapper上。会先对数码举办排序。比如WordCount的例证,会按照单词进行排序。排序后的会合,又称Combiner阶段,因为前边已经依照单词排序过了,相同的单词都是连在一起的。那能够把2个相邻的合并成1个。Combiner可以减掉在继续Reduce端的计算量,也得以减小Mapper往Reducer的数目传输的工作量。

10. mr怎样收获输入表的消息?

A:
参考:
使用Mapper.TaskContext的接口getInputTableInfo(),会获取输入表的TableInfo对象
每个map
worker只会处理来自单一表或分区的数码,在mapper的setup阶段得到该音信即可。


由此上述格局,大家可以在Dataworks上跑大于10M的MR作业。

Shuffle阶段-分配Reducer:把Mapper输出的单词分发给Reducer。Reducer获得数码后,再做五回排序。因为Reducer获得的多寡已经在Mapper里已经是排序过的了,所以那边的排序只是指向排序过的数量做统一排序。

11. 什么运用自定义partitioner ?

A: 参考如下代码:

import com.aliyun.odps.mapred.Partitioner;

...

public static class MyPartitioner extends Partitioner {

@Override
public int getPartition(Record key, Record value, int numPartitions) {
  // numPartitions即对应reducer的个数
  // 通过该函数决定map输出的key value去往哪个reducer
  String k = key.get(0).toString();
  return k.length() % numPartitions;
}
}

在jobconf里开展安装:jobconf.setPartitionerClass(MyPartitioner.class)
此外须求在jobconf里鲜明指定reducer的个数:jobconf.setNumReduceTasks(num)


作者:隐林

Reduce阶段:Reducer拿前边已经排序好的输入,相同的单词的享有输入进去同一个Redue循环,在循环里,做个数的拉长。

12. 怎么着设置Key排连串的逐一(ASC or DESC)?

A: 类似如下: 
//key按那几个列排序
job.setOutputKeySortColumns(new String[] { "custid", "msgtype","amount" });
//设置每个列正序如故倒序
job.setOutputKeySortOrder(new SortOrder[]{SortOrder.ASC,SortOrder.ASC,SortOrder.DESC});


​本文为云栖社区原创内容,未经同意不得转发。回到新浪,查看越多

出口阶段:输出Reduce的测算结果,写入到表里或者重回给客户端。

13. 报错kInstanceMonitor提姆(Tim)eout, usually caused by bad udf performance,怎么解决?

A:
报这么些错的案由是mapper或者reducer有逻辑执行时间专程长,且并未从输入表的读数据或者写出多少,当先默认10min后,会报那么些相当;有三种缓解办法:

  • 将过期的时光调的更长一些,可以安装参数odps.function.timeout抑或安装JobConf#setFunctionTimeout,最长可以设置为3600,即一个小时。
  • 限期向框架汇报心跳 TaskContext#progress(),注意progress不要调用过于频繁,否则有性能问题,能担保四次调用之间的光阴低于设置的timeout时间即可。

权利编辑:

拓展MapReduce

14. 框架map或者reduce接口里的Record对象是复用的?

A:是的,为了削减对象的支出,框架对于map,
reduce接口里的Record对象是复用的,也就是说每一回map或者reduce的历次迭代,Record对象没有变,只是其中的多少变化了。如若要保留上一回的Record须要toArray()得到里头的数目对象进行保存。具体可以参见:


一经Reduce前边还要求做更加的Reduce统计,可以用拓展MapReduce模型(简称MRR)。MRR其实就是Reduce阶段为止后,不直接出口结果,而是再度经过Shuffle后接别的一个Reduce。

15. 写完一条记下后,想把outputRecord里面的数据清空,那些要怎么弄,要不然,再写下一条记下的时候,如果某个字段没有值,就会用原来的记录填充?

   
A:假使写的Record对象是复用的,即使某个值没有新set,则仍然封存着后边的值对象。近年来一贯不一向可以清空的api能够用,可以透过Record.getColumnCount得到column
count,用一个for 循环去一一set null即可。


Q:怎样落实M->R->M->R那种逻辑吗

16. MR支持多路输入输出,应该怎么写这么的次第?

    A:参考:多路输入输出示例
对此多路输入,每个输入源对应单独的一个Map阶段,即一个map
task只会读取一个输入表的数额。可以指定一个表的一体系分区列来作为一个输入,例如a,
b, c三分区列,指定分区时方可指定a=1/b=1/c=2类似这样。
   
借使同样级其他三个分区,则供给各自作为单身的分区输入,例如一个表的a=1和a=3分区作为多路输入的俩见仁见智的输入,须求各自指定。
    maponly的课业也一律支持多路输入输出,完结方式类似。


A:在Reduce代码里直接嵌套上Map的逻辑就可以了,把第一个M的办事在前一个R里已毕,而不是作为计算引擎调度范围上的一个独自步骤,比如

17. sdk怎么样通过instance获取logview url?

A: 可以应用如下的主意获得logview的url

RunningJob rj = JobClient.runJob(job);
com.aliyun.odps.Instance instance = SessionState.get().getOdps().instances().get(rj.getInstanceID());
String logview = SessionState.get().getOdps().logview().generateLogView(instance, 7 * 24);
System.out.println(logview);

reduce(){

18.  MR作业怎么着指定输入表的Project名字?

A: 可以按如下的艺术指定:

InputUtils.addTable(TableInfo.builder().projectName("test_project_name").tableName("test_table_name").build(), job);

通过TableInfo.builder()projectName接口来指定,假如不指定,默许值是在运作MR作业的丰裕project.


    …

19. 不等的Mapper或者Reducer如何得到可分其他ID?

A:
有些业务场景需求区分差距的Mapper或Reducer,可以因此TaskContextgetTaskID接口获取到一个Mapper/Reducer独有的id。

String id = context.getTaskID().toString();

    map();

20. MR代码里有JNI的调用该怎么写?

A:首先project要开通jni的相干权限,在编译准备好so文件后,要求将so以file类型的花样丰裕为Resource,并在MR作业提交的时候-resources参数里指定,例如:

add file libtestjni.so as libtestjni.so -f;
jar -resources testmr.jar,libtestjni.so -classpath testmr.jar Test.MRDriver xxx xxx;

在MR的java代码应用jni的时候要小心,使用办法如下:

System.loadLibrary("testjni");    // 这里不要写成libtestjni.so,否则会报错,原因是java会自动添加lib前缀和.so后缀的

jni的采用方法可以参见:


}

21. MR作业读取表资源,Archive资源应该怎样操作?

A: 马克斯(Max)Compute上的资源(file, table,
archive等)可以类比于Hadoop的DistributedCache来领会,同样是会散发到种种统计节点上去,worker再从地方来读取,由此资源文件不能过大,否则分发资源就是一个瓶颈,近期默许有2G的总资源大小限制。
读取资源表,Archive资源总体上来说和读取file类型资源是相仿的,只是接纳的接口差距。读取资源文件的措施可以参见文档:使用资源示例

对此表资源:
将表添加为资源表: add table xxx as xxx -f;
读资源表的接口为:TaskContext#readResourceTable

对于Archive资源:
将地点archive(.tar, .zip等archive文件)上传为资源: add archive as xxx
-f;
读archive资源的接口为:TaskContext#readResourceArchiveAsStream


…不断更新中…

MapReduce常见问题解答,odpsmaxcompute分区 本文用到的
阿里云数加-大数据统计服务马克斯Compute产品地址:…

快快早先

运行条件

工欲善其事,必先利其器。MR的开销提供了根据IDEA和Eclipse的插件。其中相比较推荐用IDEA的插件,因为IDEA大家还在不停做迭代,而Eclipse已经告一段落做创新了。而且IDEA的作用也比较充裕。

具体的插件的装置方式步骤可以参考文档,本文不在赘言。

别的后续还索要用到客户端,可以参照文档安装。

两次三番为了进一步明亮地印证问题,我会尽量地在客户端上操作,而不用IDEA里已经合并的法子。

线上运行

以WordCount为例,文档可以参见这里

步骤为

做多少准备,包含创制表和拔取Tunnel命令行工具导入数据

将代码拷贝到IDE里,编译打包成mapreduce-examples.jar

在odpscmd里执行add jar命令:

add jar /JarPath/mapreduce-examples.jar -f;

那边的/JarPath/mapreduce-examples.jar的路径要替换费用地实际的文本路径。这一个命令能把本地的jar包传到服务器上,-f是要是已经有同名的jar包就覆盖,实际行使中对此是报错仍旧覆盖要求谨慎考虑。

在odpscmd里执行

`jar -resources mapreduce-examples.jar -classpath
mapreduce-examples.jar

com.aliyun.odps.mapred.open.example.WordCount wc_in wc_out`

等候作业执行成功后,可以在SQL通过查询wc_out表的数码,看到进行的结果

功能解读

义务交给

职分的是在马克斯(Max)Comput(ODPS)上运行的,客户端通过jar命令发起呼吁。

相比后边的神速伊始,可以见见除了数据准备阶段,和MR相关的,有资源的上传(add
jar步骤)和jar命令启动MR作业两步。

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

jar -resources mapreduce-examples.jar -classpath mapreduce-examples.jar
com.aliyun.odps.mapred.open.example.WordCount wc_in wc_out

本条命令发起作业。MapReduce的义务是运行在马克斯Compute集群上的,客户端要求经过那些命令把任务运行相关的信息报告集群。

客户端先解析-classpath参数,找到main方法有关的jar包的地点

据悉com.aliyun.odps.mapred.open.example.WordCount,找到main方法所在类的门道和名字

wc_in wc_out是传给main方法的参数,通过解析main方法传入参数String[]
args得到那些参数

-resources告诉服务器,在运作职责的时候,须要运用的资源有怎么着。

JobConfig

JobConf定义了那几个职分的细节,仍旧这么些图,解释一下JobConf的别的设置项的用法。

输入数据

InputUtils.addTable(TableInfo table, JobConf conf)设置了输入的表。

setSplitSize(long size)通过调整分片大小来调动Mapper个数,单位
MB,默许256。Mapper个数不经过void setNumMapTasks(int n)设置。

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

Map阶段

setMapperClass(Class theClass)设置Mapper使用的Java类。

setMapOutputKeySchema(Column[] schema)设置 Mapper 输出到 Reducer 的
Key 行属性。

setMapOutputValueSchema(Column[] schema)设置 Mapper 输出到 Reducer 的
Value 行属性。和上个设置一起定义了Mapper到Reducer的数目格式。

Shuffle-合并排序

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

setOutputKeySortOrder(JobConf.SortOrder[] order)设置 Key
排系列的顺序。

setCombinerOptimizeEnable(boolean
isCombineOpt)设置是还是不是对Combiner进行优化。

setCombinerClass(Class theClass)设置作业的 combiner。

Shuffle-分配Reduce

setNumReduceTasks(int n)设置 Reducer 职务数,默许为 Mapper 职责数的
1/4。如果是Map
only的天职,须要安装成0。可以参考这里。

setPartitionColumns(String[]
cols)设置作业的分区列,定义了数量分配到Reducer的分红政策。

Reduce阶段

setOutputGroupingColumns(String[]
cols)数据在Reducer里排序好了后,是怎么样数据进入到同一个reduce方法的,就是看这里的装置。一般的话,设置的和setPartitionColumns(String[]
cols)一样。可以看看二次排序的用法。

setReducerClass(Class theClass)设置Reducer使用的Java类。

数码输出

setOutputOverwrite(boolean
isOverwrite)设置对输出表是还是不是进行覆盖。类似SQL里的Insert into/overwrite
Talbe的不一致。

OutputUtils.addTable(TableInfo table, JobConf
conf)设置了出口的表。多路输入输出能够参考这里。

其他

void setResources(String
resourceNames)有和jar命令的-resources一样的效益,但是优先级高于-resources(也就是说代码里的装置优先级相比高)

最后通过JobClient.runJob(job);客户端往服务器发起了这一个MapReduce作业。

详细的SDK的文档,可以在Maven里下载。这是下载地址。

Map/Reduce

读表

在一个Mapper里,只会读一张表,不一致的表的数据会在分化的Mapper
worker上运行,所以可以用示例里的那个办法先得到这么些Mapper读的是怎样表。

资源表/文件

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

生产及周期调度

任务交给

客户端做的就是给服务器发起义务的调度的吩咐。以前涉嫌的jar命令就是一种方法。鉴于实际上运行景况的多样性,这里介绍任何的两种普遍方法:

odpscmd
-e/-f:odpscmd的-e命令可以在shell脚本里直接运行一个odpscmd里的下令,所以可以在shell脚本里运行odpscmd
-e ‘jar -resources
xxxxxx’那样的命令,在shell脚本里调用MapReduce作业。一个完好的例证是

odpscmd  -u accessId  -p  accessKey  –project=testproject
–endpoint=  -e “jar -resources
aaa.jar -classpath ./aaa.jar com.XXX.A”

要是在odpscmd的安顿文件里已经布署好了,那只必要写-e的有些。

-f和-e一样,只是把命令写到文件里,然后用odpscmd -f
xxx.sql引用这几个文件,那那几个文件里的多个指令都会被执行。

大数目开发套件可以配备MapReduce作业。

大数量开发套件可以布置Shell作业。可以在Shell作业里参考下面的措施用odpscmd
-e/-f来调度MapReduce作业。

在JAVA代码里一向调用MapReduce作业,可以经过安装SessionState.setLocalRun(false); 达成,具体可以参见这里。

定时调度

大数据开发套件的定时义务/工作流可以布置调度周期和义务看重,协作前边提到的措施里的MapReduce作业/Shell作业,达成职分的调度。

出品范围

安全沙箱

沙箱是马克斯Compute的一套安全系统,使得在MaxCompute上运行的课业无法获取其余用户的音讯,也无力回天获取系统的有的新闻。主要包含以下几点,完整的列表可以参照文档

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

心中无数起三四线程/多进程

不匡助反射/自定义类加载器(所以不接济部分第三方包)

差异意读本地文件(比如JSON里就用到了,就需求改用GSON)

不允许JNI调用

别的限制

详见马克斯(Max)Compute MR
限制项汇总

网站地图xml地图