文档章节

阿里云大数据利器Maxcompute学习之--数据同步任务常见日志报错总结

大大梁
 大大梁
发布于 2017/05/18 17:11
字数 1455
阅读 8
收藏 0
点赞 0
评论 0

 

在使用大数据开发套件时最常用的就是数据同步模块,工单里最常见的问题就是其中数据同步的问题,这里总结一些常见一些从Maxcompute到其他数据源的同步任务报错案例,主要是日志中出现数据回滚写入的问题。
   那首先看下日志中数据回滚的原因,当数据写入rds或者hybridDB等一些支持事务的数据库中,数据批量写入,一旦由于各种原因没有写入成功,这个批次的数据会回滚重新写入,如果再次写入失败,就会报脏数据的错误导致任务失败。数据写入失败可能是以下原因导致回滚。
1,脏数据(数据值超过数据类型最大范围,数据类型不对应等等)
2,目标数据源字段设置,比如默认不允许为空
3,主键冲突
4,目标数据源本身负载太高,写入时死锁
5,同步的设置的速度太大,比如数据量很大,速度设为10M/s。

常见回滚日志报错示例:

 2017-01-01 17:01:32.544 [16876048-0-0-writer] WARN  CommonRdbmsWriter$Task - 回滚此次写入, 采用每次写入一行方式提交. 

因为:java.sql.BatchUpdateException: INSERT, DELETE command denied to user 'xxx'@'xx.xx.xx.xx' for table 'report'

下面来看几个案例

案例一: MaxCompute到hybridDB的数据同步任务报错,错误提示:

INSERT INTO hybrid_schema.dim_bz_317hu_account_gold_stg (id,account_id,hospital_id,total_gold,valid_flag,withhold,type,com_date_id,com_hour_id,from_source,create_time,update_time,creator,updater) VALUES('7933'::int8,'33718'::int8,'560'::int8,'0.0'::float8,'ENABLE'::varchar,'0.0'::float8,'1'::int8,'20170322'::int8,'11031'::int8,'bz_317hu'::varchar,'2017-03-22 10:31:45.000000 +08:00:00'::timestamp,'2017-03-22 10:31:45.000000 +08:00:00'::timestamp,'liuchang'::varchar,'liuchang'::varchar) was aborted.  Call getNextException to see the cause.
2017-03-23 00:51:34.154 [job-24934082] INFO  LocalJobContainerCommunicator - Total 47 records, 4672 bytes | Speed 0B/s, 0 records/s | Error 0 records, 0 bytes |  All Task WaitWriterTime 0.000s |  All Task WaitReaderTime 0.000s | Percentage 0.00%
2017-03-23 00:51:37.976 [24934082-0-9-writer] WARN  CommonRdbmsWriter$Task - 回滚此次写入, 采用每次写入一行方式提交. 因为:Batch entry 0 INSERT INTO hybrid_schema.dim_bz_317hu_account_gold_stg (id,account_id,hospital_id,total_gold,valid_flag,withhold,type,com_date_id,com_hour_id,from_source,create_time,update_time,creator,updater) VALUES('7931'::int8,'39316'::int8,'568'::int8,'0.0'::float8,'ENABLE'::varchar,'0.0'::float8,'1'::int8,'20170322'::int8,'11016'::int8,'bz_317hu'::varchar,'2017-03-22 10:16:04.000000 +08:00:00'::timestamp,'2017-03-22 10:16:04.000000 +08:00:00'::timestamp,'liuchang'::varchar,'liuchang'::varchar) was aborted.  Call getNextException to see the cause.
2017-03-23 00:51:38.987 [24934082-0-9-writer] ERROR StdoutPluginCollector - 
org.postgresql.util.PSQLException: ERROR: deadlock detected
  Detail: Process 42073445 waits for ExclusiveLock on resource queue 6055; blocked by process 50785454.
Process 50785454 waits for ShareUpdateExclusiveLock on relation 853985 of database 17163; blocked by process 51099525.
Process 51099525 waits for ExclusiveLock on resource queue 6055; blocked by process 42073445.
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2198) ~[postgresql-9.3-1102-jdbc4.jar:na]
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1927) ~[postgresql-9.3-1102-jdbc4.jar:na]
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255) ~[postgresql-9.3-1102-jdbc4.jar:na]
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:561) ~[postgresql-9.3-1102-jdbc4.jar:na]
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:419) ~[postgresql-9.3-1102-jdbc4.jar:na]
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:412) ~[postgresql-9.3-1102-jdbc4.jar:na]
	at com.alibaba.datax.plugin.rdbms.writer.CommonRdbmsWriter$Task.doOneInsert(CommonRdbmsWriter.java:382) [plugin-rdbms-util-0.0.1-SNAPSHOT.jar:na]
	at com.alibaba.datax.plugin.rdbms.writer.CommonRdbmsWriter$Task.doBatchInsert(CommonRdbmsWriter.java:362) [plugi

 问题定位:
有数据回滚操作,初步定位为数据在hybridDB写入失败,回滚写入失败,出现脏数据大于用户设置的0条。任务终止。
问题排查:
看到日志中出现下面报错:


 

排查看到日志中有显眼的一句:

org.postgresql.util.PSQLException: ERROR: deadlock detected

 那么问题基本定位到:是因为hybridDB这边表出现死锁,数据写不进去,报脏数据,任务失败。
导致hybridDB死锁的原因可能是这个表的负载很大,排查一下用户配置:同步速率设置的10M/s,那就非常有可能是这个速度和用户的数据量太大,写入负载太高导致死锁。

解决方法:根据自己数据量和需求设置同步速度,这个案例建议用户调小一些同步速率,错开高峰,把任务放到低谷时期执行。
案例二:目标数据库设置字段不能为空,数据中有null值,同步报错:

问题定位:报错显示目标数据库中的有些字段设置的是cannot be null,而数据中有null值。导致失败
解决方案:修改目标数据库中的字段设置,如果此字段必须不能为空,核对下数据来源保证不能为空,或者对数据预处理一下null值。

案例三:数据同步到rds时,odps中有重复数据,rds中设置主键,导致主键冲突。

问题定位:日志中有回滚写入操作,报错提示 Detail: Key (id)=(2022080640) already exists.可以定位是主键冲突了,

原因是rds中设置主键的这个字段在odps中存在重复,并不是唯一值。

解决方案:

1,建议重新建一张没有主键的表。

2,如果要主键,选择odps中有唯一约束的字段。

3,业务上允许的话,可以先对odps中的数据进行去重再同步


案例三:数据同步到rds,rds端字段数据类型设置太小。



原因定位:数据同时出现回滚,报错:java.sql.BatchUpdateException: Data truncation: Data too long for column 'flash' at row 1

Maxcompute中的数据字段值,超出rds表中设置的数据类型的阈值,导致写入失败。

解决方案:去rds中调大这个字段的对应数据类型值


总结:数据同步任务涉及多种数据源,问题类型也是比较多。那从日志中排查报错是比较常见的方式。本文就罗列了一些Maxcompute到其他数据库的一些常见典型的案例,有不足的地方希望读者联系我指出来啊

本文转载自:

共有 人打赏支持
大大梁
粉丝 0
博文 225
码字总数 0
作品 0
阿里巴巴大数据计算平台MaxCompute(原名ODPS)全套攻略(持续更新20171127)

概况介绍 大数据计算服务(MaxCompute,原名ODPS,产品地址:https://www.aliyun.com/product/odps)是一种快速、完全托管的TB/PB级数据仓库解决方案。MaxCompute向用户提供了完善的数据导入方...

隐林 ⋅ 2017/05/05 ⋅ 0

阿里云大数据利器之-RDS迁移到Maxcompute实现动态分区

当前,很多用户的业务数据存放在传统关系型数据库上,例如阿里云的RDS,做业务读写操作。当数据量非常大的时候,此时传统关系型数据库会显得有些吃力,那么会经常有将mysql数据库的数据迁移到...

上单 ⋅ 2017/08/30 ⋅ 0

【转载】阿里云MVP Meetup 《云数据·大计算:海量日志数据分析与应用》之《数据采集:日志数据上传》篇

实验涉及大数据产品 大数据计算服务 MaxCompute 大数据开发套件 DataWorks 实验环境准备 必备条件:首先需要确保自己有阿里云云账号并已实名认证。详细点击: 注册阿里云账号 企业实名认证 ...

frenchfry516 ⋅ 2017/11/23 ⋅ 0

五步帮你实现用户画像的数据加工

企业最终的数据往往都隐藏在日志背后,如果从日志背后挖掘出有价值的信息,勾画出平台或网站的用户画像对精准化运营有着重要的帮助。阿里云技术专家祎休带来阿里在处理日志、构建数仓上的最佳...

Mr_zebra ⋅ 02/01 ⋅ 0

MaxCompute助力ofo实现精细化运营:日订单超3200万、整体运行效率提升76%

摘要: ofo小黄车大数据BI系统负责人龙利民为大家分享了ofo的上云体验,重点分享了MaxCompute的应用实践,最后对阿里云提出了自己的建议需求。 关于ofo小黄车 共享经济不仅与技术相关,它还关...

阿里云云栖社区 ⋅ 03/16 ⋅ 0

大数据阿里云产品的简单介绍理解

很多人问,大数据是什么。一个时尚的技术名词,一个互联网时代的标志。给人高端大气上档次的感觉,很多公司不说自己有大数据都不好意思跟别人谈业务。那我就谈谈我的一些看法来结合阿里云的数...

上单 ⋅ 2017/05/15 ⋅ 0

2018年5月大数据ACP考试题目回顾

大数据 ACP 考试考试题目回顾 参数 任务调度时间为,那么的结果为 A. 是 B. 否 答案: A 解析: 可以任意分解组合,即某一时刻进行调度就显示某个时间的值,精确到秒 union all t1和t2两张表...

卓见架构狮 ⋅ 05/25 ⋅ 0

手把手,教你用MaxCompute+OpenSearch搭建分布式搜索引擎

摘要: 最近,经常有客户咨询如何低成本搭建高性能的海量数据搜索引擎,比如实现公众号检索、影讯检索等等。由于客户的数据在阿里云上,所以希望找到云上解决方案。笔者开始调研一些云上产品...

阿里云云栖社区 ⋅ 04/13 ⋅ 0

基于阿里云数加MaxCompute的企业大数据仓库架构建设思路

摘要: 数加大数据直播系列课程主要以基于阿里云数加MaxCompute的企业大数据仓库架构建设思路为主题分享阿里巴巴的大数据是怎么演变以及怎样利用大数据技术构建企业级大数据平台。 本次分享嘉...

阿里云云栖社区 ⋅ 03/15 ⋅ 0

阿里云全球首批 MVP 杨绣专访 - 技术要坚持刨根问底

自我介绍 我现在在人人车负责数据架构方面的工作,搭建数据采集、抓取、存储、计算、BI可视化等系统。 之前在百度网页搜索部,是一名架构工程师(主要在抓取业务),技术方向是高并发分布式服务...

花肉酱 ⋅ 2017/06/26 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Jenkins实践3 之脚本

#!/bin/sh# export PROJ_PATH=项目路径# export TOMCAT_PATH=tomcat路径killTomcat(){pid=`ps -ef | grep tomcat | grep java|awk '{print $2}'`echo "tom...

晨猫 ⋅ 今天 ⋅ 0

Spring Bean的生命周期

前言 Spring Bean 的生命周期在整个 Spring 中占有很重要的位置,掌握这些可以加深对 Spring 的理解。 首先看下生命周期图: 再谈生命周期之前有一点需要先明确: Spring 只帮我们管理单例模...

素雷 ⋅ 今天 ⋅ 0

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 今天 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 今天 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部