首页金莎娱乐官网最全网站 › 可能你依赖的库和服务端自带的jar有冲突,大数据计算服务(MaxCompute

可能你依赖的库和服务端自带的jar有冲突,大数据计算服务(MaxCompute

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

详见马克斯Compute M翼虎限制项汇总

单元测量试验

信赖于马克斯Compute提供的Local
Run框架,您只必要像写普通的单测那样提供输入数据,断言输出就会有益的测量检验你本身的UDF或MLX570。在examples目录下会有各连串型的单测实例,可参看例子编写自个儿的unit
test。这里我们新建几个MyLowerTest的测量试验类,用于测验大家的MyLower:

图片 1

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();


假如急需,则生成贰个 instance, 发送给 Scheduler。 

其三步:塑体Jar,因为Dataworks推行M库罗德作业的时候,一定要本地实施,所以保留个main就足以;

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

马克斯Compute Studio进步UDF和MapReduce开辟体验,maxcomputemapreduce

UDF全称User Defined
Function,即用户自定义函数。马克斯Compute提供了大多内建函数来知足用户的一个钱打二14个结须要,同一时间用户还能创立自定义函数来满足定制的总结需要。用户能扩张的UDF有两种:UDF(User
Defined Scalar Function),UDTF(User Defined Table Valued
Function)和UDAF(User Defined Aggregation Function)。

何况,马克斯Compute也提供了MapReduce编制程序接口,用户能够利用MapReduce提供的接口(Java
API)编写MapReduce程序管理马克斯Compute中的数据。

因此马克斯Compute
Studio提供的端到端的援助,用户能快捷起始和熟知开辟自个儿的UDF和MapReduce,升高效能。上面大家就以二个事例来介绍怎样选取Studio来开采自个儿的UDF:

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)


总括层正是飞天内核(Apsara
Core),运营在和调节层相互独立的持筹握算集群上。包罗Pangu(布满式文件系统)、Fuxi(能源调节种类)、Nuwa/ZK(Naming服务)、Shennong(监控模块)等。ODPS中的元数据存款和储蓄在Ali云总括的另一个盛放劳动OTS(Open
Table
Service,开放结构化数据服务)中,元数据内容根本不外乎用户空间元数据、Table/Partition
Schema、ACL、Job元数据、安全系统等。

原标题:通过轻松节食,化解Dataworks 10M文本限制难点

沙箱是马克斯Compute的一套安全系统,使得在MaxCompute上运营的课业不能够赢得别的用户的音信,也无从获取系统的一对新闻。首要回顾以下几点,完整的列表能够参照文档

测试UDF

UDF或MCR-V开采好后,下一步正是要测验本人的代码,看是否适合预期。studio提供三种测量检验方法:

15. 写完一条记下后,想把outputRecord里面包车型大巴数目清空,那么些要怎么弄,要不然,再写下一条记下的时候,假如某些字段未有值,就能够用原本的笔录填充?

   
A:要是写的Record对象是复用的,假使有些值没有新set,则依然保留着前边的值对象。前段时间尚未直接可以清空的api能够用,能够经过Record.getColumnCount拿到column
count,用贰个for 循环去一一set null就可以。


Worker 将查询到的推生势况重临给客户端。

摘要:
用户在DataWorks上执行MapReduce作业的时候,文件大于10M的JA路虎极光和财富文件无法上传到Dataworks,导致心余力绌选用调节去定期施行MapReduce作业。
消除方案: jar -resources test_mr.

客户端发起add jar/add
file等能源操作,把在客户端的机器(比如本身测量试验的时候是从笔者的记录簿)上,运行任务涉及的能源文件传到服务器上。那样后边运营职务的时候,服务器上手艺有对应的代码和文件能够用。假设原先曾经传过了,这一步能够简单。

创建MaxCompute Java Module

首先,你得在intellij中成立叁个用于开荒马克斯Compute
Java程序的module。具体的,File | new | module ... module类型为马克斯Compute
Java,配置Java JDK和马克斯Compute
console的设置路线,点击next,输入module名,点击finish。

这边配置console的目标关键有多个:

  • 编排UDF和MHighlander要求信赖马克斯Compute框架的相关jar,而这么些jar在console的lib目录均存在,studio能帮您将这个lib自动导入到module的信赖库中。

  • studio能集成console,一些动作通过console操作将卓殊惠及。

图片 2

迄今,一个能支付MaxCompute
java程序的module已创制,如下图的jDev。主要目录包罗:

  • src(用户支付UDF|M库罗德程序的源码目录)
  • examples(示例代码目录,包含单测示例,用户可参看这里的事例开采协和的次序或编辑单测)
  • warehouse(当地运维须要的schema和data)

图片 3

正文用到的

阿里云数加-大数据测算服务MaxCompute产品地址:


发送 RESTful 请求给HTTP服务器。 

图片 4

setMemoryForJVM(int mem)设置 JVM设想机的内部存款和储蓄器财富,单位:MB,暗中同意值 1024.

关于MaxCompute

应接参加马克斯Compute钉钉群探究
图片 5

阅读最初的小说请点击

Studio进步UDF和MapReduce开拓体验,maxcomputemapreduce UDF全称User
Defined
Function,即用户自定义函数。马克斯Compute提供了相当多内建函数来满意用...

1. 作业应际而生ClassNotFoundException和NoClassDefFoundError分外失利?

A:
对于ClassNotFoundException极度,一般是借助的class不在你的jar包中,供给把注重的库打到作业jar包中恐怕独立上传,并在-resources中钦定;
对此NoClassDefFoundError格外,先看看依赖class是还是不是存在于你的jar包,非常多景色下是出于版本争辨变成的,恐怕你依靠的库和服务端自带的jar有争持。


点击圆形的sql,就足以见见实际试行的sql,点击diagnosis就能够观望对sql试行的会诊,是或不是财富富饶,是还是不是有长尾景观,是不是有数量倾斜处境。

客户端配置AK、EndPoint:

A:在Reduce代码里直接嵌套上Map的逻辑就足以了,把第一个M的做事在前一个PRADO里达成,并不是用作总计引擎调整规模上的三个独门步骤,举个例子

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;

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

A:首先project要开通jni的连锁权限,在编写翻译盘算好so文件后,须求将so以file类型的样式丰富为Resource,并在M普拉多作业提交的时候-resources参数里钦点,比如:

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

在MCRUISER的java代码应用jni的时候要注意,使用方法如下:

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

jni的运用办法能够参照:


我们得以见见左边是全体实例所包涵的职分运营的有向无环图,一共有多个Task,侧边包蕴实际的七个Task的详细消息,还大概有summary,你能够看到种种Task的input和output的记录数,还是能够看来各样Task开启了多少个instance进行运作。

第二步:这两天因此马克斯Compute
CLI上传的能源,在Dataworks侧边财富列表是找不到的,只好通过list
resources查看确认财富;

功用介绍

发布UDF

好了,大家的MyLower.java测量检验通过了,接下去大家要将其卷入成jar财富(这一步能够通过IDE打包,参照他事他说加以考察用户手册)上传播马克斯Comptute服务端上:

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

图片 6

    1. 挑选要上流传哪个MaxCompute
      project上,jar包路径,要登记的能源名,以及当能源或函数已存在时是或不是强制更新,然后点击OK。

图片 7

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

图片 8

  • 4.
    取舍供给利用的财富jar,选用主类(studio会自动深入分析财富jar中包涵的主类供用户挑选),输入函数名,然后点击OK。

图片 9

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

Executor 将该描述文件提交给总括层运维,并询问 Task 执市价况。 

透过上述情势,大家得以在Dataworks上跑大于10M的MKoleos作业。

大额开采套件能够铺排Shell作业。能够在Shell作业里参谋上面包车型地铁措施用odpscmd
-e/-f来调治MapReduce作业。

sample数据测验

无数用户的须要是能sample部分线上表的多少到本机来测量检验,而这studio也提供了支撑。在editor中UDF类MyLower.java上右键,点击"运维"菜单,弹出run
configuration对话框,配置马克斯Compute
project,table和column,这里大家想将hy_test表的name字段调换为小写:

图片 10

点击OK后,studio会先通过tunnel自动下载表的sample数据到当地warehouse(如图中高亮的data文件),接着读取钦定列的多寡并本地运营UDF,用户能够在调整台看到日志输出和结果打字与印刷:

图片 11

7. 壹次排序功能,MLX570相关安顿解释,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函数调用的输入。

Scheduler会把instance拆成三个Task,并扭转任务流DAG图。 

作者:隐林

Map阶段

创建UDF

如若我们要完成的UDF供给是将字符串转变为题写(内建函数TOLOWE昂科雷已落到实处该逻辑,这里大家只是经过那几个轻便的须要来演示如何通过studio开采UDF)。studio提供了UDF|UDAF|UDTF|Mapper|Reducer|Driver的模版,这样用户只要求编制自个儿的工作代码,而框架代码会由模板自动填写。

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

图片 12

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

图片 13

  • 3.
    模板已自行填充框架代码,我们只须要编写制定将字符串转产生小写的函数代码就能够。

图片 14

10. mr怎样赢得输入表的新闻?

A:
参考:
使用Mapper.TaskContext的接口getInputTableInfo(),会获取输入表的TableInfo对象
各样map
worker只会管理来自单一表或分区的多寡,在mapper的setup阶段得到该消息就能够。


经过console提交二个SQL语句。 

​本文为云栖社区原创内容,未经允许不得转发。重返新浪,查看更加多

输入阶段:根据专门的学问量,生成多少个Mapper,把这么些表的数额分配给这一个Mapper。各个Mapper分配到表里的一有个别记录。

接续后代应用

上传成功的jar资源和注册成功的function(在Project
Explorer相应project下的Resources和Functions节点中就能够及时看到,双击也能显得反编写翻译的源码)就可见实际生产应用了。大家开辟studio的sql
editor,就能够兴奋的选用大家刚写好的mylower函数,语法高亮,函数具名展现都不言而喻:

图片 15

16. MSportage协理多路输入输出,应该怎么写这么的主次?

    A:参谋:多路输入输出示例
对此多路输入,每种输入源对应单独的四个Map阶段,即一个map
task只会读取几个输入表的数码。能够钦点三个表的数不尽分区列来作为四个输入,举个例子a,
b, c八分区列,钦定分区时得以内定a=1/b=1/c=2类似那样。
   
假诺一样等第的八个分区,则须求各自作为独立的分区输入,比方贰个表的a=1和a=3分区作为多路输入的俩例外的输入,需求各自钦命。
    maponly的作业也一致扶助多路输入输出,达成方式类似。


马克斯Compute计算集群布满

消除方案:

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

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);

点击每一种Fuxi Job就足以在下边看到各种Job详细的情况:具体如下图所示: 

add jar C:\test_mr\test_mr.jar -f;//增加财富

按时调治

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

A:是的,为了减小对象的费用,框架对于map,
reduce接口里的Record对象是复用的,也正是说每一遍map大概reduce的历次迭代,Record对象未有变,只是个中的数额变动了。假使要封存上贰次的Record需求toArray()获得中间的数目对象进行保存。具体能够参见:


用户不须要关心布满式总结细节,进而达到解析大数量的指标。

list resources;//查看能源

康宁沙箱

2. M牧马人提交命令中-resources和-classpath的知情?

A:
在马克斯Compute中近乎M瑞虎那类布满式数据处理框架,用户的代码一般在偏下七个地方实行:

  • 运转客户端的进程/子进度:这里的用户代码担当准备执行意况、配置职责参数、提交任务,入口日常是main
    class。它不受沙箱限制,试行逻辑由用户代码驱动。同样的,这里的classpath由用户配置,或在console中应用-classpath选项增添重视的classpath路线。
  • 远程施行的worker进度:这里的代码肩负实践多少管理逻辑,入口是mapper/reducer
    class。它受限沙箱限制,且施行逻辑由马克斯Compute框架驱动。用户在命令行配置的-classpath在那边不算(显明,远程机器的门道和客户端机器的门道不也许保险平等),任何第三方重视必须作为resource提前上传至马克斯Compute,并在付给任务时使用-resources选项或JobConf.setResources(String[])来设定。

HTTP 服务器发送伏乞到云账号服务器做用户认证。 

客户端下载地址:

void setResources(String
resourceNames)有和jar命令的-resources一样的功能,不过优先级高于-resources(也即是说代码里的装置优先级对比高)

18.  M本田UR-V作业怎样钦命输入表的Project名字?

A: 能够按如下的诀窍内定:

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

通过TableInfo.builder()projectName接口来钦定,假若不内定,暗许值是在运作MMurano作业的可怜project.


Executor在财富未满的意况下,轮询TaskPool,诉求Task。 

用户在DataWorks上实践MapReduce作业的时候,文件大于10M的JAGL450和能源文件无法上传到Dataworks,导致力不能及利用调节去按期施行MapReduce作业。

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

13. 报错kInstanceMonitorTimeout, usually caused by bad udf performance,怎么化解?

A:
报那一个错的由来是mapper恐怕reducer有逻辑实施时间特地长,且未有从输入表的读数据恐怕写出多少,超过暗许10min后,会报那么些非常;有二种缓和措施:

  • 将过期的光阴调的更加长一些,可以安装参数odps.function.timeout要么安装JobConf#setFunctionTimeout,最长能够安装为3600,即一个时辰。
  • 期限向框架陈诉心跳 TaskContext#progress(),注意progress不要调用过于频仍,不然有质量难点,能保险三次调用之间的时光低于设置的timeout时间就能够。

Scheduler肩负instance的调解,包涵将instance分解为task、对等候提交的task实行排序、以及向总括集群的Fuxi
master询问能源占用情况以拓展流控(Fuxi
slot满的时候,截止响应Executor的task申请);

主编:

JobConfig

21. M途锐作业读取表能源,Archive资源应该如何操作?

A: 马克斯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分区 本文用到的
Ali云数加-大数据测算服务马克斯Compute产品地址:...

Executor 将 SQL Plan 转换来总括层的 FuXi Job 描述文件。 

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

12. 什么设置Key排种类的逐个(ASC or DESC)?

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


MaxCompute(原ODPS)的概念 

能源表和文书能够让部分小表/小文件可以方便被读取。鉴于读取数据的限制供给小于六17遍,一般是在setup里读取后缓存起来,具体的例证能够参谋这里。

3. Mapper数目怎么着设置?

A:若无输入表是能够直接内定map数目setNumMapTasks
   
有输入表的话,setNumMapTasks不奏效,须求通过setSplitSize来控制map数,默认是256M。


图片 16

即便Reduce后边还亟需做越来越Reduce总计,能够用拓展MapReduce模型(简称M冠道CR-V)。M奥迪Q5君越其实便是Reduce阶段甘休后,不直接出口结果,而是再一次通过Shuffle后接另外三个Reduce。

6. mr 输出到表或有个别分区里时,输出的情势时扩展依旧覆盖 ?

A: 会覆盖输出表或分区从前的开始和结果


图片 17

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

9. 请问map阶段一时候为何会有interrupted,可是map 最终依然完毕了?

A:因为有backup instance在跑,发生backup instance一般是因为有少数map
instances显然慢于任何的,就能够在其他机器上运营三个均等的worker来跑,这些效果类似于hadoop的展望实施,只要当中有个别成功跑完,其余的就能够停掉了(变为interrupted)


MaxCompute生态圈

数据输出

5. 报错java.lang.OutOfMemoryError: Java heap space,MKoleos的内部存款和储蓄器设置难题?

A:mapper或reducer的内部存款和储蓄器由两局地组成,JVM的heap memory和JVM
之外的框架相关内部存款和储蓄器。
   
设置JVM内部存储器的接口是(都以Java逻辑的话,调治内部存款和储蓄器是用上边多少个接口):
    setMemoryForMapperJVMsetMemoryForReducerJVM (默认是1024
单位MB)
    设置框架内部存款和储蓄器(c++部分的)的接口是(一般无需安装):
    setMemoryForMapTasksetMemoryForReduceTask(默认是2048 单位MB)


调用SDK总结配置信息中的签字。 

其他限制

8. 请问mr job的map或许reduce如若想提前停止job, 实施如何代码?

A:
抛卓殊就足以,举例throw new RuntimeException("XXX"); 会导致job战败,job也就甘休了。


HTTP 服务器依照配置消息,去云账号服务器做用户认证。 

转载本站文章请注明出处:金莎娱乐官网最全网站 http://www.djliuxue.com/?p=708

上一篇:

下一篇:

相关文章