背景
对于Spark来说,目前存储所有的事件信息以及UI所需要的信息都是默认存储在内存中,这在CS中,对于以Spark作为 Server的模式下,会导致OOM,也会导致造成之前作者提交PR:Multi sparkSession should share single SQLAppStatusStore的问题。
分析
正如Better Spark UI scalability and Driver stability for large applications所说:目前的Spark UI和SHS存在如下问题:
- spark 存储的 UI信息都是在内存中(数据结构为InMemoryStore) ,这会占用大量的内存,会导致Drvier OOM,影响spark的稳定性
- spark的UI存储的SQL条数有限,导致完后的任务,如果想回去看看现场,是无迹可寻的
- Spark History Server必须从json格式的event中解析出所有的spark事件,尤其未被压缩的的时间日志会很大,导致SHS的启动需要等待很长一段时间
引入以RocksDB作为存储以后,能够减少driver所需内存,并且引进新的protobuf serializer能够大大加快spark事件的读写事件