赞
踩
数据倾斜一般会发生在shuffle过程中。很大程度上是你使用了可能会触发shuffle操作的算子:distinct、groupByKey、reduceByKey、aggregateByKey、join、cogroup、repartition等。
spark 调优:
调优工具:
1、Spark Web UI Spark内置应用运行监控工具
2、Ganglia 分析集群的使用状况和资源瓶颈
3、Nmon 主机CPU、网络、磁盘、内存
4、Jmeter 系统实时性能监控工具
数据倾斜问题(key值太多导致分区不均匀,使整个spark运行缓慢,类似于水桶效应,并且造成内存溢出的问题):某些task 执行任务过大,如100亿数据,某个task执行80亿条
定位:通过spark history 定位
实现原理:通过在Hive中对倾斜的数据进行预处理,以及在进行kafka数据分发时尽量进行平均分配。这种方案从根源上解决了数据倾斜,彻底避免了在Spark中执行shuffle类算子,那么肯定就不会有数据倾斜的问题了。
方案优点:实现起来简单便捷,效果还非常好,完全规避掉了数据倾斜,Spark作业的性能会大幅度提升。
方案缺点:治标不治本,Hive或者Kafka中还是会发生数据倾斜。
适用情况:在一些Java系统与Spark结合使用的项目中,会出现Java代码频繁调用Spark作业的场景,而且对Spark作业的执行性能要求很高,就比较适合使用这种方案。将数据倾斜提前到上游的Hive ETL,每天仅执行一次,只有那一次是比较慢的,而之后每次Java调用Spark作业时,执行速度都会很快,能够提供更好的用户体验。
reducebykey(100) groupbykey(12) 增加并行度
方案实现原理:增加shuffle read task的数量,可以让原本分配给一个task的多个key分配给多个task,从而让每个task处理比原来更少的数据。举例来说,如果原本有5个key,
每个key对应10条数据,这5个key都是分配给一个task的,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。