sparkStreaming实时数据处理的优化方面
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实时数据处理的优化方面的更多相关文章
- kafka+spark-streaming实时推荐系统性能优化笔记
1) --conf spark.dynamicAllocation.enabled=false 如果正在使用的是CDH的Spark,修改这个配置为false:开源的Spark版本则默认是false. ...
- 使用 Kafka 和 Spark Streaming 构建实时数据处理系统
使用 Kafka 和 Spark Streaming 构建实时数据处理系统 来源:https://www.ibm.com/developerworks,这篇文章转载自微信里文章,正好解决了我项目中的技 ...
- 基于Lua脚本解决实时数据处理流程中的关键问题
摘要 在处理实时数据的过程中需要缓存的参与,由于在更新实时数据时并发处理的特点,因此在更新实时数据时经常产生新老数据相互覆盖的情况,针对这个情况调查了Redis事务和Lua脚本后,发现Redis事务并 ...
- 基于spark-streaming实时推荐系统
基于spark-streaming实时推荐系统(一) 基于spark-streaming实时推荐系统( 二) 基于spark-streaming实时推荐系统(三)
- 使用 Kafka 和 Spark Streaming 构建实时数据处理系统(转)
原文链接:http://www.ibm.com/developerworks/cn/opensource/os-cn-spark-practice2/index.html?ca=drs-&ut ...
- MySQL应用架构优化-实时数据处理
1.1. 场景 在和开发人员做优化的时候,讨论最多的应该是结合应用场景编写出合适的SQL.并培训开发应该如何编写SQL让MySQL的性能尽量好.但是有一些的场景对于SQL的优化是行不通的. 打个比方, ...
- SparkStreaming实时日志分析--实时热搜词
Overview 整个项目的整体架构如下: 关于SparkStreaming的部分: Flume传数据到SparkStreaming:为了简单使用的是push-based的方式.这种方式可能会丢失数据 ...
- 使用spark-streaming实时读取Kafka数据统计结果存入MySQL
在这篇文章里,我们模拟了一个场景,实时分析订单数据,统计实时收益. 场景模拟 我试图覆盖工程上最为常用的一个场景: 1)首先,向Kafka里实时的写入订单数据,JSON格式,包含订单ID-订单类型-订 ...
- 在sparkStreaming实时存储时的问题
1.实时插入mysql时遇到的问题,使用的updateStaeBykey有状态的算子 必须设置checkpoint 如果报错直接删掉checkpoint 在创建的时候自己保存偏移量即可 再次启动时读 ...
随机推荐
- PyQt(Python+Qt)学习随笔:QTableWidgetItem的位置相关方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTableWidgetItem项在QTableWidget中的位置包括三个属性来决定,就是表格部件 ...
- 第15.8节 PyQt入门学习:Designer的界面功能介绍
进入Qt Designer以后,打开或新建一个ui文件,Qt Designer窗口展示的页面如下图所示: 老猿将界面各部分使用红色数字进行标记,按照数字顺序各区域对应功能分别为: 1.界面元素控件区域 ...
- Leetcode学习笔记(1)
scrapy爬虫的学习告一段落,又因为现在在学习数据结构,做题平台是lettcode:https://leetcode-cn.com/ 每周都要交一次做题的笔记,所以把相关代码和思路同时放在博客上记录 ...
- javascript中 fn() 和 return fn() 的区别
在js中用return和不用return,输出结果有的时候傻傻搞不清,之前在网上看到个例子挺经典,不过讲的不清楚,上例子: var i = 0; function fn(){ i++; if ...
- egg的基本使用
一.脚手架(可以快速生成项目) 1.新建一个项目文件夹,使用如下命令: 2.npm init egg --type=simple 3.npm i 它会根据package.json里记录的所需包进 ...
- java实现TCP通信(带界面)
服务端: package NetWork; import java.io.*;import java.net.*;import java.awt.event.*;import java.awt.*;i ...
- GC agent的安装和卸载
一.GC agent安装 下面介绍GC agent的push和pull两种安装方法 1.push(推送)安装GC agent方法 1).打开EMGC home page:https://even.or ...
- 22期老男孩Ptython全栈架构师视频教程
老男孩Ptython全栈架构师视频教程 Python最新整理完整版22期视频教程 超60G课程容量<ignore_js_op> <ignore_js_op> <ignor ...
- Web服务器-并发服务器-多进程(3.4.1)
@ 目录 1.优化分析 2.代码 3. 关于作者 1.优化分析 在单进程的时候,相当于 是来一个客户,派一个人去服务一下 效率低,现在使用多进程来服务 假设场景 100个人同时访问页面 单进程:一次处 ...
- CTF-源码泄露-PHP备份文件的两种格式
参考大佬文章: https://www.cnblogs.com/yunqian2017/p/11515443.html https://blog.csdn.net/xy_sunny/article/d ...