spark streaming 流式计算---跨batch连接池共享(JVM共享连接池)
在流式计算过程中,难免会连接第三方存储平台(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共享连接池)的更多相关文章
- spark streaming流式计算---监听器
随着对spark的了解,有时会觉得spark就像一个宝盒一样时不时会出现一些难以置信的新功能.每一个新功能被挖掘,就可以使开发过程变得更加便利一点.甚至使很多不可能完成或者完成起来比较复杂的操作,变成 ...
- Spark Streaming流式处理
Spark Streaming介绍 Spark Streaming概述 Spark Streaming makes it easy to build scalable fault-tolerant s ...
- Spark之 Spark Streaming流式处理
SparkStreaming Spark Streaming类似于Apache Storm,用于流式数据的处理.Spark Streaming有高吞吐量和容错能力强等特点.Spark Streamin ...
- 从Storm和Spark 学习流式实时分布式计算的设计
0. 背景 最近我在做流式实时分布式计算系统的架构设计,而正好又要参加CSDN博文大赛的决赛.本来想就写Spark源码分析的文章吧.但是又想毕竟是决赛,要拿出一些自己的干货出来,仅仅是源码分析貌似分量 ...
- 流式计算(一)-Java8Stream
大约各位看官君多少也听说了Storm/Spark/Flink,这些都是大数据流式处理框架.如果一条手机组装流水线上不同的人做不同的事,有的装电池,有的装屏幕,直到最后完成,这就是典型的流式处理.如果手 ...
- Dream_Spark-----Spark 定制版:005~贯通Spark Streaming流计算框架的运行源码
Spark 定制版:005~贯通Spark Streaming流计算框架的运行源码 本讲内容: a. 在线动态计算分类最热门商品案例回顾与演示 b. 基于案例贯通Spark Streaming的运 ...
- Storm:分布式流式计算框架
Storm是一个分布式的.高容错的实时计算系统.Storm适用的场景: Storm可以用来用来处理源源不断的消息,并将处理之后的结果保存到持久化介质中. 由于Storm的处理组件都是分布式的,而且处理 ...
- Others-阿里专家强琦:流式计算的系统设计和实现
阿里专家强琦:流式计算的系统设计和实现 更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud 阿里云数据事业部强琦为大家带来题为“流式计算的系统设计与实现”的演讲,本 ...
- demo2 Kafka+Spark Streaming+Redis实时计算整合实践 foreachRDD输出到redis
基于Spark通用计算平台,可以很好地扩展各种计算类型的应用,尤其是Spark提供了内建的计算库支持,像Spark Streaming.Spark SQL.MLlib.GraphX,这些内建库都提供了 ...
随机推荐
- Pthon魔术方法(Magic Methods)-实例化
Pthon魔术方法(Magic Methods)-实例化 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.实例化一个对象 __new__: 该方法需要返回一个值,如果该值不是cl ...
- Synchronized偏向锁和轻量级锁的升级
原文:https://blog.csdn.net/tongdanping/article/details/79647337 锁的优化1.锁升级锁的4中状态:无锁状态.偏向锁状态.轻量级锁状态.重量级锁 ...
- P4560 [IOI2014]Wall 砖墙
题目描述 给定一个长度为 nn且初始值全为 00的序列.你需要支持以下两种操作: Add L, R, hL,R,h:将序列 [L, R][L,R]内所有值小于 hh的元素都赋为 hh,此时不改变高度大 ...
- python开发笔记-变长字典Series的使用
Series的基本特征: 1.类似一维数组的对象 2.由数据和索引组成 import pandas as pd >>> aSer=pd.Series([1,2.0,'a']) > ...
- JDK1.8 java.io.Serializable接口详解
java.io.Serializable接口是一个标志性接口,在接口内部没有定义任何属性与方法.只是用于标识此接口的实现类可以被序列化与反序列化.但是它的奥秘并非像它表现的这样简单.现在从以下几个问题 ...
- Codeforces 1251E Voting
E2. Voting (Hard Version) 题意: 有n个人, 你想让他们都给你投票. 你可以选择花费pi收买第i个人, 或者如果有mi个人已经给你投票了, 那么第i个人会自动给你投票. 不妨 ...
- 全局异常捕获处理-@ControllerAdvice+@HandleException
涂涂影院管理系统这个demo中有个异常管理的标签,用于捕获 涂涂影院APP用户异常信息 ,有小伙伴好奇,排除APP,后台端的是如何处理全局异常的,故项目中的实际应用已记之. 关于目前的异常处理 在使用 ...
- Tips on Java
1.JAVA种数组的两种定义方式. int[] nums; int nums[]. 2.整型默认为int,如果需要long,须加l或L.小数默认double,d或D可省略,但如果需要float,须加f ...
- IOI2019题解
由于太懒了,好久没更新了.发个题解好了. shoes 首先不难证明鞋子配对一定是从前往后将同一种的左和右配对. 配好对之后首先我们可以假设左在右的左边,然后讨论可知将左边靠前的排在前面更优. rect ...
- uni app 零基础小白到项目实战-1
uni-app是一个使用vue.js开发跨平台应用的前端框架. 开发者通过编写vue.js代码,uni-app将其编译到Ios,android,微信小程序等多个平台,保证其正确并达到优秀体验. Uni ...