MaxCompute实践

  • 时间:
  • 浏览:3
  • 来源:uu快3玩法_uu快3新平台_棋牌

目前我们都都儿主要有这个 数据源的数据需要放至MaxCompute中进行解决,这个 为MySQL,这个 为MongoDB。在此主要描述MySQL相关的,至于MongoDB嘛,看过最后你就会知道了^_^。

以下为我的同事在使用中的经验总结,在此我一同提一下:

MaxCompute的kettle插件的大问题(另一方只用过Aliyun MaxCompute Output,没法用过Aliyun MaxCompute Input,为什么会么会让只对Output每种做评价):

创建时间字段: created_at

更改时间字段: updated_at

时间字段值: unix时间戳

表底部形态定义如下:

我们都都儿在测试使用数据同步更新,使用query参数过滤数据,按文档中所描述,语法参照MongoDB查询语法

https://help.aliyun.com/knowledge_detail/60 354.html?spm=a2c1i.8282367.0.0.OPStre

增量表表名后缀:_ inc

执行ODPS_SQL克隆odps_test_history表并命名为odps_test作为最终目标表。

将会左侧能提供4个多树形菜单将多级分类列出,点击就能查看对应分类下的表就方便多了。

数据表名: odps_test_history

分 区 名: pt

分 区 值: 数据的创建日期

表底部形态定义如下:

参考同步不必变化的数据

通过脚本模式将小于当前日期(2017-07-13)的所有的数据一次性导入到一张临时表中。

在数据开发中点击测试运行,看过任务成功运行后,在任务设置调度参数中设置暂停(测试运行不必受到调度干扰,直接运行)。

将会我们都都儿有大量的Mysql数据表需要导入,发现有个整库迁移的工具都需要使用,刚发现时就怦然心动,然而经过实测后大失所望,将会该工具日期字段的值需却说 我yyyymmdd格式,像我们都都儿使用UNIX时间戳压根没法用。

另外该功能不支持表字段指定,将会这个 数据表字段过于敏感想不进行同步,却说 我能设置。

注: odps_test是却说 我同步数据的脚本模式的任务名称。

更改后的同步脚本如下,请注意蓝绿色每种:

因初期数据量相对较小,使用Kettle进行抽取数据等工作,ETL的工作大每种在MySQL数据仓库中完成。多种数据源使用Presto(集群)作为查询中间键进行相应的数据分析。但随着业务的疯狂增长,数据表单表达到数亿后,磁盘容量达数几百GB时,数据要求的繁杂度逐步提升,使用MySQL作为基础数据仓库的基石将会不足英文以应付,常跳出查询响应时间等待图片过长,甚至内存崩溃是因为执行失败的情况报告,极大的影响了工作效率。统统使用取舍一款大数据平台势在必行。初期考虑使用Hadoop来做进行数据分析平台,恰逢MaxCompute横空出世给我们都都儿4个多新的取舍,在经过仔细比对后,考虑到公司新数据部门刚成立不久,Hadoop大数据相关人才储备较为紧缺,将会等待图片Hadoop体系完成搭建并使用,将会需要更多的时间,而这势必会拖慢完后 的工作进度。而将会使用MaxCompute相对于自建Haoop数据平台要简单,快速的多,但任何产品在正式使用前必然需要进行删剪的调研,统统不必结束了了调研的过程。

数据主要分为会变化的数据(有修改+有增加)与不必变化的数据(只增加),官方文档中是建议每天全量的同步策略,即每天的数据作为4个多副本存至同步日期为分区,原先做我觉得 有统统的好处。

但实际情况报告将会将会数据量过大,每天同步将会会花更多的时间(测试过1亿数据最少在3~4小时左右,脚本参数配置speed": { "concurrent": "1", "mbps": "1" }),将会我们都都儿业务中不趋于稳定DELTE操作,统统我们都都儿这里解决不管数据是否是变化都使用每日增量的最好的办法解决,最终按数据的创建日期存放入对应的分区(前期也问你为什么会么会会么会设计,怎么才能 才能 设计最佳,统统就先设计为1级分区),我觉得 原先需要多做一步合并操作,多耗费这个 资源费用,但我觉得 是实现我们都都儿的要求。

注意事项

A. 为方便演示,继续使用test表来作为演示表。

B. 同步会变化的数据与不必变化的数据,前面六个步骤一样是一样,在此不进行复述。

将合并数据的任务的上游任务设置为每日增量同步数据那个任务,并提交即可。

接触一件新事务时遇到了困难,为什么会么会让另一方无法解决时,难免会感到彷徨无助,有种挫败感。

万幸的是我在钉钉上找到了组织,非常感谢阿里云MaxCompute项目组的@数加·祎休(yī xiū)@一斅@彭敏@李珍珍等工作人员的鼎力支持,在我们都都儿提交大问题后,不厌其烦及时为什么会么会让认真的回答解决我们都都儿的大问题,祝我们都都工作顺利,事事顺心。

为什么会么会让我们都都儿运行后,系统tcp连接报错无法运行了,报错信息为说是格式的大问题,解析不了。

将会执行到这个 步基本上就完成了,隔天就会在你在设定时间内运行,你也都需要去运维中心中查看你的任务情况报告。

下面附上”不必变化的数据“数据同步的删剪流程图:

执行ODPS_SQL将数据导入到最终目标表中。

根据该写法,那在脚本模式中的写法将是:

"query": "{'updated_at':{'$gte':ISODate('${last_day}T00:00:00.424+060 0').valueOf() / 60 0}}",

执行ODPS SQL,创建一张增量表

将会各种是因为我们都都儿一结束了了是拿MongoDB进行的测试,为此专门找DBA挑一张较小的数据表( 约3GB左右)进行。按照文档中描述,使用脚本模式根据文档进行了配置,我觉得 很挺简单的,统统进行任务测试,任务如期正常运行,但经过观察发现数据同步的效率逐步下降,最不必无法忍受的没法10KB/S,该表同步了20多个小时都没同步完,最后任务自行中止了。经过询问相关技术人员,将会将会Mongodb同步数据的底层实现还趋于稳定这个 大问题是因为同步效率过慢是因为的。为此没法取舍替代方案,主要集中在“基于Kettle的MaxCompute插件”及“基于Tunnel SDK开发”,经过比对后考虑到开发效率及同步效率,最终取舍暂时采用Kettle来进行mongodb的导入工作。

并输入以下内容:

如下为导入效率对比结果:

报错信息如下:

2017-06-23 20:46:32.647 [job-37098472] ERROR JobContainer - Exception when job run

参考同步不必变化的数据

将会想效率更高这个 可使用下方搞笑的话,当字段created_at有索引时都需要命中:

org.bson.json.JsonParseException: Invalid JSON input. Position: 62. Character: '.'.

参考同步不必变化的数据

参考同步不必变化的数据

执行ODPS SQL,如4个多数一样则说明导入成功,如不一样,请重试。

在数据开发->任务开发中创建4个多节点任务,任务名称使用_merge结尾

如确认数据无误,则都需要删除临时表。当然你也都需要不删除,以便出了错只需将此时间节点内的数据导入即可,解决从头导入的过程。

参考同步不必变化的数据

当mongodb中字段为unix时间戳时,将会使用query参数进行过滤?

我觉得 MaxCompute有多种迁移方案可供取舍,但将会使用大数据开发套件上的脚本模式也能有效完成搞笑的话,另一方还是比较倾向使用大数据开发套件去完成,除非在此之上无法完成。将会相对于另一方使用SDK直接同步或这个 工具去实现,大数据开发平台要简单快速的多,任务调度系统完善,任务运行情况报告相对清晰便于查错,完后 更多任务都需要灵活组合搭配。

将会执行到这个 步基本上就完成了,隔天就会在你在设定时间内运行,你也都需要去运维中心中查看你的任务情况报告。

下面附上”会变化的数据“数据同步的删剪流程图:

另一方完后 总爱从事系统tcp连接开发的(PHP、JAVA、Python)工作,在完后 的工作经历富含过一段时间配合Hadoop工程师的事务,但接触的不必说深,没法说略知点皮毛,怪怪的管中窥豹的感觉。

今年进了新公司,将会公司正在组建新的数据部门,非常有幸另一方得以调入该部门,恰逢MaxCompute横空出世,刚好将会我那时工作比较空闲,得以安排调研它的功能及测试是否是符合我们都都儿的要求。

将会另一方对大数据这块的经验不足英文,涉及的内容有的是的是太高端的,所得知识基本是通过阅读文档获得,统统本文仅以初学者的效率去阐述,主要围绕数据迁移这块,这个 每种还未来得急涉及,如有不正确的地方,还请指出,谢谢。

在“大数据开发套件”中同步数据主要使用时间段的最好的办法进行同步,主要分为4个多步骤,第一步为手动全量同步,第二步为自动每日增量。将会想让数据的每条数据按数据的创建时间存放入对应的日期搞笑的话,则需要在此基础上进行细化。针对不同的数据(会变化与不必变化)的解决最好的办法也各有所不同,基本上是按照文档中所描述的进行了,却说 我稍微这个 不同。

脚本配置如下:

这个 大问题我完后 有的是提交过工单,工单内容如下:

我们都都儿花了时间查看文档依旧没法得到答案,所完后 来请教一下。

更新同步脚本,并将任务进行提交,完后 的第一步操作的暂停记得勾掉。

更改后的同步脚本如下,请注意蓝绿色每种:

将会太长不好截图,统统脚本模式这里的where的参数值使用:

将会我们都都儿mongodb表中表示数据"最后更新时间"的字段为updated_at,其存放的内容为unix时间戳。

mongodb中将日期格式化成unix时间戳的最好的办法是:ISODate("2012-10-15T21:26:17+060 0").valueOf() / 60 0