通过简单瘦身,解决Dataworks 10M文件限制问题

2019-10-08 作者:互联网   |   浏览(114)

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

Map阶段

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

比如有一张很大的表。表里有个String字段记录的是用空格分割开单词。最后需要统计所有记录中,每个单词出现的次数是多少。那整体的计算流程是

jin2055金沙网站 1

根据com.aliyun.odps.mapred.open.example.WordCount,找到main方法所在类的路径和名字

​本文为云栖社区原创内容,未经允许不得转载。返回搜狐,查看更多

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

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

后续为了更加清楚地说明问题,我会尽可能地在客户端上操作,而不用IDEA里已经集成的方法。

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

Reduce阶段

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

Reduce阶段:Reducer拿前面已经排序好的输入,相同的单词的所有输入进入同一个Redue循环,在循环里,做个数的累加。

客户端下载地址:https://help.aliyun.com/document_detail/27971.html

Shuffle-合并排序

第一步:大于10M的resources通过MaxCompute CLI客户端上传,

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

第二步:目前通过MaxCompute CLI上传的资源,在Dataworks左侧资源列表是找不到的,只能通过list resources查看确认资源;

运行环境

解决方案:

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

客户端配置AK、EndPoint:https://help.aliyun.com/document_detail/27804.html

任务的是在MaxComput(ODPS)上运行的,客户端通过jar命令发起请求。

list resources;//查看资源

    ...

责任编辑:

产品限制

通过上述方法,我们可以在Dataworks上跑大于10M的MR作业。

这个命令发起作业。MapReduce的任务是运行在MaxCompute集群上的,客户端需要通过这个命令把任务运行相关的信息告诉集群。

作者:隐林

不允许JNI调用

无法起多线程/多进程

数据输出

沙箱是MaxCompute的一套安全体系,使得在MaxCompute上运行的作业无法获得其他用户的信息,也无法获得系统的一些信息。主要包括以下几点,完整的列表可以参考文档

MapReduce

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

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

对比前面的快速开始,可以看到除去数据准备阶段,和MR相关的,有资源的上传(add jar步骤)和jar命令启动MR作业两步。

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

其他

JobConfig

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

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

在一个Mapper里,只会读一张表,不同的表的数据会在不同的Mapper worker上运行,所以可以用示例里的这个方法先获得这个Mapper读的是什么表。

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

摘要:大数据计算服务(MaxCompute)的功能详解和使用心得

A:在Reduce代码里直接嵌套上Map的逻辑就可以了,把第二个M的工作在前一个R里完成,而不是作为计算引擎调度层面上的一个单独步骤,比如

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

不支持反射/自定义类加载器(所以不支持一些第三方包)

线上运行

jin2055金沙网站 2

详见MaxCompute MR 限制项汇总

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

工欲善其事,必先利其器。MR的开发提供了基于IDEA和Eclipse的插件。其中比较推荐用IDEA的插件,因为IDEA我们还在持续做迭代,而Eclipse已经停止做更新了。而且IDEA的功能也比较丰富。

定时调度

reduce(){

这里的/JarPath/mapreduce-examples.jar的路径要替换成本地实际的文件路径。这个命令能把本地的jar包传到服务器上,-f是如果已经有同名的jar包就覆盖,实际使用中对于是报错还是覆盖需要谨慎考虑。

输入阶段:根据工作量,生成几个Mapper,把这些表的数据分配给这些Mapper。每个Mapper分配到表里的一部分记录。

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

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

功能解读

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

不允许读本地文件(比如JSON里就用到了,就需要改用GSON)

大数据开发套件的定时任务/工作流可以配置调度周期和任务依赖,配合前面提到的方法里的MapReduce作业/Shell作业,实现任务的调度。

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

jin2055金沙网站,如果在odpscmd的配置文件里已经配置好了,那只需要写-e的部分。

odpscmd  -u accessId  -p  accessKey  --project=testproject --endpoint=http://service.odps.aliyun.com/api  -e "jar -resources aaa.jar -classpath ./aaa.jar com.XXX.A"

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

功能介绍

本文由jin2055金沙网站发布于互联网,转载请注明出处:通过简单瘦身,解决Dataworks 10M文件限制问题

关键词: jin2055金沙网站