关于Spark中的性能调优,我有两个问题:
>
我理解在spark作业中控制并行性的一个关键因素是正在处理的RDD中存在的分区的数量,然后控制处理这些分区的执行器和内核。我能假定这是真的吗:
我知道每个执行器拥有高数量的内核可能会对HDFS写操作产生影响,但是我的第二个问题是,纯粹从数据处理的角度来看,两者之间有什么区别?例如,如果我有10个节点集群,这两个作业之间的区别是什么(假设每个节点有足够的内存来处理所有事情):
>
5个执行程序*2个执行程序核心
假设有无限大的内存和CPU,从性能的角度来看,我们是否应该期望上述两者的性能相同呢?
大多数情况下,使用更大的执行器(更多的内存、更多的内核)会更好。第一:更大的执行器和更大的内存可以很容易地支持广播连接和取消shuffle。第二:由于任务的创建不是相等的,统计上较大的执行者在OOM问题中有更好的生存机会。大型执行程序的唯一问题是GC暂停。G1GC有帮助。
我试图理解在Yarn上运行Spark作业时,核数和执行器数的关系。 测试环境如下: 数据节点数:3 数据节点计算机规范: CPU:Core i7-4790(内核数:4,线程数:8) RAM:32GB(8GB x 4) HDD:8TB(2TB x 4) 输入数据 类型:单文本文件 大小:165GB 行数:454,568,833 输出 null > 50分钟15秒 55分48秒 31分23秒 有关信息
Apache Spark:核心数与执行器数 由于每个案例都不一样,我又问了一个类似的问题。 我正在运行一个cpu密集型的应用程序,具有相同数量的核心和不同的执行器。以下是观察结果。 更新 案例3:执行器-12个,每个执行器的核心数-1个,执行器内存-3个,数据处理量-10 GB,分区-36个,作业持续时间:81分钟
为什么Spark有一个工作节点和四个执行器,每个执行器有一个核心,却无法处理自定义接收器?? 如果执行器在Spark Streaming中有一个单核,那么不通过自定义接收器处理传入数据的原因是什么? 我正在独立模式下运行Spark。我在Spark流媒体应用程序的自定义接收器中获取数据。我的笔记本电脑有4个内核。 master="火花://lappi: 7077" $spark_path/bin/s
问题内容: 如何从Java(或Scala)代码中配置具有和的执行器数量?我经常看到2个执行者。看起来像是行不通的,并且是与众不同的。 我只需要将执行程序的数量设置为等于集群大小,但是总是只有2个。我知道我的集群大小。如果这很重要,我会在YARN上运行。 问题答案: 好的,我知道了。执行程序的数量实际上不是Spark属性本身,而是用于在YARN上放置作业的驱动程序。因此,当我使用SparkSubmi
根据我的研究,每当我们运行spark作业时,我们不应该运行超过5个核的执行器,如果我们增加超过限制的核,作业将会因为糟糕的I/O吞吐量而受损。 我的疑问是,如果我们增加了执行器的数量,减少了内核,即使这些执行器最终会出现在同一个物理机器中,这些执行器会从同一个磁盘读取和写入同一个磁盘,为什么这不会引起I/O吞吐量问题。 我可以考虑Apache Spark:内核数量与执行程序数量的关系 用例以供参考
我提出了一个关于Spark的非常愚蠢的问题,因为我想澄清我的困惑。我对Spark非常陌生,仍在努力理解它在内部是如何工作的。 比方说,如果我有一个输入文件列表(假设1000),我想在某个地方处理或写入,并且我想使用coalesce将我的分区数减少到100。 现在我用12个执行器运行这个作业,每个执行器有5个内核,这意味着它运行时有60个任务。这是否意味着,每个任务将在一个单独的分区上独立工作? 回