apache-spark - 分区如何映射到 Spark 中的任务?

标签 apache-spark rdd

如果我对 RDD 进行分区说 60,我总共有 20 个内核分布在 20 台机器上,即单核机器的 20 个实例,那么任务数是 60(等于分区数)。为什么这比每个内核一个分区和 20 个任务更有利?

此外,我运行了一个实验,我将分区数设置为 2,检查 UI 显示在任何时间运行 2 个任务;然而,令我惊讶的是它会在任务完成时切换实例,例如node1 和 node2 执行前 2 个任务,然后 node6 和 node8 执行下一组 2 个任务等。我认为通过将分区数量设置为小于集群中的核心(和实例),那么程序将只使用最小值需要的实例数。谁能解释这种行为?

最佳答案

对于第一个问题:您可能需要比严格必要的更细粒度的任务,以便同时减少内存加载。此外,它还有助于容错,因为在发生故障时需要重做的工作更少。它仍然是一个参数。一般来说,答案取决于工作负载的种类(IO 限制、内存限制、CPU 限制)。

至于第二个,我相信1.3版本有一些动态请求资源的代码。我不确定中断是哪个版本,但旧版本只请求您配置驱动程序的确切资源。至于分区如何从一个节点移动到另一个节点,好吧,AFAIK 它将从在 HDFS 上具有该数据的本地副本的节点中选择任务的数据。由于 hdfs 有每个数据块的多个副本(默认为 3 个),因此有多个选项可以运行任何给定的数据块)。

关于apache-spark - 分区如何映射到 Spark 中的任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29831234/

相关文章:

scala - 无法解决 Spark 作业中的符号拆分问题

java - 使用 group by 根据数据的两个不同子集获取两个聚合的不同计数

scala - 在groupBy之后获得前N名,并将其视为RDD

scala - 如何找到 spark RDD/Dataframe 大小?

scala - 从行读取列时出现 NullPointerException

apache-spark - 将2TB的压缩多行JSON转换为ND JSON

java.lang.ClassCastException : scala. Tuple2 无法转换为 java.lang.Iterable

apache-spark - Spark 作业完成后,OFF_HEAP rdd 被 Tachyon 自动删除

python - 根据某个键值 (pyspark) 从 RDD 创建多个 Spark DataFrame

java - 如何使用javapairrdd中的containsAll和contains来使用过滤器