通过简单瘦身,解决Dataworks 10M文件限制问题
原标题:通过简单瘦身,解决Dataworks 10M文件限制问题
摘要:大数据计算服务(MaxCompute)的功能详解和使用心得
摘要: 用户在DataWorks上执行MapReduce作业的时候,文件大于10M的JAR和资源文件不能上传到Dataworks,导致无法使用调度去定期执行MapReduce作业。 解决方案: jar -resources test_mr.
点此查看原文:http://click.aliyun.com/m/41384/
用户在DataWorks上执行MapReduce作业的时候,文件大于10M的JAR和资源文件不能上传到Dataworks,导致无法使用调度去定期执行MapReduce作业。
前言
解决方案:
MapReduce已经有文档,用户可以参考文档使用。本文是在文档的基础上做一些类似注解及细节解释上的工作。
第一步:大于10M的resources通过MaxCompute CLI客户端上传,
功能介绍
客户端下载地址:https://help.aliyun.com/document_detail/27971.html
MapReduce
客户端配置AK、EndPoint:https://help.aliyun.com/document_detail/27804.html
add jar C:test_mrtest_mr.jar -f;//添加资源
说起MapReduce就少不了WordCount,我特别喜欢文档里的这个图片。
第二步:目前通过MaxCompute CLI上传的资源,在Dataworks左侧资源列表是找不到的,只能通过list resources查看确认资源;
比如有一张很大的表。表里有个String字段记录的是用空格分割开单词。最后需要统计所有记录中,每个单词出现的次数是多少。那整体的计算流程是
list resources;//查看资源
输入阶段:根据工作量,生成几个Mapper,把这些表的数据分配给这些Mapper。每个Mapper分配到表里的一部分记录。
第三步:瘦身Jar,因为Dataworks执行MR作业的时候,一定要本地执行,所以保留个main就可以;
Map阶段:每个Mapper针对每条数据,解析里面的字符串,用空格切开字符串,得到一组单词。针对其中每个单词,写一条记录
Shuffle阶段-合并排序:也是发生在Mapper上。会先对数据进行排序。比如WordCount的例子,会根据单词进行排序。排序后的合并,又称Combiner阶段,因为前面已经根据单词排序过了,相同的单词都是连在一起的。那可以把2个相邻的合并成1个。Combiner可以减少在后续Reduce端的计算量,也可以减少Mapper往Reducer的数据传输的工作量。
通过上述方法,我们可以在Dataworks上跑大于10M的MR作业。
Shuffle阶段-分配Reducer:把Mapper输出的单词分发给Reducer。Reducer拿到数据后,再做一次排序。因为Reducer拿到的数据已经在Mapper里已经是排序过的了,所以这里的排序只是针对排序过的数据做合并排序。
作者:隐林
Reduce阶段:Reducer拿前面已经排序好的输入,相同的单词的所有输入进入同一个Redue循环,在循环里,做个数的累加。
本文为云栖社区原创内容,未经允许不得转载。返回搜狐,查看更多
输出阶段:输出Reduce的计算结果,写入到表里或者返回给客户端。
责任编辑:
拓展MapReduce
如果Reduce后面还需要做进一步的Reduce计算,可以用拓展MapReduce模型(简称MRR)。MRR其实就是Reduce阶段结束后,不直接输出结果,而是再次经过Shuffle后接另外一个Reduce。
Q:如何实现M->R->M->R这种逻辑呢
A:在Reduce代码里直接嵌套上Map的逻辑就可以了,把第二个M的工作在前一个R里完成,而不是作为计算引擎调度层面上的一个单独步骤,比如
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的其他设置项的用法。
本文由蒲京娱乐场发布于常见问答,转载请注明出处:通过简单瘦身,解决Dataworks 10M文件限制问题
关键词:
下一篇:新奥门蒲京娱乐场GeekPwn王琦:永远鼓励安全极客