MaxCompute MapReduce

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

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

前言

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

功能介绍

MapReduce

说起MapReduce就少不了WordCount,我特别喜欢文档里的这个图片。
图片描述
比如有一张很大的表。表里有个String字段记录的是用空格分割开单词。最后需要统计所有记录中,每个单词出现的次数是多少。那整体的计算流程是:

输入阶段:根据工作量,生成几个Mapper,把这些表的数据分配给这些Mapper。每个Mapper分配到表里的一部分记录。
Map阶段:每个Mapper针对每条数据,解析里面的字符串,用空格切开字符串,得到一组单词。针对其中每个单词,写一条记录

reduce(){...map();
}

快速开始

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

具体的插件的安装方法步骤可以参考文档,本文不在赘言。
另外后续还需要用到客户端,可以参考文档安装。
后续为了更加清楚地说明问题,我会尽可能地在客户端上操作,而不用IDEA里已经集成的方法。

线上运行

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

做数据准备,包括创建表和使用Tunnel命令行工具导入数据
将代码拷贝到IDE里,编译打包成mapreduce-examples.jar
在odpscmd里执行add jar命令:
add jar /JarPath/mapreduce-examples.jar -f;
这里的 /JarPath/mapreduce-examples.jar的路径要替换成本地实际的文件路径。这个命令能把本地的jar包传到服务器上,-f是如果已经有同名的jar包就覆盖,实际使用中对于是报错还是覆盖需要谨慎考虑。

在odpscmd里执行
`jar -resources mapreduce-examples.jar -classpath mapreduce-examples.jar

com.aliyun.odps.mapred.open.example.WordCount wc_in wc_out`
等待作业执行成功后,可以在SQL通过查询wc_out表的数据,看到执行的结果

功能解读

任务提交
任务的是在MaxComput(ODPS)上运行的,客户端通过jar命令发起请求。
对比前面的快速开始,可以看到除去数据准备阶段,和MR相关的,有资源的上传(add jar步骤)和jar命令启动MR作业两步。

客户端发起add jar/add file等资源操作,把在客户端的机器(比如我测试的时候是从我的笔记本)上,运行任务涉及的资源文件传到服务器上。这样后面运行任务的时候,服务器上才能有对应的代码和文件可以用。如果以前已经传过了,这一步可以省略。
jar -resources mapreduce-examples.jar -classpath mapreduce-examples.jar com.aliyun.odps.mapred.open.example.WordCount wc_in wc_out
这个命令发起作业。MapReduce的任务是运行在MaxCompute集群上的,客户端需要通过这个命令把任务运行相关的信息告诉集群。

客户端先解析-classpath参数,找到main方法相关的jar包的位置
根据com.aliyun.odps.mapred.open.example.WordCount,找到main方法所在类的路径和名字
wc_in wc_out是传给main方法的参数,通过解析main方法传入参数String[] args获得这个参数
-resources告诉服务器,在运行任务的时候,需要用到的资源有哪些。

JobConfig

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

输入数据
InputUtils.addTable(TableInfo table, JobConf conf)设置了输入的表。
setSplitSize(long size)通过调整分片大小来调整Mapper个数,单位 MB,默认256。Mapper个数不通过void setNumMapTasks(int n)设置。
setMemoryForJVM(int mem)设置 JVM虚拟机的内存资源,单位:MB,默认值 1024.

Map阶段
setMapperClass(Class theClass)设置Mapper使用的Java类。
setMapOutputKeySchema(Column[] schema)设置 Mapper 输出到 Reducer 的 Key 行属性。
setMapOutputValueSchema(Column[] schema)设置 Mapper 输出到 Reducer 的 Value 行属性。和上个设置一起定义了Mapper到Reducer的数据格式。

Shuffle-合并排序
setOutputKeySortColumns(String[] cols)设置 Mapper 输出到 Reducer 的 Key 排序列。
setOutputKeySortOrder(JobConf.SortOrder[] order)设置 Key 排序列的顺序。
setCombinerOptimizeEnable(boolean isCombineOpt)设置是否对Combiner进行优化。
setCombinerClass(Class theClass)设置作业的 combiner。

Shuffle-分配Reduce
setNumReduceTasks(int n)设置 Reducer 任务数,默认为 Mapper 任务数的 1/4。如果是Map only的任务,需要设置成0。可以参考这里。
setPartitionColumns(String[] cols)设置作业的分区列,定义了数据分配到Reducer的分配策略。

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

数据输出
setOutputOverwrite(boolean isOverwrite)设置对输出表是否进行覆盖。类似SQL里的Insert into/overwrite Talbe的区别。
OutputUtils.addTable(TableInfo table, JobConf conf)设置了输出的表。

其他
void setResources(String resourceNames)有和jar命令的-resources一样的功能,但是优先级高于-resources(也就是说代码里的设置优先级比较高)
最后通过JobClient.runJob(job);客户端往服务器发起了这个MapReduce作业。
详细的SDK的文档,可以在Maven里下载。

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

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

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

odpscmd -e/-f:odpscmd的-e命令可以在shell脚本里直接运行一个odpscmd里的命令,所以可以在shell脚本里运行odpscmd -e ‘jar -resources xxxxxx’这样的命令,在shell脚本里调用MapReduce作业。一个完整的例子是
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”
如果在odpscmd的配置文件里已经配置好了,那只需要写-e的部分。
-f和-e一样,只是把命令写到文件里,然后用odpscmd -f xxx.sql引用这个文件,那这个文件里的多个指令都会被执行。

大数据开发套件可以配置MapReduce作业。
大数据开发套件可以配置Shell作业。可以在Shell作业里参考上面的方法用odpscmd -e/-f来调度MapReduce作业。
在JAVA代码里直接调用MapReduce作业,可以通过设置SessionState.setLocalRun(false); 实现。

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

产品限制
安全沙箱
沙箱是MaxCompute的一套安全体系,使得在MaxCompute上运行的作业无法获得其他用户的信息,也无法获得系统的一些信息。

无法访问外部数据源(不能当爬虫,不能读RDS等)
无法起多线程/多进程
不支持反射/自定义类加载器(所以不支持一些第三方包)
不允许读本地文件(比如JSON里就用到了,就需要改用GSON)
不允许JNI调用

其他限制

详见MaxCompute MR 限制项汇总

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522790.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flowable springboot项目自定义中文字体

Flowable springboot项目自定义中文字体 摘要:在flowable框架中,当我们想要集成springboot框架的时候,可能要设置中文字体,flowable6.4之前的版本因为没有可以设置字体的属性,所以我们没法进行中文字体的设置&#xff…

漫画 | Kubernetes带你一帆风顺去远航

戳蓝字“CSDN云计算”关注我们哦!来源 | Google Cloud如果你是一个狂立学习flag却屡屡打脸的懒癌晚期,或者是一个对云计算方面云里雾里,不知所措的好学者,亦或是一位资深行业专家,都欢迎关注【CSDN云计算公众号】&…

Kubernetes与Docker基本概念与常用命令对照

摘要: Docker是众多用户上手入门的基础容器和编排工具,提供了良好的开发者体验。Kubernetes是强大的容器编排平台,功能丰富。它们有很多概念和操作都有类似之处。我们今天会和大家对比基本概念与常用命令,可以方便熟悉Docker的用户…

flowable 设置流程跟踪高亮线的颜色

背景:在实际情况下,很多人对这个红色的高亮有意见,所以这里我把我的修改颜色的代码分享出来,希望对大家有帮助。(如果有问题可以加QQ群:633168411 里面很多高手,人也都非常善良) 效果…

连续启动 crash 自修复技术实现与原理解析

摘要: 如果 app 连续 crash 两次无法启动,用户往往会选择卸载。本文介绍如何该类 crash 的自修复技术。 点此查看原文:http://click.aliyun.com/m/41487/ 作者:阿里云-移动云-大前端团队 前言 如果 app 连续 crash 两次无法启动…

舞动的桥 阿里云首个百万IOPS云盘的背后

摘要: 近日,阿里云推出了首个百万IOPS的ESSD云盘服务,性能上有50倍的飞跃,同时还具备超高吞吐、超低时延等特性,在真实业务场景中,PostgreSQL数据库的写入速度快了26倍。 如此超高的性能,有人会…

Kubernetes上的服务网格 Istio - 分布式追踪篇

摘要: 2017年5月,Google、IBM和Lyft发布了开源服务网格框架Istio,提供微服务的连接、管理、监控和安全保护。Istio提供了一个服务间通信的基础设施层,解耦了应用逻辑和服务访问中版本管理、安全防护、故障转移、监控遥测等切面的问…

flowable实现流程回退功能

此版本为旧的版本,建议参看新的版本6.4.0 前期项目要求实现流程回退(仅要求回退到上一节点),所使用的flowable版本是6.2.0-SANPSHOT。在网上收到的流程回退的例子都是activity的,然而activity的很多接口在flowable中都…

如何用ACM简化你的Spring Cloud微服务环境配置管理

摘要: 本文我们就如何使用阿里云ACM这样的配置管理产品在Spring Cloud中替代Spring Cloud Config帮助简化环境配置管理做一个简单的示例,帮助你理解基于ACM来简化微服务环境配置管理的方案,并会简单比较一下ACM与Spring Cloud Config方案的优…

flowable 新的驳回方式 ChangeActivityStateBuilder 多实例驳回 并行网关驳回 普通节点驳回

6.4.0 新增加了驳回的方式,真是对中国式流程的一种福音呀,感谢flowable创始人。 再也不为开发驳回流程发愁了,网上那些视频和修改源码真的是demo级别的,不能商业用。 只有心如流水的学习才是永远的发电机,不要幻想别…

解锁新姿势 |如何利用配置中心规范构建PaaS服务配置

摘要: 在上一篇文章中,我们以MQ和ACM为例,讨论了如何借助配置中心对消息进行限流管理的场景。在本文中,我们继续以该场景为例,讲述如何以规范的配置命名格式来进行限流设置。 点此查看原文:http://click.al…

flowable流程实例笔记(1)

RuntimeService 运行服务类 支持启动的方式 流程定义: 从这里获取资源文件. 执行实例: 流程实例中执行的每个环节.流程实例: 一个流程实例包括所有运行的节点,一个流程中流程实例只有一个.启动一个实例: public void startProcessInstanceByKey() {String processDefinitionK…

flowable6.4.2流程审批后涉及到的表

当流程全部走完后,act_ru_*表的数据清空了,全部移到了act_hi_*表

阿里云弹性高性能计算产品商业化正式发布

摘要: 来自全国500多家企业申请试用,结合客户的体验需求和反馈意见,不断地改善和打磨,弹性高性能计算商业版有了很大的优化,在产品性能和体验上都有全新的升级。 点此查看原文:http://click.aliyun.com/m/4…

php中 怎么去除,php如何去掉链接

php去掉链接的方法:1、删除内容中的超链接ereg_replace(]*)>([^,\\2,$content);ereg_replace("]*>|","",$content);2、消除包含特定词的超链接$find"this string is my find";$string替换掉了;//将超链接替换成的内容echo ereg…

RabbitMQ入门指南(八):MQ可靠性

专栏导航 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、MQ数据持久化 1.交换机持久化 2.队列持久化 3.消息持久化 4.生产者确认机制 二、LazyQueue 1.LazyQueue模式介绍 2.管理控制台配置Lazy模式 3.代码配置Lazy模式 4.更新已有队列为lazy模式 总…

MaxCompute常用语句汇总(更新ing)

摘要: 收集一些MaxCompute常用命令。 点此查看原文:http://click.aliyun.com/m/41645/ 大数据计算服务(MaxCompute,原名ODPS,产品地址:https://www.aliyun.com/product/odps)是一种快速、完全托管的TB/PB级数据仓库解决…

290种零食大统计,谁能唤起80、90后的童年回忆?|数据会说话

戳蓝字“CSDN云计算”关注我们哦!数据分析:喜欢果脯的朱小五内容撰写:只爱辣条的王小九本文转自公众号『凹凸数读』1块钱能买到什么?对于80、90后的童年来讲,1块钱是4根冰棍,是10张辣片,是两包双…

php socket主动推送消息,PHP使用WebSocket主动推送【微信小程序接收】

WebSocket.jpegWebsocket是一种服务端和客户端可以持久连接的通信协议,我们可以利用WebSocket的特性实现服务器主动向客户端推送消息的功能。这里我们用TP5.1框架结合Workerman来做演示首先用Composer下载TP5.1框架composer create-project topthink/think5.1.* tp5…

EDAS再升级!全面支持Spring Cloud应用

摘要: 近日,阿里中间件(Aliware)的企业级分布式应用服务EDAS宣布再次升级,全面支持Spring Cloud应用。 点此查看原文:http://click.aliyun.com/m/41644/ 近日,阿里中间件(Aliware&am…