Spark 是专为大规模数据处理而设计的快速通用的计算引擎,可用它来完成各种各样的运算,包括 SQL 查询、文本处理、机器学习等,那么如何防止内存溢出呢?
工具/原料
Spark
方法/步骤
1
Spark在一个Executor中的内存分为三块,一块是execution内存,一块是storage内存,一块是other内存。
2
map过程产生大量对象导致内存溢出,单个map中产生了大量的对象容易导致内存溢出。面对这种问题不能使用rdd.coalesce方法,这个方法只能减少分区,不能增加分区,不会有shuffle的过程。
3
数据不平衡导致内存溢出,也有可能导致性能的问题,此时调用repartition重新分区即可。
4
coalesce调用导致内存溢出,令程序按照我们想的先执行100个Task再将结果合并成10个文件,这个问题同样可以通过repartition解决,调用repartition(10)。
5
shuffle内存溢出的情况可以说都是shuffle后,单个文件过大导致的。在Spark中,join,reduceByKey这一类型的过程,都会有shuffle的过程,在shuffle的使用,需要传入一个partitioner。
6
standalone模式下资源分配不均匀导致内存溢出,同时配置–executor-cores或者spark.executor.cores参数,确保Executor资源分配均匀。
7
在RDD中,共用对象能够减少OOM的情况。
注意事项
1
使用mapPartitions代替大部分map操作,或者连续使用的map操作。
2
先filter在join,shuffle的数据量会减少。
上一篇:安装Spark2.1页面操作
下一篇:如何安装spark