1、问题背景 首先我们支持Spark使用HiveUDF的实现,在某个任务中,executor GC时间普遍非常长,而Hive同样逻辑就没有问题。 选取GC过长的一个executor,dump下内存,发现UDFJson对象非常大: 于是推测其中存在内存泄漏。 2、问题排查 本文代码为社区Spark master分支a834dba120 在解析SQL时我们可以看到注册UDF函数入口 Analyzer.scala: 发现函数注册提供qualifiedName以及不覆盖已注册的函数 SessionCatalog.scala: 跟进发现做了一些函数存在性和可加载校验: