金沙js333娱乐场 1

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

客户端下载地址:

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

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

    A:参考:多路输入输出示例
对此多路输入,每一种输入源对应单独的多个Map阶段,即2个map
task只会读取3个输入表的数量。能够内定多少个表的1类别分区列来作为多个输入,例如a,
b, c三分区列,钦赐分区时方可内定a=1/b=1/c=二类似那样。
   
若是同样级别的八个分区,则须要各自作为单身的分区输入,例如二个表的a=1和a=三分区作为多路输入的俩比不上的输入,需求各自钦定。
    maponly的学业也如出1辙支撑多路输入输出,完毕格局类似。


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

大数目开发套件能够陈设MapReduce作业。

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

A:
报这一个错的原故是mapper或然reducer有逻辑执行时间专程长,且从未从输入表的读数据或然写出多少,超越默认10min后,会报这几个充足;有二种缓解格局:

  • 将过期的年月调的越来越长一些,能够安装参数odps.function.timeout也许安装JobConf#setFunctionTimeout,最长能够安装为3600,即叁个钟头。
  • 限期向框架汇报心跳 TaskContext#progress(),注意progress不要调用过于频仍,不然有品质难点,能保障两回调用之间的年月低于设置的timeout时间即可。

消除方案:

Map阶段

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

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


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

数码输出

五. 报错java.lang.OutOfMemoryError: Java heap space,MXC90的内部存储器设置难题?

A:mapper或reducer的内部存款和储蓄器由两某些组成,JVM的heap memory和JVM
之外的框架相关内部存款和储蓄器。
   
设置JVM内部存款和储蓄器的接口是(都是Java逻辑的话,调节内部存款和储蓄器是用上面三个接口):
    setMemoryForMapperJVMsetMemoryForReducerJVM (默认是1024
单位MB)
    设置框架内部存款和储蓄器(c++部分的)的接口是(壹般不须求安装):
    setMemoryForMapTasksetMemoryForReduceTask(默认是2048 单位MB)


原标题:通过简单瘦身,消除Dataworks 10M文件限制难题

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

三. Mapper数目怎么样设置?

A:尽管未有输入表是能够一向钦命map数目setNumMapTasks
   
有输入表的话,setNumMapTasks不见效,要求经过setSplitSize来控制map数,默认是256M。


作者:隐林

setOutputGroupingColumns(String[]
cols)数据在Reducer里排序好了后,是如何数据进入到同二个reduce方法的,就是看那里的设置。1般的话,设置的和setPartitionColumns(String[]
cols)一样。能够见见二回排序的用法。

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

A:首先project要开通jni的相干权限,在编写翻译准备好so文件后,要求将so以file类型的款式丰盛为Resource,并在MRAV四作业提交的时候-resources参数里钦定,例如:

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

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

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

jni的接纳方法能够参见:


list resources;//查看资源

线上运转

本文用到的

Ali云数加-大多少总计服务马克斯Compute产品地址:


经过上述办法,我们能够在Dataworks上跑大于10M的MHummerH二作业。

    …

1九. 不等的Mapper大概Reducer怎样得到可分其余ID?

A:
有个别事情场景须求区分差异的Mapper或Reducer,能够经过TaskContextgetTaskID接口获取到二个Mapper/Reducer独有的id。

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

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

wc_in wc_out是传给main方法的参数,通过解析main方法传入参数String[]
args获得这几个参数

八. 请问mr job的map也许reduce要是想提前结束job, 执行怎么样代码?

A:
抛万分就能够,例如throw new RuntimeException("XXX"); 会导致job失利,job也就过逝了。


其次步:近日通过马克斯Compute
CLI上传的能源,在Dataworks右侧财富列表是找不到的,只可以通过list
resources查看确认财富;

谈起MapReduce就少不了WordCount,小编尤其喜爱文书档案里的那几个图形。

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

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


主编:

一经Reduce前面还索要做越来越的Reduce总计,可以用拓展MapReduce模型(简称M奥德赛普拉多)。M奥迪Q三Enclave其实便是Reduce阶段截止后,不直接出口结果,而是再度通过Shuffle后接其它二个Reduce。

一七. 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);

客户端配置AK、EndPoint:

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

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

A:是的,为了收缩对象的费用,框架对于map,
reduce接口里的Record对象是复用的,也正是说每一回map恐怕reduce的历次迭代,Record对象未有变,只是当中的多寡变化了。若是要封存上二回的Record需求toArray()得到内部的数码对象开始展览封存。具体能够参考:


金沙js333娱乐场 1

做多少准备,包涵创立表和平运动用Tunnel命令行工具导入数据

1八.  M奇骏作业怎样钦命输入表的Project名字?

A: 能够按如下的主意钦点:

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

通过TableInfo.builder()projectName接口来钦点,假设不点名,暗许值是在运作M奥德赛作业的非凡project.


​本文为云栖社区原创内容,未经允许不得转发。回去天涯论坛,查看越多

在odpscmd里执行

七. 3遍排序成效,M奥迪Q7相关配置解释,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作为3回reduce函数调用的输入。

用户在DataWorks上实施MapReduce作业的时候,文件大于10M的JAHighlander和能源文件无法上传到Dataworks,导致力不从心利用调度去定期执行MapReduce作业。

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

2. MLacrosse提交命令中-resources和-classpath的知情?

A:
在马克斯Compute中好像M福睿斯那类分布式数据处理框架,用户的代码1般在偏下五个地点实施:

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

摘要:
用户在DataWorks上实施MapReduce作业的时候,文件大于10M的JAKuga和能源文件不能上传到Dataworks,导致力不从心利用调度去定期执行MapReduce作业。
消除方案: jar -resources test_mr.

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

十. mr怎么着获得输入表的音信?

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


在JAVA代码里直接调用MapReduce作业,可以由此设置SessionState.setLocalRun(false); 达成,具体能够参考这里。

壹. 功课应运而生ClassNotFoundException和NoClassDefFoundError非常战败?

A:
对于ClassNotFoundException十分,一般是借助的class不在你的jar包中,须求把信赖的库打到作业jar包中只怕独立上传,并在-resources中钦点;
对于NoClassDefFoundError分外,先看看信赖class是或不是留存于您的jar包,很多状态下是由于版本争执导致的,或者您依靠的库和服务端自带的jar有冲突。


大数量开发套件的定时职分/工作流能够配备调度周期和任务依赖,协作前边提到的措施里的MapReduce作业/Shell作业,实现职责的调度。

贰1. M奥迪Q5作业读取表财富,Archive能源应该怎么操作?

A: 马克斯Compute上的能源(file, table,
archive等)能够类比于Hadoop的DistributedCache来明白,同样是会散发到每种总结节点上去,worker再从地面来读取,因此财富文件不可能过大,不然分发能源就是一个瓶颈,近年来私下认可有二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云数加-大数据测算服务MaxCompute产品地址:…

setNumReduceTasks(int n)设置 Reducer 职责数,默许为 Mapper 职务数的
四分一。假如是Map
only的职分,须求安装成0。能够参照这里。

1二. 怎么设置Key排类别的依次(ASC or DESC)?

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


读表

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


资源表/文件

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)


不容许读当三步跳件(比如JSON里就用到了,就必要改用GSON)

九. 请问map阶段有时候为何会有interrupted,可是map 最后照旧实现了?

A:因为有backup instance在跑,产生backup instance1般是因为有壹些map
instances鲜明慢于其余的,就会在别的机器上运行贰个相同的worker来跑,那一个成效周边于hadoop的估算执行,只要个中某些成功跑完,其余的就足以停掉了(变为interrupted)


reduce(){

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

前言

setCombinerOptimizeEnable(boolean
isCombineOpt)设置是或不是对Combiner举办优化。

沙箱是马克斯Compute的1套安全系统,使得在马克斯Compute上运营的课业无法取得其余用户的音信,也不知道该如何做获得系统的有的新闻。首要不外乎以下几点,完整的列表能够参见文档

setOutputOverwrite(boolean
isOverwrite)设置对输出表是还是不是开始展览覆盖。类似SQL里的Insert into/overwrite
Talbe的区分。

没辙起10二线程/多进度

在贰个Mapper里,只会读一张表,不一致的表的数据会在分化的Mapper
worker上运转,所以能够用示例里的这一个办法先获得那些Mapper读的是哪些表。

任务交给

拓展MapReduce

相比之下前边的飞速先河,能够看看除了数据准备阶段,和M陆风X8相关的,有财富的上传(add
jar步骤)和jar命令运转M奥迪Q3作业两步。

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

金沙js333娱乐场,运行条件

输入数据

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

相关文章