1.并行度

在direct方式下,sparkStreaming的task数量是等于kafka的分区数,kakfa单个分区的一般吞吐量为10M/s

常规设计下:kafka的分区数一般为broken节点的3,6,9倍比较合理

比如我的集群有6个broken节点,创建kafka的分区为18个,sparkStreaming的task也为18个,当然也可以适当放大分区,根据自己的数据量来合理规划集群及分区数

2.序列化

java的序列化很沉重,会序列化好多无关的(时间长)

举例:100000个简单的对象,序列化时间对比

java原生序列化时间:8637 ms
java原生反序列化时间:5851 ms

Kryo 序列化时间:455 ms
Kryo 反序列化时间:207 ms

 对对象进行序列化注册
sparkConf.registerKryoClasses(
Array(
classOf[OrderInfo],
classOf[Opt_alliance_business],
classOf[DriverInfo],
classOf[RegisterUsers] ,
classOf[Reservation]
)

3.限流与背压

不开启背压:每秒钟从kafka每一个分区拉取的数据量是无限制--刚启动程序时kafka堆积的数大量据都会直接被短时间进行消费,消费不及时,可能会发生内存溢出
开启限流:spark.streaming.kafka.maxRatePerPartition
开启背压:流启动之后 --》checkpoint --》metastore 流信息无法更改
举例:
sparkConf.set("spark.streaming.backpressure.initialRate" , "500") 初始速率500条/s
sparkConf.set("spark.streaming.backpressure.enabled" , "true") 开启压背
sparkConf.set("spark.streaming.kafka.maxRatePerPartition" , "5000") 最大速度不超过5000条
4.cpu空转流 -->task 如果task没拿到数据,也会进行资源消耗
spark.locality.wait 3s

5.不要在代码中判断这个表是否存在不要在实时代码里面判断表是否存在,耗时

6、推测执行

推测执行:就是把执行失败task的转移到另一个executor
 场景:task失败造成重试(task启动、压缩、序列化),如果每次task执行3秒失败重试8次需要消耗24秒
sparkConf.set("spark.speculation.interval", "300") 推测执行间隔
sparkConf.set("spark.speculation.quantile","0.9") 推测执行完成的task的阈值

7.关于某个task的执行的任务运行两个小时都运行不完
场景:yarn日志报错:shuffle落地文件找不到、shuffle文件打不开  也会造成task失败 ,spark 4105 shuffle fetch 错误

原因:shuffle1 过程 writeshuffle=》落地(默认lz4)=》readshuffle,写的汇聚shuffle文件被下游的节点打不开或者读取不到,可能是压缩的原因,压缩文件打不开

spark4105错误地址:https://issues.apache.org/jira/browse/SPARK-4105
解决:开启推测执行 =》转移任务,关闭shuffle压缩设置(也就是增加了节点直接传输的文件大小,加大了IO),重新跑数据


8.hashshuffle与sortshuffle

https://www.jianshu.com/p/fafef67c203c

------------恢复内容结束------------

sparkStreaming实时数据处理的优化方面的更多相关文章

  1. kafka+spark-streaming实时推荐系统性能优化笔记

    1) --conf spark.dynamicAllocation.enabled=false 如果正在使用的是CDH的Spark,修改这个配置为false:开源的Spark版本则默认是false. ...

  2. 使用 Kafka 和 Spark Streaming 构建实时数据处理系统

    使用 Kafka 和 Spark Streaming 构建实时数据处理系统 来源:https://www.ibm.com/developerworks,这篇文章转载自微信里文章,正好解决了我项目中的技 ...

  3. 基于Lua脚本解决实时数据处理流程中的关键问题

    摘要 在处理实时数据的过程中需要缓存的参与,由于在更新实时数据时并发处理的特点,因此在更新实时数据时经常产生新老数据相互覆盖的情况,针对这个情况调查了Redis事务和Lua脚本后,发现Redis事务并 ...

  4. 基于spark-streaming实时推荐系统

    基于spark-streaming实时推荐系统(一) 基于spark-streaming实时推荐系统( 二) 基于spark-streaming实时推荐系统(三)

  5. 使用 Kafka 和 Spark Streaming 构建实时数据处理系统(转)

    原文链接:http://www.ibm.com/developerworks/cn/opensource/os-cn-spark-practice2/index.html?ca=drs-&ut ...

  6. MySQL应用架构优化-实时数据处理

    1.1. 场景 在和开发人员做优化的时候,讨论最多的应该是结合应用场景编写出合适的SQL.并培训开发应该如何编写SQL让MySQL的性能尽量好.但是有一些的场景对于SQL的优化是行不通的. 打个比方, ...

  7. SparkStreaming实时日志分析--实时热搜词

    Overview 整个项目的整体架构如下: 关于SparkStreaming的部分: Flume传数据到SparkStreaming:为了简单使用的是push-based的方式.这种方式可能会丢失数据 ...

  8. 使用spark-streaming实时读取Kafka数据统计结果存入MySQL

    在这篇文章里,我们模拟了一个场景,实时分析订单数据,统计实时收益. 场景模拟 我试图覆盖工程上最为常用的一个场景: 1)首先,向Kafka里实时的写入订单数据,JSON格式,包含订单ID-订单类型-订 ...

  9. 在sparkStreaming实时存储时的问题

    1.实时插入mysql时遇到的问题,使用的updateStaeBykey有状态的算子 必须设置checkpoint  如果报错直接删掉checkpoint 在创建的时候自己保存偏移量即可 再次启动时读 ...

随机推荐

  1. 第11.15节 Python正则表达式转义符定义的特殊序列

    一. 引言 在前面<第11.13节 Python正则表达式的转义符"\"功能介绍>介绍了正则表达式转义符'\',只不过当时作为转义符主要是用于在正则表达式中表示元字符自 ...

  2. 【开发工具】 使用 Postman 进行接口测试 (配置全局 token,JWT可用)

    在前后端分离开发的项目中,使用postman来做接口测试会方便很多,然而因为JWT的鉴权,导致每半小时token都要更新一下,使测试变的很麻烦. 如果把token设置为全局变量,方便做测试,每次自动获 ...

  3. Java程序员普遍存在的面试问题以及应对之道(新书第一章节摘录)

    其实大多数Java开发确实能胜任日常的开发工作,但不少候选人却无法在面试中打动面试官.因为要在短时间的面试中全面展示自己的实力,这很需要技巧,而从当前大多数Java开发的面试现状来看,会面试的候选人不 ...

  4. 题解-洛谷P4229 某位歌姬的故事

    题面 洛谷P4229 某位歌姬的故事 \(T\) 组测试数据.有 \(n\) 个音节,每个音节 \(h_i\in[1,A]\),还有 \(m\) 个限制 \((l_i,r_i,g_i)\) 表示 \( ...

  5. 题解-洛谷P5217 贫穷

    洛谷P5217 贫穷 给定长度为 \(n\) 的初始文本 \(s\),有 \(m\) 个如下操作: \(\texttt{I x c}\),在第 \(x\) 个字母后面插入一个 \(c\). \(\te ...

  6. PsySH作为调试器

    PsySH作为调试器 PsySH可以用来在脚本中设置一个断点,在这个断点处它将暂停并提供对shell的访问,以检查变量并在断点所在位置的上下文中运行命令.目前它不支持逐步调试(如xdebug),但在需 ...

  7. Linux安装Mysql8.0.20并配置主从复制(一主一从,双主双从)

    1. 主从复制解释   将主数据库的增删改查等操作记录到二进制日志文件中,从库接收主库日志文件,根据最后一次更新的起始位置,同步复制到从数据库中,使得主从数据库保持一致. 2. 主从复制的作用 高可用 ...

  8. WPF TextBox 实现CornerRadius圆角

    <Grid Background="Gray" Height="230" Width="229"> <Border Cor ...

  9. SPI机制剖析——基于DriverManager+ServiceLoader的源码分析

    我的上一篇博客类加载器与双亲委派中提到,SPI机制是一种上级类加载器调用下级类加载器的情形,因此会打破类加载的双亲委派模型.为了深入理解其中的细节,本博客详细剖析一下SPI机制,并以JDBC为例,基于 ...

  10. MySQL_CRUD_In_Terminal

    MySQL的CRUD操作 从Terminal中,可以对数据库进行链接,无需GUI界面就可以对数据库进行相关操作.对于Linux.Windows.MacOS,也可以使用可视化软件Navicat.MySQ ...