最近在写入redis的时候,程序跑着跑着会发现碰到这样的问题。
由于spark采用的是jedis来连接的,因此也就说明是jedis的问题。
针对这一问题,之前直接都是利用
val client = new Jedis(ip, port)的方法,嵌套在dataframe.foreach()中的方式。
由于之前部署是流式的数据处理,所以每次处理间隔都非常短,因此没有任何问题。但是这回为了查看一个数据想缓存到spark的时候,发现了这个BUG。也才具体发现以前程序设置的不合理的地方。
还好,Jedis提供了这种解决方法。
采用这种池化的概念,可以来设置里面的timeout参数,默认是2000。
根据大概程序写入redis的数据量和时长来设置即可。
由于本来写入的数据量大概有7亿多条记录,为了方便,拆分了400个小片断分开写入,再用上述默认设置,也能够通过。
代码片断可以如下:
当前,也只可以对JedisPoolConfig进行设置。