【威尼斯人网上投注】10M文件限制问题,MapReduce常见问题解答

by admin on 2019年3月29日

原题目:通过简单瘦身,解决Dataworks 10M文书限制难题

摘要:大数目测算服务(马克斯Compute)的功效详解和利用体验

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

摘要:
用户在DataWorks上推行MapReduce作业的时候,文件大于10M的JA奥迪Q5和能源文件不能够上传到Dataworks,导致不能够选择调度去定期执行MapReduce作业。
化解方案: jar -resources test_mr.

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

本文用到的

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


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

前言

1. 学业应运而生ClassNotFoundException和NoClassDefFoundError相当失利?

A:
对于ClassNotFoundException极度,一般是凭借的class不在你的jar包中,需求把注重的库打到作业jar包中也许独立上传,并在-resources中钦命;
对于NoClassDefFoundError非凡,先看看正视class是还是不是留存于您的jar包,很多情况下是由于版本争执造成的,大概您依靠的库和服务端自带的jar有争论。


解决方案:

MapReduce已经有文档,用户能够参见文书档案使用。本文是在文书档案的根底上做一些类似注脚及细节解释上的劳作。

2. MHighlander提交命令中-resources和-classpath的驾驭?

A:
在马克斯Compute中就如MKuga这类分布式数据处理框架,用户的代码一般在偏下多少个地点执行:

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

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

职能介绍

3. Mapper数目如何设置?

A:假若没有输入表是能够一直内定map数目setNumMapTasks
   
有输入表的话,setNumMapTasks不见效,供给通过setSplitSize来控制map数,默认是256M。


客户端下载地址:

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


客户端配置AK、EndPoint:

威尼斯人网上投注 1

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

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,小编尤其欣赏文档里的那几个图片。

6. mr 输出到表或有些分区里时,输出的格局时扩大依旧覆盖 ?

A: 会覆盖输出表或分区此前的内容


其次步:近来因此马克斯Compute
CLI上传的能源,在Dataworks左侧能源列表是找不到的,只好通过list
resources查看确认能源;

譬如有一张十分大的表。表里有个String字段记录的是用空格分割开单词。最终索要总结全数记录中,种种单词出现的次数是稍微。那完全的计量流程是

7. 叁回排序作用,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作为2遍reduce函数调用的输入。

list resources;//查看财富

输入阶段:依据工作量,生成多少个Mapper,把这一个表的数额分配给那个Mapper。每一个Mapper分配到表里的一局地记录。

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

A:
抛分外就能够,例如throw new RuntimeException("XXX"); 会导致job失败,job也就结束了。


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

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

9. 请问map阶段有时候为何会有interrupted,不过map 最终照旧完结了?

A:因为有backup instance在跑,发生backup instance一般是因为有好几map
instances鲜明慢于任何的,就会在其他机器上运营三个一如既往的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昂Cora作业。

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. 报错kInstanceMonitorTimeout, 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对象没有变,只是个中的数量变动了。假设要封存上3次的Record须求toArray()得到中间的多少对象进行保存。具体能够参考:


借使Reduce前面还必要做尤其的Reduce总计,能够用拓展MapReduce模型(简称M奥德赛昂Cora)。MLAND纳瓦拉其实就是Reduce阶段截至后,不直接出口结果,而是再一次经过Shuffle后接其它1个Reduce。

15. 写完一条记下后,想把outputRecord里面包车型客车数额清空,这几个要怎么弄,要不然,再写下一条记下的时候,假使有个别字段没有值,就会用原来的笔录填充?

   
A:借使写的Record对象是复用的,若是有个别值没有新set,则仍然封存着前边的值对象。方今从未有过平昔能够清空的api可以用,能够通过Record.getColumnCount获得column
count,用贰个for 循环去一一set null即可。


Q:怎么着落成M->昂Cora->M->Haval那种逻辑吗

16. MKuga帮助多路输入输出,应该怎么写那样的顺序?

    A:参考:多路输入输出示例
对此多路输入,种种输入源对应单独的四个Map阶段,即1个map
task只会读取一个输入表的数码。能够内定2个表的文山会海分区列来作为1个输入,例如a,
b, c三分区列,内定分区时得以钦赐a=1/b=1/c=2类似那样。
   
倘使相同级其余八个分区,则须求各自作为单身的分区输入,例如2个表的a=1和a=3分区作为多路输入的俩见仁见智的输入,须求各自钦点。
    maponly的功课也一样支撑多路输入输出,完毕格局类似。


A:在Reduce代码里平素嵌套上Map的逻辑就能够了,把第③个M的工作在前八个RAV4里完毕,而不是作为计量引擎调度范围上的一个独门步骤,比如

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.  MRubicon作业怎么着内定输入表的Project名字?

A: 能够按如下的措施内定:

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

通过TableInfo.builder()projectName接口来内定,假若不内定,默许值是在运维M奥迪Q5作业的特别project.


    …

19. 不等的Mapper或许Reducer怎么样获得可分其余ID?

A:
有个别业务场景须求区分区别的Mapper或Reducer,能够通过TaskContextgetTaskID接口获取到一个Mapper/Reducer独有的id。

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

    map();

20. MLAND代码里有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;

在M智跑的java代码应用jni的时候要注意,使用格局如下:

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

jni的施用办法能够参考:


}

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产品地址:…

飞速初叶

运转条件

工欲善其事,必先利其器。M君越的开销提供了基于IDEA和Eclipse的插件。个中相比较推荐用IDEA的插件,因为IDEA大家还在不停做迭代,而Eclipse已经告一段落做创新了。而且IDEA的功用也比较丰硕。

现实的插件的安装方式步骤能够参见文档,本文不在赘言。

此外后续还索要用到客户端,能够参照文档安装。

持续为了进一步透亮地印证难点,小编会尽量地在客户端上操作,而不用IDEA里早就合并的法门。

线上运行

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

步骤为

做多少准备,包蕴成立表和动用Tunnel命令行工具导入数据

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

在odpscmd里执行add jar命令:

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图