Spark Cassandra 和资源分配
Spark Cassandra and resource allocation
我的理解是默认的spark.cassandra.input.split.size_in_mb是64MB.It意味着将从Cassandra中读取数据而创建的任务数将是Approx_table_size/64。假设 table 大小为 6400 MB(我们只是读取数据,执行 foreachPartition 并将数据写回数据库),因此任务数将为 100。但是在 YARN 上执行作业时,如果我专门设置了 --num-executors 3,--executor-cores 2,所以这应该为作业创建最多 6 个任务。现在 conf 设置会在执行时覆盖 100 个任务的 input.split.size 值吗?或者在读取数据时将创建 100 个任务但之后分区将减少到 6 并且会发生数据混洗的情况。
首先要提到的是 - spark.cassandra.input.split.size_in_mb
是默认值,但如果您的 Cassandra 分区大于该值,那么 Spark 分区将具有 Cassandra 分区的大小,而不是该设置中的值.
关于处理 - 不是真的。 Spark Cassandra Connector 将创建 100 个 Spark 分区,这些分区将由 Spark 使用可用内核 (6) 处理,因此这意味着它将重复代码 17 次 (6*16 + 4 ),因为在 Spark 中,每个分区都由单核处理。仅当您明确 .repartition
时才会发生洗牌。
我的理解是默认的spark.cassandra.input.split.size_in_mb是64MB.It意味着将从Cassandra中读取数据而创建的任务数将是Approx_table_size/64。假设 table 大小为 6400 MB(我们只是读取数据,执行 foreachPartition 并将数据写回数据库),因此任务数将为 100。但是在 YARN 上执行作业时,如果我专门设置了 --num-executors 3,--executor-cores 2,所以这应该为作业创建最多 6 个任务。现在 conf 设置会在执行时覆盖 100 个任务的 input.split.size 值吗?或者在读取数据时将创建 100 个任务但之后分区将减少到 6 并且会发生数据混洗的情况。
首先要提到的是 - spark.cassandra.input.split.size_in_mb
是默认值,但如果您的 Cassandra 分区大于该值,那么 Spark 分区将具有 Cassandra 分区的大小,而不是该设置中的值.
关于处理 - 不是真的。 Spark Cassandra Connector 将创建 100 个 Spark 分区,这些分区将由 Spark 使用可用内核 (6) 处理,因此这意味着它将重复代码 17 次 (6*16 + 4 ),因为在 Spark 中,每个分区都由单核处理。仅当您明确 .repartition
时才会发生洗牌。