在流式计算过程中,难免会连接第三方存储平台(redis,mysql...)。在操作过程中,大部分情况是在foreachPartition/mapPartition算子中做连接操作。每一个分区只需要连接一次第三方存储平台就可以了。假如,当前streaming有100分区,当前流式计算宫分配了20个cpu,有4个cpu负责接收数据。那么,在一个批次中一共需要对第三方平台创建100次连接,同时最大并行连接第三方平台个数20-4=16个。假如30s一个批次,一天就需要频繁释放连接24*60*60/2=43200次,假如每次创建连接和释放连接总共需要100ms,那么一天中有43200/10/60/60=4.8h的cpu时间在做创建连接和释放连接操作。这个消耗还是比较大的。

那个,该如何优化这个问题?

大家可以这样想一下:既然每一个executor就是一个JVM进程。那么,流式计算每一个批次结束,会销毁执行任务的executor吗?答案显然不会! 既然executor不会被销毁,在executor(JVM)中保持一个连接池达到连接池共享就有了可能。其次,一个executor可能会分配多于一个cpu core的情况,在执行前期,每一个executor(JVM)会同时执行多于一个的task。每一个task都需要一个连接。那么在executor中保持一个连接池,不仅可以达到跨batch的连接池共享,而且还可以达到同一个批次,被分到同一个executor(JVM)的任务的连接池共享。这样的优化可以大大减少,因为频繁连接第三方存储平台的压力,其次还可以节省频繁创建连接所消耗的时间。缺点就是,连接不释放,第三方平台需要更高的内存,才能提供更高的连接要求。

问题已经清楚,解决方案也出来了。该怎么编程,才能实现executor持有全局连接池?

别告诉我说你会在driver端创建好连接,然后通过广播将连接广播到executor中。因为大部分连接类在实现过程没有考虑序列化的问题(实现Externalizable或Serializable接口),所以无法将连接池广播。即使能够广播,这个方式在获取连接时也会遇到千奇百怪的错误。

spark streaming 流式计算---跨batch连接池共享(JVM共享连接池)的更多相关文章

  1. spark streaming流式计算---监听器

    随着对spark的了解,有时会觉得spark就像一个宝盒一样时不时会出现一些难以置信的新功能.每一个新功能被挖掘,就可以使开发过程变得更加便利一点.甚至使很多不可能完成或者完成起来比较复杂的操作,变成 ...

  2. Spark Streaming流式处理

    Spark Streaming介绍 Spark Streaming概述 Spark Streaming makes it easy to build scalable fault-tolerant s ...

  3. Spark之 Spark Streaming流式处理

    SparkStreaming Spark Streaming类似于Apache Storm,用于流式数据的处理.Spark Streaming有高吞吐量和容错能力强等特点.Spark Streamin ...

  4. 从Storm和Spark 学习流式实时分布式计算的设计

    0. 背景 最近我在做流式实时分布式计算系统的架构设计,而正好又要参加CSDN博文大赛的决赛.本来想就写Spark源码分析的文章吧.但是又想毕竟是决赛,要拿出一些自己的干货出来,仅仅是源码分析貌似分量 ...

  5. 流式计算(一)-Java8Stream

    大约各位看官君多少也听说了Storm/Spark/Flink,这些都是大数据流式处理框架.如果一条手机组装流水线上不同的人做不同的事,有的装电池,有的装屏幕,直到最后完成,这就是典型的流式处理.如果手 ...

  6. Dream_Spark-----Spark 定制版:005~贯通Spark Streaming流计算框架的运行源码

    Spark 定制版:005~贯通Spark Streaming流计算框架的运行源码   本讲内容: a. 在线动态计算分类最热门商品案例回顾与演示 b. 基于案例贯通Spark Streaming的运 ...

  7. Storm:分布式流式计算框架

    Storm是一个分布式的.高容错的实时计算系统.Storm适用的场景: Storm可以用来用来处理源源不断的消息,并将处理之后的结果保存到持久化介质中. 由于Storm的处理组件都是分布式的,而且处理 ...

  8. Others-阿里专家强琦:流式计算的系统设计和实现

    阿里专家强琦:流式计算的系统设计和实现 更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud 阿里云数据事业部强琦为大家带来题为“流式计算的系统设计与实现”的演讲,本 ...

  9. demo2 Kafka+Spark Streaming+Redis实时计算整合实践 foreachRDD输出到redis

    基于Spark通用计算平台,可以很好地扩展各种计算类型的应用,尤其是Spark提供了内建的计算库支持,像Spark Streaming.Spark SQL.MLlib.GraphX,这些内建库都提供了 ...

随机推荐

  1. manjaro中微信不能输入中文及微信窗口出现透明轮廓的问题

    一.在安装deepin-wine-wechat后,无法切换成中文输入法.网上查找资料,在配置中添加 export 等 均未成功. 后来在官方(https://aur.archlinux.org/pac ...

  2. 原生ajax解析&封装原生ajax函数

    前沿:对于此篇随笔,完是简要写了几个重要的地方,具体实现细节完在提供的源码做了笔记 <一>ajax基本要点介绍--更好的介绍ajax 1. ajax对象中new XMLHttpReques ...

  3. 类型擦除对Java调用Kotlin的影响

    @JvmName: 扩展方法相关: 先来定义一个扩展方法: 好,接下来再来定义一个扩展函数: 此时报错了..看一下错误提示: 其中给的提示有点奇怪,第一个是很明显咱们的扩展函数木有接收参数嘛,为啥提示 ...

  4. Spring Cloud Eureka注册中心(快速搭建)

    Spring Cloud 详解Eureka注册中心@(微服务)[java|spring-cloud|eureka] Eureka 注册中心是入门Spring Cloud微服务架构的必学组件,是学习所有 ...

  5. fastjson异常(字符串集合转成字符串数组)

    我是在项目中,因为受到一个string类型的list集合,然后需要把这个字符串发送给前端,进行解析. 但是前端收到的是一个字符串,不能进行解析. 所以采用 ArrayUtils.clone(JSONO ...

  6. 项目Alpha冲刺——集合

    作业描述 课程: 软件工程1916|W(福州大学) 作业要求: 项目Alpha冲刺(团队) 团队名称: 火鸡堂 作业目标: 完成项目Alpha冲刺 团队信息 队名:火鸡堂 队员学号 队员姓名 博客地址 ...

  7. spark-scala开发的第一个程序WordCount

    package ***** import org.apache.spark.{SparkConf, SparkContext} object WordCount { def main(args: Ar ...

  8. 2019-2020-1 20199302《Linux内核原理与分析》第七周作业

    第六章 进程的描述和进程的创建 (一)进程的描述 1.OS的三大管理功能:(1)进程管理(进程)(2)内存管理(虚拟内存)(3)文件系统(文件) 2.进程的描述:进程控制块PCB 3.在Linux内核 ...

  9. codeforces1276A As Simple as One and Two

    C.As Simple as One and Two A. As Simple as One and Two time limit per test 3 seconds memory limit pe ...

  10. 开源项目 02 HttpLib

    using JumpKick.HttpLib; using Newtonsoft.Json; using System; using System.Collections.Generic; using ...