问题标签 [executors]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Spark - 为我的 Spark 作业分配了多少执行器和核心
Spark 架构完全围绕执行器和核心的概念展开。我想看看在集群中运行的 Spark 应用程序实际上有多少个执行程序和内核运行。
我试图在我的应用程序中使用以下代码段,但没有运气。
有什么方法可以使用SparkContext
Object 或SparkConf
object 等获取这些值。
scala - Spark 应用程序仅使用 1 个执行器
我正在使用以下代码运行应用程序。我不明白为什么只有 1 个执行器在使用,即使我有 3 个。当我尝试增加范围时,我的工作失败导致任务管理器失去执行器。在总结中,我看到了随机写入的值,但随机读取为 0(可能导致所有数据都在一个节点上,并且不需要随机读取来完成作业)。
编辑:我增加了执行程序和驱动程序的内存和内核。我还将执行者的数量从 4 个更改为 1 个。这似乎有所帮助。我现在看到每个节点上的随机读取/写入。
apache-spark - Apache Spark:设置执行器实例
我使用参数在 YARN 上运行我的 Spark 应用程序:
在 spark-defaults.conf 中:
在纱线站点.xml 中:
所有其他参数都设置为默认值。
我有一个 6 节点集群,并且 Spark 客户端组件安装在每个节点上。每次我运行应用程序时,Spark UI 中只有 2 个执行程序和 1 个驱动程序可见。执行者出现在不同的节点上。
为什么 Spark 不能创建更多的执行者?为什么只有 2 而不是 6?
我发现了一个非常相似的问题:Apache Spark: setting executor instances doesn't change the executors,但增加 memoty-mb 参数对我的情况没有帮助。
apache-spark - 每个工人使用 YARN 和 Spark 有多个执行者?
在我的公司,我们使用新旧机器的组合拼凑了一个非常异构的 YARN + Spark 集群。由于单个机器的统计数据差异很大,我希望能够在更大的机器上启动多个执行器。设置--num-executors
高于集群中的机器数不起作用。是否需要更改其他设置才能启用此设置,或者只是不可能?
apache-spark - 在 join 和 reduceByKey 中触发执行器内存不足
在 spark2.0 中,我有两个数据框,我需要先加入它们并执行 reduceByKey 来聚合数据。我总是在 executor 中得到 OOM。提前致谢。
数据
d1(1G,5亿行,缓存,按col id2分区)
d2(160G,200万行,缓存,按col id2分区,值col包含5000个浮点数的列表)
现在我需要加入这两个表来获取 d3 并且我使用 spark.sql
然后我在 d3 上执行reduceByKey并汇总表 d1 中每个 id1 的值
我估计d4的大小是340G。现在我在 r3.8xlarge 机器上使用来运行作业
问题
我玩了一些配置,但我总是在执行程序中得到 OOM。所以,问题是
是否可以在当前类型的机器上运行此作业?或者我应该只使用更大的机器(多大?)。但我记得我遇到过文章/博客说用相对较小的机器进行 TB 处理。
我应该做什么样的改进?例如火花配置,代码优化?
是否可以估计每个执行程序所需的内存量?
火花配置
我试过的一些 Spark 配置
配置1:
配置2:
配置3:
配置4:
错误
来自执行程序的 OOM Error1
来自执行程序的 OOM Error2
来自容器的错误
更新 1
如果我按 id2 分区,看起来数据 d1 非常倾斜。结果,join会导致OOM。如果 d1 像我之前想的那样均匀分布,那么上面的配置应该可以工作。
更新 2
我发布了解决问题的尝试,以防有人也遇到类似问题。
尝试1
我的问题是,如果我按 id2 对 d1 进行分区,那么数据就会非常倾斜。因此,存在一些包含几乎所有 id1 的分区。因此,与 d2 的 JOIN 会导致 OOM 错误。为了缓解这样的问题,我首先从 id2 中识别出一个子集s
,如果按 id2 进行分区,它可能会导致这种倾斜的数据。然后我从 d2 创建一个 d5,包括 onlys
和 d6 从 d2 exclude s
。幸运的是,d5 的大小并不算大。所以,我可以用 d5 广播加入 d1。然后我加入 d1 和 d6。然后,我合并这两个结果并执行 reduceByKey。我非常接近解决问题。我没有继续这种方式,因为我的 d1 以后可能会变得更大。换句话说,这种方法对我来说并不是真正可扩展的
尝试2
幸运的是,d2 中的大多数值都非常小。根据我的应用程序,我可以安全地删除小值并将向量转换为 sparseVector 以显着减小 d2 的大小。完成此操作后,我将 d1 按 id1 分区并广播加入 d2(在删除小值之后)。当然,必须增加驱动程序内存以允许较大的广播变量。这对我有用,也适用于我的应用程序。
scala - 在 spark/scala 中跨多个节点传播部分代码
我的文件大小约为 10 GB。我需要提取数据并将它们插入到多个配置单元表中。
我能够在单个节点中使用一些准备/映射功能来完成。
样本数据 :
这是我的代码:
在这个 rec1(Regex.MatchIterator) 数据变成如下所示之后:
即每个 Dept 数据成为它自己的行。有时它可能在 300k - 400k 行之间变化。这是代码的下一部分,它对其进行格式化并将它们转换为数据帧。(我还没有编写代码将这个 Df 插入配置单元。但我认为,我可以在这个 pgm 的底部写这个。)
1)如何将代码的第二部分传播到多个执行器节点,同时数据也应该等价地拆分以被执行。就像我有 4 个节点集群,每个节点应该有 100K 行并单独执行第二个代码。但最后,这一切都应该在一张蜂巢表中。
multithreading - Java8 ForkJoinPool 和 Executors.newWorkStealingPool 的详细区别?
使用之间的低级区别是什么:
和
其中X是所需的并行级别,即正在运行的线程。
根据文档,我发现它们相似。还告诉我在任何正常使用下哪个更合适和安全。我有1.3亿个条目要写入 BufferedWriter 并使用 Unix 按第一列排序对它们进行排序。
如果可能的话,还让我知道要保留多少线程。
注意:我的系统有8个核心处理器和32 GB RAM。
spring-batch - Spring Batch 和 Executors 框架
这两个框架是否用于相同目的。如果不是,为什么以及如何在实时应用程序中使用这些?有没有教程可以学习这些。
c++ - C++ 上下文中的执行者模式是什么?
asio 的作者 Christopher Kohlhoff 正在为 C++ 中的执行程序开发一个库和提案。到目前为止,他的工作包括这个repo和docs。不幸的是,基本原理部分还没有写出来。到目前为止,文档给出了一些图书馆所做的例子,但我不觉得我错过了什么。不知何故,这不仅仅是一系列花哨的调用函数。
我在 Google 上可以找到的所有内容都非常特定于 Java,其中很多都是特定于特定框架的,所以我很难弄清楚这个“执行器模式”是什么。
在这种情况下,执行者是什么?他们在做什么?什么时候它们会有所帮助的典型例子是什么?执行者之间存在哪些差异?执行者的替代方案是什么?它们如何比较?特别是,似乎与事件循环有很多重叠,其中事件是初始输入事件、执行事件和关闭事件。
当试图找出新的抽象时,我通常会发现理解动机的关键。那么对于执行者来说,我们想要抽象什么,为什么?我们试图使什么通用化?如果没有执行者,我们需要做哪些额外的工作?
java - 多线程合并排序
我正在尝试创建合并排序的多线程版本,并且为此使用执行器(如果有其他更好的方法,请告诉我)。我希望两个线程同时运行。我是 Executors 的新手,即使在看过一些教程后也很难编写代码。当然,除执行器之外的任何并行化方法都是最受欢迎的。