sparkstreaming监听hdfs目录如何终止_Spark笔试题:Spark Streaming 反压机制
Spark Streaming 反压机制是1.5版本推出的特性,用来解决处理速度比摄入速度慢的情况,简单来讲就是做流量控制。当批处理时间(Batch Processing Time)大于批次间隔(Batch Interval,即BatchDuration)时,说明处理数据的速度小于数据摄入的速度,持续时间过⻓或源头数据暴增,容易造成 数据在内存中堆积,最终导致Executor OOM。反压就是来解决这个问题的。
spark streaming的消费数据源方式有两种:
1. 若是基于Receiver的数据源,可以通过设置spark.streaming.receiver.maxRate来控制最大输入 速率;
2. 若是基于Direct的数据源(如Kafka Direct Stream),则可以通过设置spark.streaming.kafka.maxRatePerPartition来控制最大输入速率。
当然,在事先经过压测,且流量高峰不会超过预期的情况下,设置这些参数一般没什么问题。但最大值不代表是最优值,最好还能根据每个批次处理情况来动态预估下个批次最优速率。
在Spark 1.5.0以上,就可通过背压机制来实现。开启反压机制,即设置spark.streaming.backpressure.enabled为true,Spark Streaming会自动根据处理能力来调整输入速率,从而在流量高峰时仍能保证最大的吞吐和性能
Spark Streaming的反压机制中,有以下几个重要的组件:
第一:RateController
RateController 组件是 JobScheduler 的监听器,主要监听集群所有作业的提交、运行、完成情况,并从 BatchInfo 实例中获取以下信息,交给速率估算器(RateEstimator)做速率的估算。
- 当前批次任务处理完成的时间戳 (processingEndTime)
- 该批次从第一个 job 到最后一个 job 的实际处理时⻓ (processingDelay)
- 该批次的调度时延,即从被提交到 JobScheduler 到第一个 job 开始处理的时⻓
(schedulingDelay) - 该批次输入数据的总条数(numRecords)
第二:RateEstimator
Spark 2.x 只支持基于 PID 的速率估算器,这里只讨论这种实现。基于 PID 的速率估算器简单地说就是它把收集到的数据(当前批次速率)和一个设定值(上一批次速率)进行比较,然后用它们 之间的差计算新的输入值,估算出一个合适的用于下一批次的流量阈值。这里估算出来的值就是流 量的阈值,用于更新每秒能够处理的最大记录数
第三:RateLimiter
RateController和RateEstimator组件都是在Driver端用于更新最大速度的,而RateLimiter是用于接收到Driver的更新通知之后更新Executor的最大处理速率的组件。RateLimiter是一个抽象类,它并不是Spark本身实现 的,而是借助了第三方Google的GuavaRateLimiter来产生的。它实质上是一个限流器,也可以叫 做令牌,如果Executor中task每秒计算的速度大于该值则阻塞,如果小于该值则通过,将流数据加 入缓存中进行计算。
*反压机制真正起作用时需要至少处理一个批:由于反压机制需要根据当前批的速率,预估新批的速率,所以反压机制真正起作用前,应至少保证处理一个批。*如何保证反压机制真正起作用前应用不会崩溃:要保证反压机制真正起作用前应用不会崩溃,需要控制每个批次最大摄入速率。若为Direct Stream,如Kafka Direct Stream,则可以通过spark.streaming.kafka.maxRatePerPartition参数来控制。此参数代表了每秒每个分区最大摄入的数据条数。假设BatchDuration为10秒,spark.streaming.kafka.maxRatePerPartition为12条,kafka topic分区数为3个,则一个批(Batch)最大读取的数据条数为360条(3*12*10=360)。同时,需要注意,该参数也代表了整个应用生命周期中的最大速率,即使是背压调整的最大值也不会超过该参数。
反压相关的参数
sparkstreaming监听hdfs目录如何终止_Spark笔试题:Spark Streaming 反压机制相关推荐
- sparkstreaming监听hdfs目录_大数据系列之Spark Streaming接入Kafka数据
Spark Streaming官方提供Receiver-based和Direct Approach两种方法接入Kafka数据,本文简单介绍两种方式的pyspark实现. 1.Spark Streami ...
- sparkstreaming监听hdfs目录如何终止_四十六、Spark Streaming简介及入门
1.什么是Spark Streaming Spark Streaming是基于Spark Core之间的实时计算框架,可以从很多数据源消费数据并对数据进行处理.它是Spark核心API的一个扩展与封装 ...
- sparkstreaming监听hdfs目录如何终止_HDFS—HA高可用详解
一.HA概述 1)所谓HA(high available),即高可用(7*24小时不中断服务). 2)实现高可用最关键的策略是消除单点故障.HA严格来说应该分成各个组件的HA 机制:HDFS的HA和Y ...
- sparkstreaming监听hdfs目录_Spark Streaming消费Kafka数据的两种方案
下午的时候翻微信看到大家在讨论Spark消费Kafka的方式,官网中就有答案,只不过是英文的,当然很多博客也都做了介绍,正好我的收藏夹中有一篇文章供大家参考.文章写的通俗易懂,搭配代码,供大家参考. ...
- sparkstreaming监听hdfs目录_flume kafka和sparkstreaming整合
本文介绍Flume.Kafka和Sparkstreaming的整合.代码流程是,我们通过shell脚本重播测试轨迹数据到指定轨迹文件中,使用Flume监听该轨迹数据文件,实时将轨迹数据发送到Kafka ...
- touch拦截监听_Android - requestDisallowInterceptTouchEvent() 阻止父层的View截获touch事件(事件处理机制)...
研究这个方法之前,首先让我们回顾一下View的onTouchEvent()以及onInterceptTouchEvent()的详细解释 (1)onTouchEvent() 当手指触摸到屏幕时,系统就会 ...
- oralce 数据库监听日志状态及目录:查看监听(使用grid用户登陆):
数据库监听日志状态及目录:查看监听(使用grid用户登陆): su - grid 密码:grid [grid@db1 ~]$ lsnrctl LSNRCTL> status LSNRCTL> ...
- inotifywait监听php,利用inotifywait监控主机文件和目录
inotifywait 是一个可以实时监控文件变动的工具,它利用linux内核中的inotify机制实现监控功能.查看内核版本 [root@Oracle ~]# uname -r 2.6.32-220 ...
- java 持久监听blockqueue的变化_Curator目录监听
Curator目录监听 write by donaldhan, 2018-06-29 09:40 引言 上一篇文章,我们简单看一下Curator的CDRWA相关的构造器,及Curator框架实现,[C ...
最新文章
- element-ui 2.4.3 如何实现对form部分字段验证的解决方法?
- 重新想象 Windows 8 Store Apps (27) - 选取器: 联系人选取窗口, 自定义联系人选取窗口...
- c++中的new、operator new、placement new
- VB6.0连接MySQL数据库
- csrf spring_无状态Spring安全性第1部分:无状态CSRF保护
- iOS判断为空或者只为空格
- 干货!一文搞懂无状态服务
- 【bzoj2060】[Usaco2010 Nov]Visiting Cows拜访奶牛 树形dp
- [转载] 机器学习模型的保存和调用
- 如何在没有域的环境中搭建AlwaysOn(一)
- date日期格式化 java,Java日期格式化常用方法
- 顺丰标准 150标准丰密面单 Clodop 实现打印
- python圣经是哪本_我的圣经:17年前的那本《Python 2.1 宝典》
- java设计模式-终结者者模式
- aspeed显卡安装ubuntu驱动
- JAVA打印指定长度的随机英文字母(小写)
- (winform)PDF文档或视频文件在线阅读或观看工具
- 高新技术企业申请流程如何
- 使用NVivo研究时,不得不注意的几点!
- 宽带不能上传发文件_光纤宽带和普通宽带的区别