【问题标题】:Spark cluster does not scale to small dataSpark 集群无法扩展到小数据
【发布时间】:2017-04-15 07:02:27
【问题描述】:

我目前正在一个小型集群(具有 32 个 CPU 和 128 GB 内存的 3 个节点)上评估 Spark 2.1.0,并使用线性回归 (Spark ML) 基准。我只测量了参数计算的时间(不包括开始、数据加载……)并识别出以下行为。对于 0.1 Mio – 3 Mio 数据点的小型数据集,测量的时间并没有真正增加,而是保持在大约 40 秒。只有像 300 个 Mio 数据点这样的大型数据集,处理时间才达到 200 秒。因此,集群似乎根本无法扩展到小型数据集。

我还将本地 PC 上的小型数据集与仅使用 10 个工作器和 16GB 内存的集群进行了比较。集群的处理时间增加了 3 倍。那么这是否被认为是 SPARK 的正常行为并且可以通过通信开销来解释,还是我做错了什么(或者线性回归并不真正具有代表性)?

该集群是一个独立的集群(没有 Yarn 或 Mesos),提交的基准测试有 90 个工作人员,每个工作人员有 1 个核心和 4 GB 内存。

火花提交: ./spark-submit --master spark://server:7077 --class Benchmark --deploy-mode client --total-executor-cores 90 --executor-memory 4g --num-executors 90 .. ./Benchmark.jar pathToData

【问题讨论】:

  • 我不确定您是否对较小的 0.1-0.3M 数据集或较大的 300M 数据集的性能不满意?
  • 嗨,我对性能并不满意。我只是想知道即使数据已经加载并且非常小,集群需要半分钟的计算时间是否正常。
  • 我会说你的观察是合理的。一旦我睡了一会儿,我会提供更详细的答案 - 如果在此期间没有其他人这样做的话。

标签: apache-spark benchmarking apache-spark-ml


【解决方案1】:

最佳集群大小和配置因数据和作业性质而异。在这种情况下,我认为您的直觉是正确的,在较小的数据集上完成这项工作似乎需要更长的时间,因为考虑到集群的大小(核心和执行程序)会产生过多的开销。

请注意,将数据量增加两个数量级只会使处理时间增加 5 倍。您正在将数据增加到适合集群设置的最佳大小。

Spark 是处理大量数据的绝佳工具,但如果数据适合,它不会与在单台机器上运行单个进程相比具有竞争力。但是,它比其他基于磁盘的分布式处理工具要快得多,因为其他分布式处理工具的数据不适合单台机器。

几年前我参加过一次演讲,演讲者做了一个比喻,Spark 就像一辆火车头和一辆自行车赛跑:- 如果负载很轻,自行车会赢,它加速更快、更敏捷,但机车重载可能需要一段时间才能加快速度,但最终会更快。 (恐怕我忘记了演讲者的名字,但那是在伦敦的一次 Cassandra 聚会上,演讲者来自能源部门的一家公司)。

【讨论】:

    【解决方案2】:

    我同意@ImDarrenG 的评估,一般也同意机车/自行车的类比。

    数据量这么少,强烈推荐

    A) 缓存整个数据集并

    B) 将数据集广播到每个节点(特别是如果您需要将 300M 行表连接到小型数据集)

    要考虑的另一件事是文件数(如果您尚未缓存),因为如果您正在读取单个不可分割的文件,则只有 1 个内核能够读取该文件。但是一旦您缓存数据集(根据需要合并或重新分区),性能将不再受磁盘/序列化行的限制。

    【讨论】:

    • 我不确定您所说的广播是什么意思,但是缓存数据集可以大大提高性能。 3M 数据集现在在 0.5 秒内处理完毕。我还尝试了重新分区并获得了另外 50 毫秒的改进。所以谢谢你的建议。
    • @AndreasBartschat 广播意味着整个数据集被“广播”到集群中的所有执行者。这会将整个数据集放在每个执行程序的内存中,而不仅仅是在每个执行程序上选择分区。功能:ds.join(spark.sql.functions.broadcast(dataset), "join_column") => 相关 SO:stackoverflow.com/questions/37487318/… | stackoverflow.com/questions/40320441/… | stackoverflow.com/questions/32435263/…
    猜你喜欢
    • 2021-07-12
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 2018-05-18
    • 1970-01-01
    • 2020-04-15
    相关资源
    最近更新 更多