dbcp2 全局 连接池

来源:5-14 自定义Sink之功能测试

LucienLi

2019-09-12

老师,

你好,我最近开发遇到了一个问题,我在flink里面设置了一个DB连接池,用dbcp2实现的,是一个scala object 叫做DBPool, 然后在一个sink里面每次invoke调用getConnection 写数据,开发很顺利,用intellij在local运行也完全没有问题,但是用第一种方式部署到yarn上面之后,getConnection每次都是空指针异常,不知道是什么原因,代码我贴上来
图片描述

写回答

3回答

LucienLi

提问者

2019-09-12

我发现是scala的单例写的有问题,换成java的单例连接就没问题了,不知道scala单例哪里写错了?

0
1
Michael_PK
scala的object相当于就是static的,单例的话你可以查下具体如何实现
2019-09-12
共1条回复

LucienLi

提问者

2019-09-12

我修改了一下代码,在入口文件调用DBPool初始化,可以看到第一行就打印出来了,之后在sink里面DBPool的getDataSource,返回空指针异常,我想问下会不会是在yarn上面内存中没法存储全局使用的单例对象,或者是并行度什么的造成的影响?

//img.mukewang.com/szimg/5d79d797096f5f4406441372.jpg

0
0

Michael_PK

2019-09-12

几个可能存在问题的点:1)connection用完应该不是close而是返回到PO OL中;2)跑yarn的时候是否加载到了MySQL驱动?

0
2
LucienLi
会不会scala的object不能很好地作为单例来使用?
2019-09-12
共2条回复

新一代大数据计算引擎 Flink从入门到实战

入行或转型大数据新姿势,多语言系统化讲解,极速入门Flink

969 学习 · 296 问题

查看课程