当前位置: 首页 > 知识库问答 >
问题:

执行器核心数和利益或其他-火花

乐正意智
2023-03-14

需要进行一些运行时澄清。

在我读到的其他地方的一个线程中,有人说Spark Executor应该只分配一个核心。然而,我想知道这是否真的永远是真的。阅读各种so问题和诸如此类的问题,以及Karau、Wendell等人的著作,可以清楚地看到,有相同或相反的专家指出,在某些情况下,每个执行者应该指定更多的内核,但讨论往往更多的是技术性的,而不是功能性的。也就是说,缺少功能性的例子。

>

  • 我的理解是RDD或DF的分区DS由单个执行器提供服务。好吧,没什么问题,完全有道理。那么,分区如何从多核中获益呢?

    >

  • 如果我有一个地图后跟一个过滤器,比如说a,这不是两个可以交织的任务--就像Informatica所做的那样,因为我的理解是它们是融合在一起的。既然如此,那么从一个分配的执行器运行更多的核心中获益的例子是什么呢?

    From JL:用其他(更技术性)的话说,任务是在Spark作业中RDD的一个阶段中对RDD分区中的记录进行的计算。从功能上说,在实践中,它意味着什么?

    而且,如果不是所有的核心都可以获取,那么是否可以分配Executor呢?我想有一段等待期,过一段时间,它可能会被分配到一个更有限的容量。真的?

    从一个关于SO的高度评价的回答中,什么是Spark中的任务?Spark worker是如何执行jar文件的?,下面陈述的是:当您创建SparkContext时,每个worker都启动一个执行器。来自另一个SO问题:创建SparkContext时,每个工作节点都启动一个执行器。

    我不确定我是否遵循了这些断言。如果Spark事先不知道分区等的数量,为什么那么早分配执行器呢?

  • 共有1个答案

    苗征
    2023-03-14

    我的理解是一个分区(...)由一个执行人执行。

    这是正确的,但是相反的情况并非如此--一个执行器可以跨多个阶段甚至多个RDD处理多个分区/任务)。

    那么从一个分配的执行器运行更多的核心中获益的例子是什么呢?

    最重要的是同时处理多个任务。由于每个执行器都是一个单独的JVM,这是一个相对繁重的进程,因此最好只为多个线程保留实例。此外,它还可以提供更多的优点,比如公开可跨多个任务使用的共享内存(例如存储广播变量)。

    当用户调用多线程代码时,辅助应用程序将多个线程应用到单个分区。但是,默认情况下不是这样做的(Spark中每个任务的CPU数量)

    请参见在同一个JVM中运行多个Spark任务有什么好处?

     类似资料:
    • 您从哪里开始调优上面提到的params。我们是从执行器内存开始,得到执行器的数目,还是从核心开始,得到执行器的数目。我跟踪了链接。然而得到了一个高水平的想法,但仍然不确定如何或从哪里开始并得出最终结论。

    • 我提出了一个关于Spark的非常愚蠢的问题,因为我想澄清我的困惑。我对Spark非常陌生,仍在努力理解它在内部是如何工作的。 比方说,如果我有一个输入文件列表(假设1000),我想在某个地方处理或写入,并且我想使用coalesce将我的分区数减少到100。 现在我用12个执行器运行这个作业,每个执行器有5个内核,这意味着它运行时有60个任务。这是否意味着,每个任务将在一个单独的分区上独立工作? 回

    • 我不明白的是,当我提交作业并指定: 应该只占用4个核心。然而,当提交作业时,它将使用所有16个内核,并跳过参数而旋转8个执行器。但是,如果我将参数更改为,它将相应地调整,4个executors将向上旋转。

    • Apache Spark:核心数与执行器数 由于每个案例都不一样,我又问了一个类似的问题。 我正在运行一个cpu密集型的应用程序,具有相同数量的核心和不同的执行器。以下是观察结果。 更新 案例3:执行器-12个,每个执行器的核心数-1个,执行器内存-3个,数据处理量-10 GB,分区-36个,作业持续时间:81分钟

    • Django的其他核心功能 ① 静态文件 ② csrf ③ 状态保持 ④ 中间件 ⑤ 密码管理

    • 我有一个Spark集群运行在hdfs之上的纱线模式。我启动了一个带有2个内核和2G内存的worker。然后我提交了一个具有3个核心的1个执行器动态配置的作业。不过,我的工作还能运转。有人能解释启动worker的内核数量和为执行者请求的内核数量之间的差异吗。我的理解是,由于执行者在工人内部运行,他们无法获得比工人可用的资源更多的资源。