Spark optimize

1、垃圾回收

在conf/spark-env.sh中添加 SPARK_JAVA_OPTS=-verberos:gc -XX;+PrintGCDetails -XX:+PrintGCTimeStamps 如果发现集群耗费过多时间在垃圾回收上,可以通过spark.storage.memoryFaction调低RDD缓存的使用,这个值的默认值是0.66。

如果要运行的是耗时很久的Spark作业,可以通过设定spark.cleaner.ttl为一个非零值n,表示每隔n秒清理一次元数据。默认Spark不会清理任何元数据。

2、persist()缓存

默认都以非序列化模式存储,以节省读取数据时的反序列化开销。如: MEMORY_ONLY MEMORY_AND_DISK DISK_ONLY

如果存储级别后面添加了_SER后缀,Spark会在存储时对数据进行序列化,以节省存储空间。 MEMORY_ONLY_SER MEMORY_AND_DISK_SER DISK_ONLY_SER

3、序列化

默认使用Java内置的序列化算法,建议使用KyroSerialier算法,针对性的做了优化。 可以通过spark.serializer改成org.apache.spark.KryoSerializer来切换 // TODO 实验