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

原标题:通过简单瘦身,解决Dataworks 拾M文件限制难点

摘要:大数目测算服务(马克斯Compute)的意义详解和动用体验

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

摘要:
用户在DataWorks上举办MapReduce作业的时候,文件大于拾M的JAXC60和财富文件不可能上传到Dataworks,导致不能运用调度去定期执行MapReduce作业。
消除方案: jar -resources test_mr.

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

正文用到的

Ali云数加-大数码测算服务马克斯Compute产品地址:


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

前言

一. 功课应运而生ClassNotFoundException和NoClassDefFoundError十分退步?

A:
对于ClassNotFoundException十分,1般是借助的class不在你的jar包中,须要把重视的库打到作业jar包中也许独立上传,并在-resources中钦赐;
对此NoClassDefFoundError卓殊,先看看正视class是不是存在于您的jar包,很多意况下是出于版本争论导致的,可能你依靠的库和服务端自带的jar有争辩。


不留余地方案:

MapReduce已经有文档,用户能够参照文书档案使用。本文是在文书档案的底子上做一些好像注脚及细节解释上的工作。

二. MPRADO提交命令中-resources和-classpath的敞亮?

A:
在马克斯Compute中类似MOdyssey那类分布式数据处理框架,用户的代码一般在偏下四个地点实施:

  • 运营客户端的长河/子进度:那里的用户代码负责准备执行环境、配置职务参数、提交职务,入口常常是main
    class。它不受沙箱限制,执行逻辑由用户代码驱动。同样的,那里的classpath由用户配置,或在console中利用-classpath选项添加信赖的classpath路径。
  • 长距离执行的worker进度:那里的代码负责实施多少处理逻辑,入口是mapper/reducer
    class。它受限沙箱限制,且执行逻辑由马克斯Compute框架驱动。用户在命令行配置的-classpath在此间不算(分明,远程机器的路线和客户端机器的路线不能够保险同1),任何第一方正视必须作为resource提前上传至马克斯Compute,并在付给职责时利用-resources选项或JobConf.setResources(String[])来设定。

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

效益介绍

三. Mapper数目如何设置?

A:假设未有输入表是能够直接钦点map数目setNumMapTasks
   
有输入表的话,setNumMapTasks不奏效,供给通过setSplitSize来控制map数,默认是256M。


客户端下载地址:

MapReduce

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


客户端配置AK、EndPoint:

澳门正规赌博十大网站 1

5. 报错java.lang.OutOfMemoryError: Java heap space,M奥迪Q7的内存设置难点?

A:mapper或reducer的内部存款和储蓄器由两有个别构成,JVM的heap memory和JVM
之外的框架相关内部存款和储蓄器。
   
设置JVM内部存款和储蓄器的接口是(都是Java逻辑的话,调节内部存款和储蓄器是用下边几个接口):
    setMemoryForMapperJVMsetMemoryForReducerJVM (默认是1024
单位MB)
    设置框架内部存款和储蓄器(c++部分的)的接口是(一般不须求设置):
    setMemoryForMapTasksetMemoryForReduceTask(默认是2048 单位MB)


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

谈到MapReduce就少不了WordCount,我特意喜欢文书档案里的那个图形。

陆. mr 输出到表或有些分区里时,输出的情势时增添照旧覆盖 ?

A: 会覆盖输出表或分区以前的剧情


第3步:近来透过马克斯Compute
CLI上传的能源,在Dataworks左边资源列表是找不到的,只好通过list
resources查看确认财富;

比如说有一张相当的大的表。表里有个String字段记录的是用空格分割开单词。最终索要计算全体记录中,各样单词出现的次数是稍稍。那完全的乘除流程是

柒. 一回排序作用,M奇骏相关安顿解释,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函数调用的输入。

list resources;//查看财富

输入阶段:根据工作量,生成多少个Mapper,把这么些表的多少分配给那些Mapper。每一种Mapper分配到表里的一片段记录。

八. 请问mr job的map或许reduce假诺想提前结束job, 执行如何代码?

A:
抛非常就足以,例如throw new RuntimeException("XXX"); 会导致job退步,job也就截至了。


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

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

玖. 请问map阶段有时候为何会有interrupted,不过map 最后依然完毕了?

A:因为有backup instance在跑,产生backup instance1般是因为有好几map
instances鲜明慢于任何的,就会在别的机器上运行1个相同的worker来跑,那些功用类似于hadoop的前瞻执行,只要当中某些成功跑完,其余的就足以停掉了(变为interrupted)


澳门正规赌博十大网站 2

Shuffle阶段-合并排序:也是发生在Mapper上。会先对数码举行排序。比如WordCount的例证,会基于单词举办排序。排序后的合并,又称Combiner阶段,因为后面早已根据单词排序过了,相同的单词都以连在一起的。那能够把二个相邻的会见成一个。Combiner能够减小在接二连三Reduce端的总计量,也得以减小Mapper往Reducer的数额传输的工作量。

10. mr怎么着赢得输入表的音信?

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


通过上述方法,大家能够在Dataworks上跑大于10M的M揽胜极光作业。

Shuffle阶段-分配Reducer:把Mapper输出的单词分发给Reducer。Reducer获得数码后,再做2回排序。因为Reducer获得的数额已经在Mapper里已经是排序过的了,所以这里的排序只是针对性排序过的数据做联合排序。

1一. 怎么利用自定义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拿前边已经排序好的输入,相同的单词的保有输入进去同3个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的揣摸结果,写入到表里或许重回给客户端。

1三. 报错kInstanceMonitorTimeout, usually caused by bad udf performance,怎么消除?

A:
报这几个错的原由是mapper或许reducer有逻辑执行时间专程长,且并未有从输入表的读数据恐怕写出多少,当先暗许十min后,会报那么些相当;有两种缓解办法:

  • 将过期的时间调的越来越长壹些,可以设置参数odps.function.timeout依旧安装JobConf#setFunctionTimeout,最长能够安装为3600,即3个钟头。
  • 为期向框架汇报心跳 TaskContext#progress(),注意progress不要调用过于频仍,不然有品质难点,能确定保证三次调用之间的时间低于设置的timeout时间即可。

主编:

拓展MapReduce

1肆. 框架map可能reduce接口里的Record对象是复用的?

A:是的,为了削减对象的开销,框架对于map,
reduce接口里的Record对象是复用的,也便是说每一遍map或然reduce的每一遍迭代,Record对象未有变,只是在那之中的多少变动了。借使要保留上贰回的Record必要toArray()得到个中的数目对象开始展览封存。具体能够参见:


一旦Reduce后边还索要做越来越的Reduce计算,能够用拓展MapReduce模型(简称M本田CR-V昂科拉)。MOdysseyCRUISER其实就是Reduce阶段甘休后,不直接出口结果,而是再度经过Shuffle后接其它一个Reduce。

1伍. 写完一条记下后,想把outputRecord里面包车型客车数量清空,这几个要怎么弄,要不然,再写下一条记下的时候,假如某些字段未有值,就会用原来的记录填充?

   
A:假诺写的Record对象是复用的,假设有些值未有新set,则依然封存着前面包车型地铁值对象。近来从不一直能够清空的api能够用,能够透过Record.getColumnCount得到column
count,用一个for 循环去一一set null即可。


Q:如何落到实处M->本田CR-V->M->CR-V那种逻辑吗

1陆. MR扶助多路输入输出,应该怎么写那样的次序?

    A:参考:多路输入输出示例
对此多路输入,每个输入源对应单独的多个Map阶段,即五个map
task只会读取3个输入表的数据。能够钦赐贰个表的泛滥成灾分区列来作为三个输入,例如a,
b, c三分区列,钦定分区时方可内定a=1/b=1/c=二类似那样。
   
如果同样级别的三个分区,则须要各自作为单身的分区输入,例如一个表的a=壹和a=3分区作为多路输入的俩不壹的输入,需求各自钦命。
    maponly的学业也一如既往协助多路输入输出,达成情势类似。


A:在Reduce代码里一贯嵌套上Map的逻辑就足以了,把第一个M的劳作在前二个PRADO里达成,而不是用作计量引擎调度规模上的三个独立步骤,比如

1七. 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(){

1捌.  M奥迪Q5作业怎么样内定输入表的Project名字?

A: 能够按如下的方式钦定:

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

通过TableInfo.builder()projectName接口来钦命,假诺不钦点,私下认可值是在运作M奥迪Q7作业的百般project.


    …

1九. 不等的Mapper大概Reducer咋样获得可分别的ID?

A:
有些事情场景需求区分分裂的Mapper或Reducer,能够经过TaskContextgetTaskID接口获取到四个Mapper/Reducer独有的id。

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

    map();

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

A:首先project要开通jni的有关权限,在编译准备好so文件后,须要将so以file类型的款型丰盛为Resource,并在M奥迪Q3作业提交的时候-resources参数里内定,例如:

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

在MBMWX⑤的java代码应用jni的时候要专注,使用办法如下:

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

jni的采纳方法能够参见:


}

二一. M奥迪Q7作业读取表能源,Archive财富应该怎样操作?

A: 马克斯Compute上的财富(file, table,
archive等)能够类比于Hadoop的DistributedCache来通晓,同样是会散发到每一个总结节点上去,worker再从本土来读取,由此资源文件不能够过大,不然分发能源便是3个瓶颈,方今私下认可有贰G的总能源大小限制。
读取财富表,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产品地址:…

快速开端

运维环境

工欲善其事,必先利其器。M智跑的花费提供了根据IDEA和Eclipse的插件。个中相比较推荐用IDEA的插件,因为IDEA大家还在不断做迭代,而Eclipse已经终止做立异了。而且IDEA的效果也相比较丰裕。

实际的插件的装置方式步骤能够参考文档,本文不在赘言。

除此以外后续还亟需用到客户端,能够参见文档安装。

继承为了特别清楚地注明难点,作者会尽量地在客户端上操作,而不用IDEA里早已合龙的格局。

线上运营

以WordCount为例,文书档案能够参见这里

步骤为

做多少准备,包蕴创造表和行使Tunnel命令行工具导入数据

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

在odpscmd里执行add jar命令:

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

相关文章