alluxio/tachyon 中用于 spark 的 RDD 转换的内存使用情况
Memory usage for transformation on RDD's in alluxio/tachyon for spark
假设我们从 alluxio 内存创建一个 RDD
rdd1 = sc.textFile("alluxio://.../file1.txt")
rdd2 = rdd1.map(...)
rdd2
是在 alluxio
上还是在 spark
的堆上。
还有这样的操作(alluxio 上的 pairRDD)
pairRDD1.join(pairRDD2)
在 alluxio 或 spark heap 上创建一个新的 RDD。
第二个问题的原因是我需要在alluxio上加入2个大的RDD。 join 会使用 alluxio 的内存还是 RDD 会被拉入 spark 内存以进行连接(以及结果 RDD 驻留在何处)。
Spark 转换以惰性方式求值。这意味着 map()
在需要结果之前不会被评估,并且不会消耗任何 Spark 内存。如果您在 RDD 上显式调用 cache()
,则 RDD 只会消耗 Spark 内存。
因此,当你从 Alluxio 加入 2 个 RDD 时,在 Alluxio 中只有 RDD 的源数据是内存。在连接期间,Spark 将使用执行连接所需的内存。
生成的 RDD 所在的位置取决于您对该 RDD 执行的操作。如果将生成的 RDD 写入文件,则该 RDD 不会在 Spark 内存中完全具体化,但会写入文件。如果该文件在 Alluxio 中,它将在 Alluxio 内存中,而不是 Spark 内存中。如果您显式调用 cache()
.
,则生成的 RDD 只会在 Spark 内存中
假设我们从 alluxio 内存创建一个 RDD
rdd1 = sc.textFile("alluxio://.../file1.txt")
rdd2 = rdd1.map(...)
rdd2
是在 alluxio
上还是在 spark
的堆上。
还有这样的操作(alluxio 上的 pairRDD)
pairRDD1.join(pairRDD2)
在 alluxio 或 spark heap 上创建一个新的 RDD。
第二个问题的原因是我需要在alluxio上加入2个大的RDD。 join 会使用 alluxio 的内存还是 RDD 会被拉入 spark 内存以进行连接(以及结果 RDD 驻留在何处)。
Spark 转换以惰性方式求值。这意味着 map()
在需要结果之前不会被评估,并且不会消耗任何 Spark 内存。如果您在 RDD 上显式调用 cache()
,则 RDD 只会消耗 Spark 内存。
因此,当你从 Alluxio 加入 2 个 RDD 时,在 Alluxio 中只有 RDD 的源数据是内存。在连接期间,Spark 将使用执行连接所需的内存。
生成的 RDD 所在的位置取决于您对该 RDD 执行的操作。如果将生成的 RDD 写入文件,则该 RDD 不会在 Spark 内存中完全具体化,但会写入文件。如果该文件在 Alluxio 中,它将在 Alluxio 内存中,而不是 Spark 内存中。如果您显式调用 cache()
.