【问题标题】:Does Spark incur the same amount of overhead as Hadoop for vnodes?Spark 是否会产生与 vnode 的 Hadoop 相同数量的开销?
【发布时间】:2015-07-05 21:00:30
【问题描述】:

我刚刚读到https://stackoverflow.com/a/19974621/260805。从 Cassandra 集群读取数据时,Spark(特别是 Datastax 的 Cassandra Spark 连接器)是否会产生与 Hadoop 相同的开销?我知道 Spark 比 Hadoop 更多地使用线程。

【问题讨论】:

  • 运行一个较小的非科学基准来测试这一点。如果没有其他人回应,我至少会分享我的发现。

标签: apache-spark cassandra-2.0 datastax-enterprise


【解决方案1】:

在连接器中使用和不使用 vnode 的性能应该基本相同。使用 hadoop,每个 vnode 拆分都会生成它自己的任务,这会产生大量开销。

使用 Spark,任务包含来自多个 vnode 的令牌范围,并合并为单个任务,整体任务开销较低。存在一个轻微的局部性问题,即很难为 C* 集群中具有较小数据量的所有节点获得平衡的任务数量。这个问题正在 SPARKC-43 中解决。

【讨论】:

  • 感谢 RussS!由于您是 Datastax 大佬,您可能会发现 stackoverflow.com/a/29942469/260805 中提到的基准很有趣。
  • Shark 实际上会以不同于普通 Spark 操作的方式处理 vnode,因为它在后台使用 Hadoop 输入格式。它的性能将非常接近旧的 Hadoop vnodes 性能,除了每个任务的开销会少得多。感谢您发布您的结果。
【解决方案2】:

我将给出三个不同的答案。对于这个相当非结构化的答案,我深表歉意,但随着时间的推移,它一直在积累:

之前的回答:

这是一个可能的答案:Why not enable virtual node in an Hadoop node?。我引用:

这是否也适用于 Spark?

不,如果您使用的是官方 DataStax spark-cassandra-connector。它可以在单个 Spark 任务中处理多个令牌范围。仍然有一些轻微的性能影响,但没有 Hadoop 那么大。

生产基准

我们针对具有 3 个节点且支持 vnode 的 Cassandra (Datastax Enterprise) 数据中心运行了 Spark 作业。这项工作耗时 9.7 小时。使用 5 个非 vnode 节点,在 少的数据上运行相同的作业,几周前需要 8.8 小时。

受控基准

为了进一步测试开销,我们在单节点集群中的 Datastax Enterprise 节点上运行了一个受控基准。对于 vnode 启用/禁用,节点是 1) 重置,2) X 行写入,然后 3) Shark 中的SELECT COUNT(*) FROM emp 执行了几次以获得冷与热缓存时间。 X 测试为 10^{0-8}。

假设 Shark 不以任何方式处理 vnode,vnode 的平均(相当稳定)开销对于冷 Shark 查询执行约为 28 秒,对于热执行则为 17 秒。延迟差异通常不随数据大小而变化。

可以在here 找到所有用于基准测试的数字。用于运行基准测试的所有脚本(请参阅output.txt 了解用法)可以在here 找到。

我唯一猜测为什么“冷差异”和“热差异”(参见电子表格)之间存在差异是 Shark 需要一些时间来创建元数据,但这只是猜测。

结论

我们的结论是 vnode 的开销是 13 到 30 秒之间的恒定时间,与数据大小无关。

【讨论】:

    猜你喜欢
    • 2011-01-02
    • 2017-04-28
    • 2021-09-29
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 2010-10-07
    • 2017-01-11
    相关资源
    最近更新 更多