运维系列:06、Spark调优
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 实验