tispark 读取时sql语句加上 limit 会 oom

【 TiDB 使用环境】生产环境 , spark on k8s
【 TiDB 版本】v5.1.1 tispark 2.5 spark 3.0.1
【遇到的问题】查询tidb OOM
【问题现象及影响】

这是代码

这是提交

这是pod状态

日志

但是看监控并没有tikv挂掉

3 个赞

你截图的那个pod状态,是指的spark的executor的pod状态吧?

3 个赞

是的。

3 个赞

你这个错,不应该去tidb上找错误,应该是k8s的宿主节点内存不足,或者pod有mem的使用限制导致的oom,如果是测试,limit 10的情况下,改小EXECUTOR_MEMORY,改成2G试试。或者你导出失败节点的yaml给我,我分析一下。

4 个赞

绝不会是宿主机内存,我们其他任务都正常跑的。另外exec的内存我刚开始给的2g不行,加到6g还是不行,都是oom

3 个赞

我把 limit 10 去掉就可以了,加上limit 就不行,这是bug啊。

3 个赞

k8s里面有没有搭建spark的history或者你把代码里面的stop去掉,看看spark ui还活着么,发一下日志或者spark中的spark sql解析计划。

3 个赞

现在也没有退出,exec不断被kill又不断重启

3 个赞

执行计划.txt (9.3 KB)

这个是加limit 10和不加limit 10的全部执行计划

3 个赞

client -> connector -> server

client 被 kill 了,server 有没有不正常? 不能提供服务?

3 个赞

没有,问题就在于我加上limit就不行,不加就可以

3 个赞

不加 limit 有多少数据会被回传到 client ? client 能不能撑得住这个量?

3 个赞

问题是我不加limit是正常,加了会oom

3 个赞

有别的环境可以跑么? 不用 pod… 验证一下到底啥问题

2 个赞

不加limit时候,pod内存用了多少?

2 个赞

on yarn 加上limit 报错

on yarn 不加limit正常

2 个赞

image

不加limit用了这么多内存

2 个赞

现在的情况是在k8s或者在yarn加limit都会因为超出内存限制被kill?


你的shuffer在执行过程中都什么情况?溢写磁盘了么?

1 个赞

对呀,你看我的截图,在k8s和yarn执行executor都会被oomkilled
就这一句还会发生shuffle??

你这是直接走的tidb层走jdbc查询也会报这个错:joy: