gpt4 book ai didi

performance - 随着硬件规模的扩大,Spark 的性能会变慢

转载 作者:行者123 更新时间:2023-12-03 07:19:35 24 4
gpt4 key购买 nike

我正在尝试为我的 Spark 工作找到合适的硬件尺寸。我的理解是,扩大机器数量可能有助于加快我的工作速度,考虑到我的工作没有复杂的 Action 操作,因此驱动程序中的计算量可能很小。然而,我观察到,向 Spark 添加资源时,作业执行速度会降低。我可以使用以下简单的工作重现这种效果:

  • 从 HDFS 加载文本文件 (~100Gb)
  • 在 RDD 上运行简单的“过滤”转换,如下所示:

    JavaRDD<String> filteredRDD = rdd.filter(new Function<String, Boolean>() {
    public Boolean call(String s) {
    String filter = "FILTER_STRING";
    return s.indexOf(filter) > 0 ? true : false;
    }
  • 对结果运行 count() 操作

当我将集群中的机器数量从 4 台扩展到 8 台时,扩展问题就显现出来了。以下是有关环境的一些详细信息:

  • 每个执行器配置为使用 6 GB 内存。此外,HDFS 共同托管在同一台机器上。
  • 每台机器总共有 24 GB RAM 和 12 个核心(配置为使用 8 个用于 Spark 执行器)。
  • Spark 托管在 YARN 集群中。

有什么想法为什么我没有从 Spark 获得预期的可扩展性吗?

最佳答案

感谢大量评论,我想我发现我的集群出了什么问题。 HDFS“复制因子”至少是问题的一部分的想法是一个非常好的线索。

为了测试,我将 HDFS 的复制因子更改为集群节点数并重新运行测试,得到了可扩展的结果。但我并不确信这种行为背后的原因,因为 Spark 声称在将分区分配给执行器时会考虑数据局部性,即使使用默认的复制级别 (3),Spark 也应该有足够的空间来均匀分配分区。经过更多调查,我发现如果 YARN(或任何其他集群管理器)决定与多个执行器共享一台物理机器并且不使用所有机器,情况可能并非如此。在这种情况下,可能存在非任何执行器本地的 HDFS block ,这将导致跨网络数据传输以及我观察到的扩展问题。

关于performance - 随着硬件规模的扩大,Spark 的性能会变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35975808/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com