Spark用HiveUDF get_json_object内存泄漏问题

博客讲述了在Spark中使用HiveUDF get_json_object时遇到的内存泄漏问题。通过分析Spark的源码和HiveUDF的实现,发现在多线程环境下,由于LinkedHashMap的非线程安全操作导致内存泄漏。解决方案是移除UDF中的HashCache,以避免内存问题。
摘要由CSDN通过智能技术生成

1、问题背景

首先我们支持Spark使用HiveUDF的实现,在某个任务中,executor GC时间普遍非常长,而Hive同样逻辑就没有问题。
选取GC过长的一个executor,dump下内存,发现UDFJson对象非常大:
在这里插入图片描述
于是推测其中存在内存泄漏。

2、问题排查

本文代码为社区Spark master分支a834dba120
在解析SQL时我们可以看到注册UDF函数入口
Analyzer.scala:
在这里插入图片描述
发现函数注册提供qualifiedName以及不覆盖已注册的函数
SessionCatalog.scala:
在这里插入图片描述
跟进发现做了一些函数存在性和可加载校验:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值