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回答

Michael_PK

2018-10-31

1)“但是!!!问题来了,hbase连接池不主动关闭的话,spark程序结束之后,服务器可能不会马上知道,可能会引发问题”! 你说的是可能会引发问题,那么能确定引发什么问题不?如果有遇到问题,可以把异常信息贴出来。

2)spark里面的clean up在哪里写比较好呢, 你只要spark应用程序中使用钩子函数捕获到SparkContext的关闭事件就可以了

0
1
aaaaabbbc
1)问题不严重,只是log中会记录一条错误信息 2)钩子只能在driver程序端捕获关闭事件,但是到不了打开hbase连接的进程内部,所以无法在进程内关闭连接池 3) 感谢老师的点拨,要不我换一种方式描述我面临的问题好了
2018-10-31
共1条回复

以慕课网日志分析为例 进入大数据Spark SQL的世界

快速转型大数据:Hadoop,Hive,SparkSQL步步为赢

1644 学习 · 1129 问题

查看课程