DataWorks百问百答69:有哪些数据集成报错(数据集成报错归类)?-阿里云开发者社区

开发者社区> DataWorks> 正文
登录阅读全文

DataWorks百问百答69:有哪些数据集成报错(数据集成报错归类)?

简介: 数据集成报错归类

ODPS模块:

ODPS Reader:

1.ODPS session超时
ErrorMessage:
Code:DATAX_R_ODPS_005:读取ODPS数据失败, Solution:[请联系ODPS管理员]. - RequestId=202012091137444331f60b08cda1d9, ErrorCode=StatusConflict, ErrorMessage=The download session is expired.
数据集成报错归类1.png

分析:odps session只能维持24h,超过该实现则任务自动失败退出。请根据同步数据量合理调整任务并发数或者合理规划要同步的数据量。
解决办法:合理提升并发数和规划同步数据量

ODPS Writer

1.ODPS写block失败
ErrorMessage:
Code:[OdpsWriter-09], Description:[写入数据到 ODPS 目的表失败.]. - ODPS 目的表写 block:0 失败, uploadId=[202012081517026537dc0b0160354b]. 请联系 ODPS 管理员处理. - java.io.IOException: Error writing request body to server。
数据集成报错归类2.png

分析:同步的数据写入odps block时失败,odps端异常
可能原因1:数据类型异常(来源数据不符合odps数据类型规范,比如4.2223这个数据值写入odps的decimal(18,10)数据类型。请转换使用double类型或者string类型)
可能原因2:odps坏块/通信异常等
处理办法:可提odps工单或dataworks工单咨询排查。

RDS Mysql模块:

1.datax切分的读数数据的select sql执行超时/未返回数据值

ErrorMessage:
Code:[DBUtilErrorCode-07], Description:[读取数据库数据失败. 请检查您的配置的 column/table/where/querySql或者向 DBA 寻求帮助.]. - 执行的SQL为:select ID,COMMAND_CODE,TAKE_STOCK_RCD_ID,WAREHOUSE_CODE,IN_OUT_TYPE,SKU_CODE,QUANTITY,MEMO,SUBMIT_USER_ID,SUBMIT_TIME,WMS_TAKE_STOCK_RCD_ID,REFERENCE_CODE from t_wh_inv_rcd where (5801353 <= ID AND ID < 7251691) 具体错误信息为:Application was streaming results when the connection failed. Consider raising value of 'net_write_timeout' on the server. - com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Application was streaming results when the connection failed. Consider raising value of 'net_write_timeout' on the server.
数据集成报错归类3.png

分析:datax将rds mysql根据splitpk对mysql的数据进行拆分成数条等量的取数sql(select取数语句),执行时某条sql执行时间超过rds侧允许的最大运行时间(一般为60秒/15min等),导致报错。
处理办法:
①将此条sql复制到rds mysql侧实际运行,观察执行时间是否大于设定阈值min
②联系rds mysql值班调整rds侧"net_write_timeout" 超时时间
数据集成报错归类4.png

③数据同步任务配置出错自动重跑以避免偶现问题导致任务下游及去下游阻塞。

2.写入odps脏数据

{"message":"写入 ODPS 目的表时遇到了脏数据: 第[3]个字段的数据出现错误,请检查该数据并作出修改 或者您可以增大阀值,忽略这条记录.","record":[{"byteSize":0,"index":0,"type":"DATE"},{"byteSize":0,"index":1,"type":"DATE"},{"byteSize":1,"index":2,"rawData":0,"type":"LONG"},{"byteSize":0,"index":3,"type":"STRING"},{"byteSize":1,"index":4,"rawData":0,"type":"LONG"},{"byteSize":0,"index":5,"type":"STRING"},{"byteSize":0,"index":6,"type":"STRING"},{"byteSize":0,"index":7,"type":"STRING"},{"byteSize":0,"index":8,"type":"LONG"},{"byteSize":0,"index":9,"type":"STRING"},{"byteSize":0,"index":10,"type":"LONG"},{"byteSize":0,"index":11,"type":"LONG"},{"byteSize":0,"index":12,"type":"LONG"}

数据集成报错归类5.png

分析:该日志中已经明显的打印出具体某个字段脏数据,已经很好排查。第三个字段异常。
①脏数据是writer端报的,要检查下writer端的建表语句。odps支持的数据类型与mysql大不相同,虽然可以用varchar等类型,但是通过datax实际写入是不能识别,即mysql varchar类型不能写入 odps varchar类型,需要使用string类型
②数据同步原则:目的端数据类型范围 >>来源端数据类型值,即源端是long、varchar 、double等类型的数据,目的端均可用string、text等大范围类型接纳。
③脏数据报错不清晰时,需要复制出打印出的脏数据的一整条,观察其中的数据,和目的端数据类型比较,看哪一条或哪一些不合规范。

比如:
{"byteSize":28,"index":25,"rawData":"ohOM71vdGKqXOqtmtriUs5QqJsf4","type":"STRING"}
byteSize:字节数 index:25 第26个字段 rawData:具体值(即value) type:数据类型

3.mysql数据源配置中所填写的用户名没有command权限(关键词 command denied to user)

CommonRdbmsWriter$Task - 回滚此次写入, 采用每次写入一行方式提交. 因为:java.sql.BatchUpdateException: INSERT, UPDATE command denied to user 'odps'@'10.81.160.13' for table 't_termination_caseitem_merge'

数据集成报错归类6.png

分析:当mysql数据库user对该表的command操作权限不足时,会出现此情况。
比如该user仅拥有该库/表的select、write权限而没有update权限,且mysql的写入模式配置了 update模式,出现数据主键冲突需要对mysql主键进行更新的操作时的情况。
配置如下:

数据集成报错归类7.png

解决方案:在数据库端对该用户进行command授权。
例如:
GRANT insert,update ON databasename.tablename TO 'username'@'host' ;

4.保留字/关键字问题

mysql保留字参见:https://blog.csdn.net/anphper/article/details/79494131
mysql保留字不能作为字段名使用,在mysql端可以在建表时使用对保留字进行包裹从而成功使用这些保留字,但在数据集成向导模式配置任务时没有办法配置符号包裹相应的保留字。
报错:
解决方法:数据集成同步任务转脚本模式配置,对column配置中的保留字段添加进行包裹。
形如:

数据集成报错归类8.png

保留字报错2:
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: [13000, 2020120214075519216800405803453868413] syntax error :ERROR. token : camp_ql_profit is reserved keyword, you shoud use camp_ql_profit, pos : 695

数据集成报错归类9.png

分析:对比mysql保留字大全,会发现该报错字段并非保留字。所以这个报错位置不对。
原因:mysql的 column配置中含有数字开头的字段,导致报了保留字异常,但是报错字段的位置不够精确。一般是报错字段的下一个字段是数字开头。

数据集成报错归类10.png

解决办法:mysql writer中对这些数字开头的字段名添加``符号进行包裹。

5.实例冲突(数据集成服务器童同一时间接收到多个同一任务发起的实例)

报错:
Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'cfc68cd0048101467588e97e83ffd7a8-0' for key 'uk_uk_op'
The error may involve com.alibaba.alisa.driver.meta.mapper.TaskBufferMapper.insertTaskBuffer-Inline
The error occurred while setting parameters

数据集成报错归类11.png

分析:数据集成同步任务不允许同一时间运行相同节点的不同实例(即相同json配置的同步任务不能同一时间运行多个,例如5分钟为周期的同步任务,由于上游延迟,在0点5分时调起了原本0点0分的实例和0点5分的实例,这样会导致其中一个实例无法调起,或者任务实例在运行时又进行了补数据、重跑等操作)。
处理办法:错开实例运行时间

6.SSL认证失效

Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateExpiredException: NotAfter:

数据集成报错归类12.png

分析:rds mysql开启了ssl认证但是同步出错,无法获取认证信息。
处理办法:
在数据源配置信息中添加jdbcurl连接参数形式如下:
jdbc:mysql://xx.xx.xx.xx:3306/test?allowMultiQueries=true&useUnicode&characterEncoding=UTF-8&autoReconnect=true&useSSL=true&verifyServerCertificate=false&requireSSL=true
或者数据源实例模式中在库名后添加参数:
?allowMultiQueries=true&useUnicode&characterEncoding=UTF-8&autoReconnect=true&useSSL=true&verifyServerCertificate=false&requireSSL=true

7.配置冲突:

com.alibaba.datax.common.exception.DataXException: Code:[DBUtilErrorCode-08], Description:[Your configuration are in disorder. You cannot configure table and [querySql] at the same time. ]. - Your configuration are in disorder. DataX does not allow you to configure both table and [querySql] at the same time. Please check your configuration and make corrections.

数据集成报错归类13.png

分析:querysql的优先级高于table、column属性。配置了querysql就不需要再填写table和column属性了

ADS(adb-mysql2.0 3.0版本)

1.空指针(ERROR JobContainer - Exception when job run

java.lang.NullPointerException: null)

数据集成报错归类14.png

分析:reader未获取正确的链接地址或json配置,请检查reader端的配置、检查数据源的连通性连接是否正常。
注:adb-mysql2.0 Reader,分为select模式(只能抽取30w条数据)和odps模式(创建新的odps临时表暂时存储adb mysql数据,再将odps临时表数据写出到目的端),由于历史原因,odps模式偶尔会出异常,数据量《30W请使用select模式,或者使用mysql数据源代替adb mysql 2.0插件。

2.保留字问题:同rds保留字

LogHub

LogHub Reader

1.loghub系统级字段同步后目的端无数据/空值
表现:同步任务正常结束,日志中显示出具体数据条数,查询时目的表某字段值为空值
loghub reader中的column配置形式:

数据集成报错归类15.png

分析:LogHub系统级字段同步,需要配置为C_xxx形式。
例如:表示将loghub系统的topic、路径、日志落盘时间这些系统级数据进行落盘。配置为_LogTime_等可能不会生效。

"C_Category",
                 "C_Source",
                 "C_Topic",
                 "C_MachineUUID", //日志主题。
                 "C_HostName", //主机名。
                 "C_Path", //路径。
                 "C_LogTime" //日志时间。

LogHub Writer:待补充

Elastic

1.存在ssrf攻击

Return with failed: RequestId[11c0a760-f00d-4dc9-b47d-82cb9be764a1] Error: Run intance encounter problems, reason:Code:[DI_SERV_RENDER_009], Description:[Tasks have SSRF attacks]. - Instance 209408990 submit failed, errorMessage: Code:[DI_SERV_RENDER_009], Description:[Tasks have SSRF attacks]. - not support data sync channel, error code: 0001

数据集成报错归类16.png

分析:①查看es数据源的配置情况,不允许配置多个endpoint

      ②数据源无异常的情况下请提工单咨询,附带发送txt文本的数据同步日志

es reader:待完善

es writer:

已经支持es 7.x writer,需在writer 配置中添加esVersion参数及默认type
待完善

Hbase:

HBase Reader:

1.下标越界

INFO HbaseSQLReader$Task - Read record exception
java.lang.ArrayIndexOutOfBoundsException: -1522944374

数据集成报错归类17.png

分析:对应字段超过hbase列的下标
根因:通过phoenix写入hbase的数据,很难分辨出列族属性,该方式难以同步。
解决方式:目前DataWorks 数据集成datax 2.x版本已经可以兼容并同步phoenix插件。
请参照如下配置修改任务配置:

{
    "job": {
        "content": [
            {
                "reader": {
                    "name": "hbase20xsqlreader",  //指定插件为hbase20xsqlreader
                    "parameter": {
                        "queryServerAddress": "http://127.0.0.1:8765",  //填写连接Phoenix QueryServer地址
                        "serialization": "PROTOBUF",  //QueryServer序列化格式
                        "table": "TEST",    //读取表名
                        "column": ["ID", "NAME"],   //所要读取列名
                        "splitKey": "ID"    //切分列,必须是表主键
                    }
                },
                "writer": {
                    "name": "streamwriter",
                    "parameter": {
                        "encoding": "UTF-8",
                        "print": true
                    }
                }
            }
        ],
        "setting": {
            "speed": {
                "channel": "3"
            }
        }
    }
}

2.获取hbaseid丢失

org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher keeperException
严重: hconnection-0x5f2606b0x0, quorum=hb-wz9qnl4fc7eqoyv6a-002.hbase.rds.aliyuncs.com:2181, baseZNode=/hbase Received unexpected KeeperException, re-throwing exception
org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase/hbaseid

数据集成报错归类18.png

分析:①数据源配置config文件中缺失部分zookeeper信息导致datax通过zk连接hbase时异常
②zookeeper与hbase的心跳信息丢失,需联系hbase值班排查。请提hbase工单。
处理办法:
①请参照hbase数据源配置文档完善hbase数据源配置信息
https://help.aliyun.com/knowledge_detail/162993.html
②请提hbase或数据集成工单咨询

3.获取hbase server地址的ping延迟失败

com.alibaba.lindorm.client.core.ipc.locator.IDCPingSorter updatePingDelayForIDC
信息: Failed to get ping delay for server idc1 ld-uf6120ma4em8u0789-core-001.hbaseue.rds.aliyuncs.com:30020
java.io.IOException: idc1 ld-uf6120ma4em8u0789-core-001.hbaseue.rds.aliyuncs.com:30020 is not reachable

数据集成报错归类19.png

分析:获取ping延迟失败,日志中无其他error信息的情况下,可暂时忽略该提示。待任务执行完成后观察是否数据正常写入。

HDFS:

1.HDFS目录不合法

ErrorMessage:
Code:[HdfsWriter-02], Description:[您填写的参数值不合法.]. - 您配置的path: [/aliyunodps/content] 不是一个合法的目录, 请您注意文件重名, 不合法目录名等情况.

数据集成报错归类20.png

分析:查看配置的hdfs目录。
hdfs path路径的要求。根据那么node配置的不同,应配置为hdfs对应的namenode的元数据存储目录中。例如hdfs的元数据存储系统为namenode节点的/user/hive/warehouse/节点,则path路径应该根据此路径进行填写
如果hdfs文件系统使用的是其他文件存储系统承接(例如oss bucket,即将hdfs原本的元数据系统转移到bucket上了,则对应的oss bucket会创建相应的一个新的存储目录,应该根据oss bucket目录中元数据存储位置进行填写path)。

2.hdfs配置文件类型问题

ERROR HdfsReader$Job - 文件[hdfs://172.31.5.108:8020/user/hive/warehouse/gio.db/user_props_day/time=20201203/source=user_props/part-00000-5468a5b0-9359-4366-8d69-e2eba5504680-c000]的类型与用户配置的fileType类型不一致,请确认您配置的目录下面所有文件的类型均为[orc]

数据集成报错归类21.png

分析:查看hdfs reader的json配置,其中path路径为下图,请逐个排查各个文件的文本类型,是否全部为orc文本

数据集成报错归类22.png

HIVE:

Hive Reader:

1.不支持的方法

ErrorMessage:
Code:[DBUtilErrorCode-06], Description:[执行数据库 Sql 失败, 请检查您的配置的 column/table/where/querySql或者向 DBA 寻求帮助.]. - 执行的SQL为:select insert_date, shopid, itemid, title from item_all_dimt0 where pt = 20201201000000 limit 1000 具体错误信息为:Method not supported - java.sql.SQLException: Method not supported

    at org.apache.hive.jdbc.HiveStatement.setQueryTimeout(HiveStatement.java:739)

数据集成报错归类23.png

用户的配置文件:

数据集成报错归类24.png

分析:hive的jdbc读取模式在hive的不同版本客户端中兼容性不同,hive 1.2.1版本的客户端不支持jdbc模式读取数据。
解决方法:请将hive数据源版本改为更高版本,并将json配置文件中的读取模式修改为 hdfs模式;

Hive Writer:

1.不支持的数据类型

ERROR WriterRunner - Writer Runner Received Exceptions:
java.lang.IllegalArgumentException: No enum constant com.alibaba.datax.plugin.writer.hdfswriter.SupportHiveDataType.DECIMAL(15,2)

数据集成报错归类25.png

报错分析:数据集成datax目前不支持hive writer中科学计数法且指定具体精度的decimal(xx,xx)类型的数据。
处理办法:请变更hive表字段类型,可以常会使用double类型替代。之后通过hive本身的sql进行数据强转换。

Polardb:

polardb writer:

Code:[DBUtilErrorCode-07], Description:[读取数据库数据失败. 请检查您的配置的 column/table/where/querySql或者向 DBA 寻求帮助.]. - 执行的SQL为:TRUNCATE TABLE subject_label 具体错误信息为:Fail to get MDL on replica during DDL synchronize - java.sql.SQLException: Fail to get MDL on replica during DDL synchronize

数据集成报错归类26.png

分析:图示报错意思为,在云数据库PolarDB实例中执行DDL操作时提示获取不到MDL锁。
产生原因:当主实例或只读实例中存在“未结束的查询”或者“未提交的事务”时会出现此情况。
即同步任务执行presql时有其他进程在操作这个表。导致冲突
解决方法:
请排查同一时间有哪些进程在操作此表,观察其周期性、执行时长后调整数据集成任务的调度时间以避免冲突。

DataHub

datahub writer

1.一次性写入datahub的数据超限导致写入失败

ERROR JobContainer - Exception when job run
com.alibaba.datax.common.exception.DataXException: Code:[DatahubWriter-04], Description:[写数据失败.]. - com.aliyun.datahub.exception.DatahubServiceException: Record count 12498 exceed max limit 10000 (Status Code: 413; Error Code: TooLargePayload; Request ID: 20201201004200a945df0bf8e11a42)

数据集成报错归类27.png

分析:报错原因为datax一次性提交到datahub的数据量超过datahub的限制。
主要影响配置参数:
“maxCommitSize”:表示datax累积的buffer数据,待积累的数据大小达到maxCommitSize 大小(单位MB)时,批量提交到目的端。默认是1,048,576,即1MB数据。
“batchSize”:DataX-On-Flume积累的Buffer数据条数,待积累的数据条数达到batchSize大小(单位条数)时,批量提交至目的端。

数据集成报错归类28.png

解决方案:调小这两个参数的设置值。

TSDB:待补充

TSDB

OSS:待补充

OSS Reader

OSS Writer:

1.写入oss时oss未返回

报错:
ErrorMessage:
Code:[HdfsWriter-04], Description:[您配置的文件在写入时出现IO异常.]. - com.aliyun.oss.ClientException: The target server failed to respond

数据集成报错归类29.png

分析:oss端未返回信息。可能为oss端网络闪断导致,请重试任务。

MongoDB:

MongoDB Reader:

1.脏数据:

2020-12-04 13:28:51.363 [210920344-0-0-writer] ERROR StdoutPluginCollector -
com.alibaba.fastjson.JSONException: syntax error, pos 2

    at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1295) ~[fastjson-1.1.46.sec06.jar:na]
    at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1205) ~[fastjson-1.1.46.sec06.jar:na]
    at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:1092) ~[fastjson-1.1.46.sec06.jar:na]
    at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:1001) ~[fastjson-1.1.46.sec06.jar:na]
    at com.alibaba.fastjson.JSON.parseArray(JSON.java:327) ~[fastjson-1.1.46.sec06.jar:na]
    at com.alibaba.datax.plugin.writer.odpswriter.OdpsWriterProxy.dataxRecordToOdpsRecord(OdpsWriterProxy.java:310) [odpswriter-0.0.1-SNAPSHOT.jar:na]
    at com.alibaba.datax.plugin.writer.odpswriter.OdpsWriterProxy.writeOneRecord(OdpsWriterProxy.java:136) [odpswriter-0.0.1-SNAPSHOT.jar:na]
    at com.alibaba.datax.plugin.writer.odpswriter.OdpsWriter$Task.startWrite(OdpsWriter.java:395) [odpswriter-0.0.1-SNAPSHOT.jar:na]
    at com.alibaba.datax.core.taskgroup.runner.WriterRunner.run(WriterRunner.java:105) [datax-core-0.0.1-SNAPSHOT.jar:na]
    at java.lang.Thread.run(Thread.java:834) [na:1.8.0_112]

2020-12-04 13:28:51.368 [210920344-0-0-writer] ERROR StdoutPluginCollector - 脏数据:
{"exception":"syntax error, pos 2","message":"写入 ODPS 目的表时遇到了脏数据: 第[2]个字段的数据出现错误,请检查该数据并作出修改 或者您可以增大阀值,忽略这条记录.","record":[{"byteSize":32,"index":0,"rawData":"d2f09d14cb6240b7bfb0d59f322090df","type":"STRING"},{"byteSize":0,"index":1,"type":"STRING"},{"byteSize":10,"index":2,"rawData":"[daai, sg]","type":"STRING"},{"byteSize":16,"index":3,"rawData":"5925E6416B80B85F","type":"STRING"},{"byteSize":0,"index":4,"rawData":"","type":"STRING"},{"byteSize":0,"index":5,"rawData":"","type":"STRING"},{"byteSize":8,"index":6,"rawData":1596775777000,"type":"DATE"},{"byteSize":0,"index":7,"rawData":"","type":"STRING"}],"type":"writer"}

数据集成报错归类30.png

分析:第二个字段,bytesize为0,表示datax从mongo中读出的第二个数据字段是空值,写入odps的列时不符合odps的列规范/要求。
这是需要查看odps 建表语句,看起第二列列属性,是否设置了非空属性。

FTP:

ftp reader:

1.与ftp服务器连接异常,获取文件属性时发生I/0异常

ErrorMessage:
Code:[FtpReader-14], Description:[与ftp服务器连接异常.]. - 获取文件:[/home/ftpuser/test/jessica测试/测试指标.csv] 属性时发生I/O异常,请确认与ftp服务器的连接正常 - java.net.SocketTimeoutException: connect timed out

    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)

数据集成报错归类31.png

分析:在ftp数据源连通性正常且选定的数据集成资源组正确的情况下(测试连通性使用的公共数据集成资源组,运行任务也需要用公共数据集成资源组。测试用的独享或自定义,运行任务也应该用独享或自定义资源组),网络通信问题可以排除。则I/0异常极有可能是ftp端限制问题,例如“限制外网访问”、“限制文件读取”权限等。
处理方案:请用户侧运维同学检查ftp访问限制,是否vpn开关、网关限制、文件读写权限限制没打开等。

Ftp Writer:

待补充

DataWorks百问百答历史记录 请点击这里查看>>

更多DataWorks技术和产品信息,欢迎加入【DataWorks钉钉交流群】

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
DataWorks
使用钉钉扫一扫加入圈子
+ 订阅

DataWorks作为飞天大数据平台操作系统,对接各种大数据计算引擎,以all in one box的方式提供专业高效、安全可靠的全域智能大数据平台,高效率完成数据全链路研发流程,建设企业数据治理体系。 从2009年飞天大数据平台写下第一行代码开始,DataWorks历经10年发展,形成一套成熟的产品功能体系,满足企业数据中台搭建需求。

官方博客
DataWorks产品官网