什么时候用事务?什么时候不用事务?_当我们用【MaxCompute】的时候,我们在用什么?...

0bf4480a6990da5dfdeaafe1997982c3.png

一、MaxCompute是什么?

MaxCompute(原ODPS,Open Data Processing Service)是一项大数据计算服务,它能提供快速、完全托管的PB级数据仓库解决方案。主要提供了四大功能:数据通道、结构化存储、多计算模型、数据安全管理。

1.数据通道

  • 批量/历史数据通道--tunnel

适合于全量数据或历史数据的导入、导出;

  • 实时/增量数据通道--DataHub

该服务具有延迟低的特点,适合增量数据的导入,同时还支持多种数据传输的插件,如logstash、flume、fluentd、sqoop、logservice等。

2.数据存储

  • 数据进入maxcompute后,默认会以结构化的方式存储,且有自己的数据类型,如Bigint, Boolean, Double, Datetime, String, Decimal;
  • 数据上传后,以列压缩的方式存储到盘古上。这种压缩方式的好处就是对于文本类型的数据,一般都能取得较好的压缩比,一般是4:1。

3.多计算模型

1)SQL

  • MaxCompute SQL采用标准的SQL语法,兼容部分Hive语法。在语法上和HQL非常接近,熟悉SQL或HQL的编程人员都容易上手;
  • MaxCompute提供更高效的计算框架支持SQL计算模型,执行效率比普通的MapReduce模型更高;
  • 需要注意的是,MaxCompute SQL不支持事务、索引及Update/Delete等操作。

2)MapReduce

  • MaxCompute提供的Java MapReduce编程模型;
  • 由于MaxCompute并没有开放文件接口,用户只能通过它所提供的Table读写数据;
  • 更为重要的是,MaxCompute还提供了基于MapReduce的扩展计算模型, 即MR2。在该模型下,一个Map函数后,可以接入连续多个Reduce函数。

3)Graph

  • 对于某些复杂的迭代计算场景,例如:K-Means,PageRank等,如果仍然使用MapReduce来完成这些计算任务将是非常耗时的。MaxCompute提供的Graph模型能够非常好的完成这一类计算任务。

二、飞天系统和Hadoop生态圈架构对比

2e7e380e7dcebee10398d75aa13625df.png

vs

d2f7ce9c296a8d1d483bb00e16738680.png

三、MaxCompute优化原则

1.选表原则

  • 选择满足需求的小表,比如汇总表。维表尽量选择全量表,事实表尽量选择增量表;
  • 选择产出早的表;
  • 选择可回滚的表,比如使用加购事件表代替加购全流程表;
  • 依赖的N个上游表,尽量保证上游产出时间要均匀,如果有差异,考虑换依赖表;

2.小表原则

  • 行数小于100万的表认为是小表,这个时候使用mapjoin性能会提高很多;
  • 读取数据的时候要加上分区等过滤条件,大表变小表。常用过滤条件字段,做成动态分区,方便下游过滤;
  • 不得不读取N天大表的时候,使用unionall方式合并多天数据;

3.代码原则

  • Join关联要尽可能是主键关联。关联字段类型要一致;
  • 多天汇总,先生成1天轻度汇总表,多天使用1天数据再汇总;
  • multiinsert,实现一次读取多次写入;
  • 使用系统UDF代替自己的写的UDF;

4.调度原则

  • 依赖max_pt的,要排除当天依赖;
  • 上游是小时任务,使用max_pt要慎重;
  • 执行超过1个小时任务要关注;

四、MaxCompute应用限制

1.SQL限制

  • 多路输出限制:单个SQL里最多可以写128路输出,超过128路报语法错误;
  • 动态输出分区限制:任意动态分区SQL不允许生成超过2000个动态分区,否则引发运行时异常;
  • Select屏显限制:Select屏显结果最多只有10000条输出;
  • Order by语句后必须接Limit;
  • Sort By必须与Distribute By配合使用;
  • 最多允许128路union all,超过此限制报语法错误;
  • MaxCompute 的JOIN支持多路间接,但不支持笛卡尔积,即无on条件的链接;
  • MaxCompute中的Join连接条件,只允许and连接的等值条件,并且最多支持16路join操作。只有在MAPJOIN中,可以使用不等值连接或者使用or连接多个条件;
  • 目前MaxCompute 在mapjoin中最多支持指定6张小表,否则报语法错误;
  • 如果使用mapjoin,则所有小表占用的内存总和不得超过512MB。请注意由于MaxCompute 是压缩存储,因此小表在被加载到内存后,数据大小会急剧膨胀。此处的512MB限制是加载到内存后的空间大小;
  • 多个表join时,最左边的两个表不能同时是mapjoin的表;

2.MapReduce限制

  • 单个任务引用的资源数量不超过512个,分区表按照一个单位计算。
  • 单个任务引用的资源总计字节数大小不超过64MB。
  • 单个任务的输入路数不能超过128,单个任务的输出路数不能超过128路。
  • 单个任务中自定义Counter的数量不能超过64。
  • 单个Map或Reduce Worker占用memory默认为2048MB,范围[256MB, 12GB]。
  • 单个Map或Reduce Worker重复读一个资源次数限制 <=64次。
  • 本地运行模式下,Map Worker个数不能超过100;Reduce Worker个数不能超过100;默认一路输入下载记录数100。

以上

ps:这篇文章是基于我从工作中由hadoop切换到maxcompute时,搜集整理的一些内容,希望能帮助到需要的同学。如果觉得不错,欢迎收藏分享~


看得不过瘾?直接来公众号里面看:

大数据干货系列(一)--MapReduce总结

大数据干货系列(三)-- Hadoop2.0总结

还有其他感兴趣的文章可以进入公众号主页,点击【菜单】即可:

3e61ae7fc1d9e050343fe6b9fe7eeeca.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值