spark streaming性能优化
2017-03-27 10:57
411 查看
在spark streaming去重中,有解决思路固然重要,但实现以后却发现会有性能问题,其处理时间大于interval,导致delay越来越大,产生堆积。因此,spark streaming性能调优,基本是必不可少的一步。
通过在网上查阅资料,及自己总结,有以下一些经验。
尽量减少带来shuffle的操作,如reduce、group等。
使用高效算子,如subtractByKey代替leftOuterJoin、reduceByKey/aggregateByKey代替groupByKey,网上还有使用mapPartitions替代普通map、foreachPartitions替代foreach、filter之后进行coalesce操作、repartitionAndSortWithinPartitions替代repartition与sort类操作等未予验证使用。
一般问题会产生在最后的foreach中,比如在写入数据库或Hbase时不是并行方式等。
这个可以通过在Spark UI中的Executors中通过观察task在各个executor的分配情况判断。正常情况下,各个executor的active tasks和total tasks都是平均分布。
提高executors的数目
提高每个executor的cpu数目
使用Kryo对函数和对象等进行序列化,减少网络传输量。spark2.0.2中,会对可序列化进行强制检查,可通过下面的方式支持序列化:
spark.streaming.blockInterval:设置生成Block的时间间隔
spark.locality.wait:设置等待时长
通过在网上查阅资料,及自己总结,有以下一些经验。
优化程序
能过滤则优先filter,以减少处理的数据量。不要按平常习惯在后面的步骤进行if判断。尽量减少带来shuffle的操作,如reduce、group等。
使用高效算子,如subtractByKey代替leftOuterJoin、reduceByKey/aggregateByKey代替groupByKey,网上还有使用mapPartitions替代普通map、foreachPartitions替代foreach、filter之后进行coalesce操作、repartitionAndSortWithinPartitions替代repartition与sort类操作等未予验证使用。
函数可以并行
spark会将函数发到各个executor,分别在本地并行执行。如果函数无法支持并行,就会积压到一个executor,从而达不到平均分发任务的效果,造成瓶颈。一般问题会产生在最后的foreach中,比如在写入数据库或Hbase时不是并行方式等。
这个可以通过在Spark UI中的Executors中通过观察task在各个executor的分配情况判断。正常情况下,各个executor的active tasks和total tasks都是平均分布。
提高并行度
在保证函数可以支持并行情况下,就可以提高并行度了。提高executors的数目
提高每个executor的cpu数目
存储和序列化
不使用带序列化的持久化策略时,数据的序列化和反序列化会带来性能消耗。使用Kryo对函数和对象等进行序列化,减少网络传输量。spark2.0.2中,会对可序列化进行强制检查,可通过下面的方式支持序列化:
conf.registerKryoClasses(new Class[] { MyClass.class });
spark参数(详见doc)
spark.default.parallelism:设置task的并行数spark.streaming.blockInterval:设置生成Block的时间间隔
spark.locality.wait:设置等待时长
相关文章推荐
- 大数据IMF传奇行动绝密课程第120课:Spark Streaming性能优化:如何在End-to-End生产环境下安全高效地把结果数据存入HBase中
- 第121课: Spark Streaming性能优化:通过摄像头图像处理案例来说明Spark流处理性能评估新方法及性能调优参数测试
- 第121课:Spark Streaming性能优化:通过摄像头图像处理案例来说明Spark流处理性能评估新方法及性能调优参数调试
- 第116课: Spark Streaming性能优化:如何在毫秒内处理处理大吞吐量的和数据波动比较大 的程序
- 第117课: Spark Streaming性能优化:如何最大程度的确保Spark Cluster和Kafka链接的稳
- 第122课:Spark Streaming性能优化:Spark Streaming处理分布式拒绝服务器案例及性能优化
- Spark Streaming之foreachRDD性能优化
- spark streaming性能优化
- 第123课:Spark Streaming性能优化:通过Spark Streaming发现botnet及性能优化
- 第124课:Spark Streaming性能优化:通过Spark Streaming进行设备日志监控报警及性能优化
- 大数据IMF传奇行动绝密课程第116课:Spark Streaming性能优化:如何在毫秒内处理大吞吐量和数据波动比较大的流计算
- Spark视频王家林第119课: Spark Streaming性能优化:如何在生产环境下应对流数据峰值巨变?
- 大数据IMF传奇行动绝密课程第117课:Spark Streaming性能优化:如何最大程度的确保Spark Cluster和Kafka连接的稳定性
- 大数据IMF传奇行动绝密课程第118课:Spark Streaming性能优化:如何获得和持续使用足够的集群计算资源
- Spark Streaming性能优化: 如何在生成环境下应对流数据峰值巨变
- 大数据IMF传奇行动绝密课程第119课:Spark Streaming性能优化:如何在生产环境下应对流数据峰值巨变
- Spark性能优化之通过YDB实现比原生Spark性能高100倍的多表关联
- spark 应用程序性能优化经验
- spark的性能优化的方式
- Spark性能优化指南——基础篇