MaxCompute MapReduce

作者: 互联网  发布:2019-10-12

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

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

作者:隐林

客户端做的就是给服务器发起任务的调度的指令。之前提到的jar命令就是一种方法。鉴于实际上运行场景的多样性,这里介绍其他的几种常见方法:

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

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

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

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

list resources;//查看资源

说起MapReduce就少不了WordCount,我特别喜欢文档里的这个图片。

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

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

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

大数据开发套件可以配置Shell作业。可以在Shell作业里参考上面的方法用odpscmd -e/-f来调度MapReduce作业。

财神彩票app 1

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

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

读表

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

Shuffle-分配Reduce

责任编辑:

在odpscmd里执行

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

reduce(){

解决方案:

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

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

最后通过JobClient.runJob(job);客户端往服务器发起了这个MapReduce作业。

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

在odpscmd里执行add jar命令:

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

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

    map();

MapReduce

财神彩票app 2

功能解读

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

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

具体的插件的安装方法步骤可以参考文档,本文不在赘言。

线上运行

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

任务提交

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

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

在JAVA代码里直接调用MapReduce作业,可以通过设置SessionState.setLocalRun(false); 实现,具体可以参考这里

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

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

输入数据

setNumReduceTasks(int n)设置 Reducer 任务数,默认为 Mapper 任务数的 1/4。如果是Map only的任务,需要设置成0。可以参考这里

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

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

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

详细的SDK的文档,可以在Maven里下载。这是下载地址

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

生产及周期调度

JobConfig

前言

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

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

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

Shuffle阶段-分配Reducer:把Mapper输出的单词分发给Reducer。Reducer拿到数据后,再做一次排序。因为Reducer拿到的数据已经在Mapper里已经是排序过的了,所以这里的排序只是针对排序过的数据做合并排序。

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

Reduce阶段

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

财神彩票app,另外后续还需要用到客户端,可以参考文档安装。

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

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

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

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

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

本文由财神彩票app发布于互联网,转载请注明出处:MaxCompute MapReduce

关键词:

上一篇:没有了
下一篇:没有了