apache-spark - Spark中的分区数和并发任务数是如何计算的

标签 apache-spark

我有一个使用 Spark 1.0.1 的具有 4 个节点(每个节点有 16 个核心)的集群。

我有一个 RDD,我对其进行了重新分区,因此它有 200 个分区(希望提高并行度)。

当我对此 RDD 进行转换(例如过滤器)时,我似乎无法在某个时间点获得超过 64 个任务(我在 4 个节点上的核心总数)。我所说的任务是指出现在 Spark 应用程序 UI 下的任务数量。我尝试将spark.default.parallelism明确设置为128(希望我能同时运行128个任务)并在正在运行的应用程序的应用程序UI中验证这一点,但这没有效果。也许,“过滤器”会忽略这一点,默认值是可用核心总数。

我对 Spark 还很陌生,所以也许我只是错过或误解了一些基本的东西。任何帮助将不胜感激。

最佳答案

这是正确的行为。每个“核心”一次只能执行一个任务,每个任务对应一个分区。如果您的集群只有 64 个核心,则一次最多只能运行 64 个任务。

您可以在每个节点运行多个工作程序以获得更多执行程序。这将为您提供集群中更多的核心。但是,无论您有多少个核心,每个核心一次只能运行一项任务。

您可以在以下帖子中查看更多详细信息 How does Spark paralellize slices to tasks/executors/workers?

关于apache-spark - Spark中的分区数和并发任务数是如何计算的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42959304/

相关文章:

java - 序列化包含数据集的对象

apache-spark - 根据Spark中的列值拆分数据集

r - SparkR 中将字符串转换为日期时间?

python - Apache Spark中两个简单rdd的协方差

apache-spark - 如何将 cassandraRow 转换为 Row(apache spark)?

java - Java 中的通配符不适用于 Spark cogroup 函数

sql - 如何选择每组的第一行?

apache-spark - Spark中的XML处理

java - 如何处理 Spark rdd 生成上的 CSV 文件列?

spring-boot - 使用 Spring boot 的 Apache Spark - 无法启动异常工厂方法 'javaSparkContext' 引发异常并显示消息 : javax/servlet/Servlet