文章目录

错误一项目场景:问题描述错误原因:解决方案:

错误二fe 日志原因解决

错误三日志:解决

错误四日志解决

错误一

项目场景:

MySQL迁移数据到Doris。MySQL数据在5亿多条,批量导入Doris,一万一个batch。导致Doris出现问题

问题描述

doris日志

W1027 17:38:00.901333 4904 stream_load_executor.cpp:80] fragment execute failed, query_id=0f46824a8fa39a96-2b7c40d20e2fdf82, err_msg=tablet writer write failed, tablet_id=27417, txn_id=32813, err=-235, host: 192.168.1.xx, id=0f46824a8fa39a96-2b7c40d20e2fdf82, job_id=-1, txn_id=32813, label=spark_streamload_20221027_173808_4dabc5d9133147f2a92bbb7e9b00b146, elapse(s)=0

W1027 17:38:00.901369 5191 stream_load.cpp:144] handle streaming load failed, id=0f46824a8fa39a96-2b7c40d20e2fdf82, errmsg=tablet writer write failed, tablet_id=27417, txn_id=32813, err=-235, host: 192.168.1.xx

W1027 17:38:00.920799 5145 delta_writer.cpp:110] failed to init delta writer. version count: 503, exceed limit: 500. tablet: 27417.508232187.46488e8eca2abee0-322a1614ebf23dad

W1027 17:38:00.920818 5145 tablets_channel.cpp:134] tablet writer write failed, tablet_id=27417, txn_id=32814, err=-235

spark日志

java.io.IOException: Failed to load data on BE: http://192.168.1.xx:8140/api/doris_testdb/sha1_attribute_partition/_stream_load? node and exceeded the max retry times.

at org.apache.doris.spark.sql.DorisSourceProvider.$anonfun$createRelation$4(DorisSourceProvider.scala:118)

at scala.util.control.Breaks.breakable(Breaks.scala:42)

at org.apache.doris.spark.sql.DorisSourceProvider.flush$1(DorisSourceProvider.scala:92)

at org.apache.doris.spark.sql.DorisSourceProvider.$anonfun$createRelation$2(DorisSourceProvider.scala:78)

at org.apache.doris.spark.sql.DorisSourceProvider.$anonfun$createRelation$2$adapted(DorisSourceProvider.scala:70)

错误原因:

重要信息:version count: 503, exceed limit: 500

这个错误通常发生在数据导入操作中。新版错误码为 -235,老版本错误码可能是 -215。这个错误的含义是,对应tablet的数据版本超过了最大限制(默认500,由 BE 参数 max_tablet_version_num 控制),后续写入将被拒绝。比如问题中这个错误,即表示 27417 这个tablet的数据版本超过了限制。这个错误通常是因为导入的频率过高,大于后台数据的compaction速度,导致版本堆积并最终超过了限制。此时,我们可以先通过show tablet 27417 语句,然后执行结果中的 show proc 语句,查看tablet各个副本的情况。结果中的 versionCount即表示版本数量。如果发现某个副本的版本数量过多,则需要降低导入频率或停止导入,并观察版本数是否有下降。如果停止导入后,版本数依然没有下降,则需要去对应的BE节点查看be.INFO日志,搜索tablet id以及 compaction关键词,检查compaction是否正常运行。关于compaction调优相关,可以参阅 ApacheDoris 公众号文章:Doris 最佳实践-Compaction调优(3)

解决方案:

调大数据版本

max_tablet_version_num 类型:int 描述:限制单个 tablet 最大 version 的数量。用于防止导入过于频繁,或 compaction 不及时导致的大量 version 堆积问题。当超过限制后,导入任务将被拒绝。 默认值:500

缩减插入频率

如果你用的也是spark 的话可以调整以下参数: sink.batch.size 单次写BE的最大行数 我把它提高到10万就不报错了

错误二

fe 日志

[DatabaseTransactionMgr.abortTransaction():1231] abort transaction: TransactionState. transaction id: 48014, label:

spark_streamload_20230214_151611_4fae143214d44f25a1a5a677f1ed7509, db id: 24621, table id list: 43058, callback id: -1, coordinator: BE: 192.168.1.xx,

transaction status: ABORTED, error replicas num: 0, replica ids: , prepare time: 1676359146398, commit time: -1, finish time: 1676359146465,

reason: too many filtered rows successfully

重点 :reason: too many filtered rows successfully

原因

非法数据太多,当写入数据中存在有28%的非法数据时,默认会失败报错 “too many filtered rows”

官网链接:too many filtered rows

解决

原来是有个字段太长了,但是doris表中建表语句是varchar(128).其实实际数据比128长,导致非法数据太多。改成256后 就能正常写入了。

错误三

日志:

当出现open tablets … timeout的如下错误

counter:33145

I0803 17:07:14.671137 24794 tablets_channel.cpp:60] open tablets channel: (id=5c4a512f9016841d-2acd0e501ce0b799,index_id=11050), tablets num: 13, timeout(s): 600

解决

ADMIN SET FRONTEND CONFIG ("stream_load_default_timeout_second" = "2400");

stream_load_default_timeout_second : 导入任务的超时时间(以秒为单位),导入任务在设定的 timeout 时间内未完成则会被系统取消,变成 CANCELLED。 默认的 timeout 时间为 600 秒。如果导入的源文件无法在规定时间内完成导入,用户可以在 stream load 请求中设置单独的超时时间。

错误四

日志

"Status": "Fail",

"Message": "errCode = 2,

detailMessage = get tableList write lock timeout,

解决

curl -X POST http://{be_ip}:{be_http_port}/api/update_config?thrift_rpc_timeout_ms=20000&persist=true

thrift_rpc_timeout_ms

描述:thrift默认超时时间

默认值:10000

精彩链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: