spark mapPartitions里面打开与关闭数据库连接的问题
来源:11-2 -外部数据源接口
aaaaabbbc
2018-10-31
我想做的是获取log数据,然后解析每一条log之后进行相关统计。在解析过程中我需要打开hbase,读取其中的数据(比如装有特定ip地址的表,但是这个表不唯一,很难将全部表放入广播变量中传入各个节点)。
所以解析的过程我用mapPartitions(log -> 解析后数据),以此来减少从hbase连接池获取的连接的次数,因为hbase 连接池采用了单例模式,所以初始化很多次都没有问题。但是!!!问题来了,hbase连接池不主动关闭的话,spark程序结束之后,服务器可能不会马上知道,可能会引发问题。所以我就想知道手动关闭hbase连接池的相关代码应该写在哪里。
ps:mapPartitions里面进行解析的时候,很容易OOM,我猜想是因为我把解析后的数据放入一个list,这个list对象是一直在内存中处理的,不会写入磁盘,所以我们想要舍弃mapPartitions方法,只用map方法。虽然我们允许hbase连接池初始化很多次(因为单例模式),但是如果在map里面关闭连接池,那就真的关掉了。很难办。
综合起来就是,对比MR的clean up部分代码,spark里面的clean up在哪里写比较好呢?
对于这个问题,请问大佬们什么见解?
1回答
-
1)“但是!!!问题来了,hbase连接池不主动关闭的话,spark程序结束之后,服务器可能不会马上知道,可能会引发问题”! 你说的是可能会引发问题,那么能确定引发什么问题不?如果有遇到问题,可以把异常信息贴出来。
2)spark里面的clean up在哪里写比较好呢, 你只要spark应用程序中使用钩子函数捕获到SparkContext的关闭事件就可以了
012018-10-31
相似问题