MaxCompute MapReduce

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

输入数据

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

前言

list resources;//查看资源

产品限制

解决方案:

Reduce阶段

作者:隐林

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

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

以WordCount为例,文档可以参考这里

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

setMapOutputKeySchema(Column[] schema)设置 Mapper 输出到 Reducer 的
Key 行属性。

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

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

图片 1

运行环境

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

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

责任编辑:

setCombinerClass(Class theClass)设置作业的 combiner。

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

reduce(){

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

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

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

做数据准备,包括创建表和使用Tunnel命令行工具导入数据

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

线上运行

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

`jar -resources mapreduce-examples.jar -classpath
mapreduce-examples.jar

其他限制

-resources告诉服务器,在运行任务的时候,需要用到的资源有哪些。

setOutputOverwrite(boolean
isOverwrite)设置对输出表是否进行覆盖。类似SQL里的Insert into/overwrite
Talbe的区别。

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”

大数据开发套件可以配置MapReduce作业。

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

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

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

资源表/文件

Q:如何实现M->R->M->R这种逻辑呢

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

生产及周期调度

void setResources(String
resourceNames)有和jar命令的-resources一样的功能,但是优先级高于-resources(也就是说代码里的设置优先级比较高)

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

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

Shuffle-合并排序

Map阶段

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

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

setOutputKeySortOrder(JobConf.SortOrder[] order)设置 Key
排序列的顺序。

数据输出

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

setPartitionColumns(String[]
cols)设置作业的分区列,定义了数据分配到Reducer的分配策略。

任务提交

    …

不允许JNI调用

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

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

读表

在odpscmd里执行add jar命令:

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

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

输出阶段:输出Reduce的计算结果,写入到表里或者返回给客户端。

JobConf定义了这个任务的细节,还是这个图,解释一下JobConf的其他设置项的用法。

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

功能解读

    map();

MapReduce已经有文档,用户可以参考文档使用。本文是在文档的基础上做一些类似注解及细节解释上的工作。

发表评论

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