MaxCompute 向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题,有效降低企业成本,并保障数据安全
提交一个SQL语句,发送 RESTful 请求给HTTP服务器HTTP 服务器做用户认证。认证通过后,请求就会以 Kuafu通信协议方式发送给 Worker。Worker判断该请求作业是否需要启动Fuxi Job。如果不需要,本地执行并返回结果。如果需要,则生成一个 instance, 发送给 Scheduler。Scheduler把instance信息注册到 OTS,将其状态置成 Running。Scheduler 把 instance 添加到 instance 队列。Worker把 Instance ID返回给客户端。
倾斜问题则一般是数据本身的问题,常见的数据倾斜是怎么造成的?
Shuffle的时候,将各个节点上相同的key拉取到某个节点的一个task进行处理,比如按照key进行聚合或join等操作,如果某个key对应的数据量特别大的话,就会发生数据倾斜现象。数据倾斜就成为了整个task运行时间的短板。
触发shuffle的常见算子:distinct、groupBy、join等。
要解决数据倾斜的问题,首先要定位数据倾斜发生在什么地方,首先是哪个stage,直接在D2 UI上看就可以,查看数据是否倾斜了
logview--odps task--detail--stage--longtail
根据stage日志,判断出数据倾斜发生在哪个算子上。
根据倾斜发生的阶段,我们又可以把它们分为map倾斜,reduce倾斜,join倾斜
通常来说,对于倾斜现象,我们首先查看导致数据倾斜的key的数据分布情况,接下来大概有几种处理方案:
1:过滤数据
过滤掉某些脏数据,比如说是否可以去掉null,去掉某些条件对应的值
2:加大并行度
给任务添加处理资源,加大instance的数量,暴力
3:对数据进行拆分,分而治之
如果大表join小表,我们可以用mapjoin,将小表cache进内存
二次分发,加上随机前缀(数据膨胀),拆分数据集为热点+非热点再进一步处理
大表join超大表,还可以考虑bloomfilter
4:组合使用
上述方法,组合使用
5:修改业务
实在没有进步空间,从业务上过滤数据
亲可以看一下产品手册和案例:https://yq.aliyun.com/attachment/download/?id=1489
当然可以用,到官网先看看文档
https://www.aliyun.com/product/odps
另外我们也有样板间可以免费体验
https://data.aliyun.com/experience/case7
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。