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.

分析:odps session隻能維持24h,超過該實作則任務自動失敗退出。請根據同步資料量合理調整任務并發數或者合理規劃要同步的資料量。
解決辦法:合理提升并發數和規劃同步資料量
ODPS Writer
1.ODPS寫block失敗
Code:[OdpsWriter-09], Description:[寫入資料到 ODPS 目的表失敗.]. - ODPS 目的表寫 block:0 失敗, uploadId=[202012081517026537dc0b0160354b]. 請聯系 ODPS 管理者處理. - java.io.IOException: Error writing request body to server。
分析:同步的資料寫入odps block時失敗,odps端異常
可能原因1:資料類型異常(來源資料不符合odps資料類型規範,比如4.2223這個資料值寫入odps的decimal(18,10)資料類型。請轉換使用double類型或者string類型)
可能原因2:odps壞塊/通信異常等
處理辦法:可提odps工單或dataworks工單咨詢排查。
RDS Mysql子產品:
1.datax切分的讀數資料的select sql執行逾時/未傳回資料值
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.
分析:datax将rds mysql根據splitpk對mysql的資料進行拆分成數條等量的取數sql(select取數語句),執行時某條sql執行時間超過rds側允許的最大運作時間(一般為60秒/15min等),導緻報錯。
處理辦法:
①将此條sql複制到rds mysql側實際運作,觀察執行時間是否大于設定門檻值min
②聯系rds mysql值班調整rds側"net_write_timeout" 逾時時間
③資料同步任務配置出錯自動重跑以避免偶現問題導緻任務下遊及去下遊阻塞。
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"}
分析:該日志中已經明顯的列印出具體某個字段髒資料,已經很好排查。第三個字段異常。
①髒資料是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'
分析:當mysql資料庫user對該表的command操作權限不足時,會出現此情況。
比如該user僅擁有該庫/表的select、write權限而沒有update權限,且mysql的寫入模式配置了 update模式,出現資料主鍵沖突需要對mysql主鍵進行更新的操作時的情況。
配置如下:
解決方案:在資料庫端對該使用者進行command授權。
例如:
GRANT insert,update ON databasename.tablename TO 'username'@'host' ;
4.保留字/關鍵字問題
mysql保留字參見:
https://blog.csdn.net/anphper/article/details/79494131mysql保留字不能作為字段名使用,在mysql端可以在建表時使用
對保留字進行包裹進而成功使用這些保留字,但在資料內建向導模式配置任務時沒有辦法配置
符号包裹相應的保留字。
報錯:
解決方法:資料內建同步任務轉腳本模式配置,對column配置中的保留字段添加進行包裹。
形如:
保留字報錯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
分析:對比mysql保留字大全,會發現該報錯字段并非保留字。是以這個報錯位置不對。
原因:mysql的 column配置中含有數字開頭的字段,導緻報了保留字異常,但是報錯字段的位置不夠精确。一般是報錯字段的下一個字段是數字開頭。
解決辦法: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
分析:資料內建同步任務不允許同一時間運作相同節點的不同執行個體(即相同json配置的同步任務不能同一時間運作多個,例如5分鐘為周期的同步任務,由于上遊延遲,在0點5分時調起了原本0點0分的執行個體和0點5分的執行個體,這樣會導緻其中一個執行個體無法調起,或者任務執行個體在運作時又進行了補資料、重跑等操作)。
處理辦法:錯開執行個體運作時間
6.SSL認證失效
Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateExpiredException: NotAfter:
分析: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.
分析:querysql的優先級高于table、column屬性。配置了querysql就不需要再填寫table和column屬性了
ADS(adb-mysql2.0 3.0版本)
1.空指針(ERROR JobContainer - Exception when job run
java.lang.NullPointerException: null)
分析: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配置形式:
分析: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
分析:①檢視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
分析:對應字段超過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
分析:①資料源配置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
分析:擷取ping延遲失敗,日志中無其他error資訊的情況下,可暫時忽略該提示。待任務執行完成後觀察是否資料正常寫入。
HDFS:
1.HDFS目錄不合法
Code:[HdfsWriter-02], Description:[您填寫的參數值不合法.]. - 您配置的path: [/aliyunodps/content] 不是一個合法的目錄, 請您注意檔案重名, 不合法目錄名等情況.
分析:檢視配置的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]
分析:檢視hdfs reader的json配置,其中path路徑為下圖,請逐個排查各個檔案的文本類型,是否全部為orc文本
HIVE:
Hive Reader:
1.不支援的方法
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)
使用者的配置檔案:
分析: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)
報錯分析:資料內建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
分析:圖示報錯意思為,在雲資料庫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)
分析:報錯原因為datax一次性送出到datahub的資料量超過datahub的限制。
主要影響配置參數:
“maxCommitSize”:表示datax累積的buffer資料,待積累的資料大小達到maxCommitSize 大小(機關MB)時,批量送出到目的端。預設是1,048,576,即1MB資料。
“batchSize”:DataX-On-Flume積累的Buffer資料條數,待積累的資料條數達到batchSize大小(機關條數)時,批量送出至目的端。
解決方案:調小這兩個參數的設定值。
TSDB:待補充
TSDB
OSS:待補充
OSS Reader
OSS Writer:
1.寫入oss時oss未傳回
Code:[HdfsWriter-04], Description:[您配置的檔案在寫入時出現IO異常.]. - com.aliyun.oss.ClientException: The target server failed to respond
分析: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"}
分析:第二個字段,bytesize為0,表示datax從mongo中讀出的第二個資料字段是空值,寫入odps的列時不符合odps的列規範/要求。
這是需要檢視odps 建表語句,看起第二列列屬性,是否設定了非空屬性。
FTP:
ftp reader:
1.與ftp伺服器連接配接異常,擷取檔案屬性時發生I/0異常
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)
分析:在ftp資料源連通性正常且標明的資料內建資源組正确的情況下(測試連通性使用的公共資料內建資源組,運作任務也需要用公共資料內建資源組。測試用的獨享或自定義,運作任務也應該用獨享或自定義資源組),網絡通信問題可以排除。則I/0異常極有可能是ftp端限制問題,例如“限制外網通路”、“限制檔案讀取”權限等。
處理方案:請使用者側運維同學檢查ftp通路限制,是否vpn開關、網關限制、檔案讀寫權限限制沒打開等。
Ftp Writer:
待補充
DataWorks百問百答曆史記錄
請點選這裡檢視>>更多DataWorks技術和産品資訊,歡迎加入
【DataWorks釘釘交流群】