spark系统有几处与磁盘交换的地方:
1,spark的shuffle依然要将map的数据存储在磁盘上,所以在spark的环境变量中可以设置"spark.local.dir"的值保存spark的shuffle数据存储的位置,如果没有设置,shuffle的数据默认将放在"java.io.tmpdir"中,这段代码在core当中为:
def getLocalDir(conf: SparkConf): String = {
/*if the spark.local.dir is not set, get the default value from java.io.temdir..casa*/
conf.get("spark.local.dir", System.getProperty("java.io.tmpdir")).split(',')(0)
}
其中的get函数为:
/** Get a parameter, falling back to a default if not set */
def get(key: String, defaultValue: String): String = {
settings.getOrElse(key, defaultValue)
}
在spark-env.sh中定义的方式如下(在环境变量spark.io.dir中如果有多个目录用逗号隔开,这样如果用多块硬盘可以减少shuffle写磁盘的时间):
export SPARK_JAVA_