Hi all:

在使用zeppelin提交sql的过程中总是发现超时现象,通过定位发现有如下问题:
1、blob client 和blob server 通信时采用单客户端通行,当有比较多的文件时,比如100个,这个耗时挺大的
2、blob server 虽然有blob.fetch.num-concurrent 进行并发控制,但是blob
server在moveTempFileToStore方法中采用了写锁的方式,当时并发失效。

通过本地测试,简单的调整了代码,示例如下:
BlobServer:
[image: image.png]

ClientUtils
[image: image.png]
调整后通过zeppelin 提交job后,时间由之前的几分钟到现在几十秒,并且不会随着依赖的jar的增加而线性增长。

现有如下疑问:
1、blob server 中的锁的粒度是不是过大?当并行提交多个sql,实际上也只能一个一个的执行。
2、blob server 中moveTempFileToStore 的写锁是否真的必要呢?

Best wishes.

回复