Configuration 火花纱>;spark.default.parallelism>;从粗粒度的角度来看,更大或更小

Configuration 火花纱>;spark.default.parallelism>;从粗粒度的角度来看,更大或更小,configuration,apache-spark,Configuration,Apache Spark,从Spark的粗粒度特性来看,当运行一个包含Join或Reduce by key等的Spark作业时,将Spark.default.parallelism更改为一个较大的数字以便多个线程可以同时在单个分区上工作是一个好主意吗 据我所知,这应该没问题,对吧?但缺点是,这可能会使网络I/O通信繁忙。默认值是所有可用核心的数量 谁能对此发表一些评论?提前谢谢 因此,许多线程可以同时在单个分区上工作 分区是Spark中最小的并发单元。它意味着每个分区只有一个线程。当然,您可以在mapPartitions

从Spark的粗粒度特性来看,当运行一个包含Join或Reduce by key等的Spark作业时,将Spark.default.parallelism更改为一个较大的数字以便多个线程可以同时在单个分区上工作是一个好主意吗

据我所知,这应该没问题,对吧?但缺点是,这可能会使网络I/O通信繁忙。默认值是所有可用核心的数量

谁能对此发表一些评论?提前谢谢

因此,许多线程可以同时在单个分区上工作

分区是Spark中最小的并发单元。它意味着每个分区只有一个线程。当然,您可以在
mapPartitions
中使用并行处理,但它不是标准Spark逻辑的一部分

当没有另外指定分区数时,更高的并行性意味着更多的分区。通常这是一个期望的结果,但它是有代价的。这意味着簿记成本不断增加,聚合效率降低,一般来说,在没有序列化/反序列化和网络流量的情况下,可以在本地处理的数据也会减少。当分区数量与数据量和可用内核数量相比非常高时,当分区数量增加时,这可能会成为一个严重的问题(请参阅)

当增加并行性有意义时:

  • 您有大量的数据和大量的备用资源(建议分区数量是可用内核数量的两倍)
  • 您希望减少处理单个分区所需的内存量
  • 您可以执行计算密集型任务
当增加并行性没有意义时:

  • 并行性>>可用内核的数量
  • 与数据量相比,并行性很高,您希望同时处理多条记录(
    groupBy
    reduce
    agg
一般来说,我认为
spark.default.parallelism
不是一个非常有用的工具,根据具体情况调整并行性更有意义。如果并行度太高,在数据加载和简单转换的情况下可能会导致空分区,并降低性能/次优资源使用率。如果它太低,则在执行可能需要大量分区(联接、联合)的转换时可能会导致问题

因此,许多线程可以同时在单个分区上工作

分区是Spark中最小的并发单元。它意味着每个分区只有一个线程。当然,您可以在
mapPartitions
中使用并行处理,但它不是标准Spark逻辑的一部分

当没有另外指定分区数时,更高的并行性意味着更多的分区。通常这是一个期望的结果,但它是有代价的。这意味着簿记成本不断增加,聚合效率降低,一般来说,在没有序列化/反序列化和网络流量的情况下,可以在本地处理的数据也会减少。当分区数量与数据量和可用内核数量相比非常高时,当分区数量增加时,这可能会成为一个严重的问题(请参阅)

当增加并行性有意义时:

  • 您有大量的数据和大量的备用资源(建议分区数量是可用内核数量的两倍)
  • 您希望减少处理单个分区所需的内存量
  • 您可以执行计算密集型任务
当增加并行性没有意义时:

  • 并行性>>可用内核的数量
  • 与数据量相比,并行性很高,您希望同时处理多条记录(
    groupBy
    reduce
    agg
一般来说,我认为
spark.default.parallelism
不是一个非常有用的工具,根据具体情况调整并行性更有意义。如果并行度太高,在数据加载和简单转换的情况下可能会导致空分区,并降低性能/次优资源使用率。如果它太低,则在执行可能需要大量分区(联接、联合)的转换时可能会导致问题