对于虚拟节点,Spark 是否会产生与 Hadoop 相同的开销?

Does Spark incur the same amount of overhead as Hadoop for vnodes?

我刚刚阅读 。从 Cassandra 集群读取时,Spark(特别是 Datastax 的 Cassandra Spark 连接器)是否会产生与 Hadoop 相同的开销?我知道 Spark 比 Hadoop 更频繁地使用线程。

我将分别给出三个答案。对于相当非结构化的答案,我深表歉意,但随着时间的推移,它一直在增加:

之前的回答:

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

Does this also apply to Spark?

不,如果您使用的是官方 DataStax spark-cassandra-connector。它可以在单个 Spark 任务中处理多个令牌 运行ges。仍有一些小的性能影响,但不像 Hadoop 那样大。

生产基准

我们 运行 针对具有 3 个节点的启用 vnode 的 Cassandra (Datastax Enterprise) 数据中心的 Spark 作业。这项工作耗时 9.7 小时。 运行 使用 5 个非 vnode 节点,使用 5 个非 vnode 节点 稍微 更少的数据,几周前用了 8.8 小时。

受控基准

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

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

可以找到基准的所有数字here. All scripts used to run the benchmark (see output.txt for usage) can be found here

我唯一的猜测为什么 "Cold diff" 和 "Hot diff" 之间存在差异(参见电子表格)是 Shark 花了一些时间来创建元数据,但这只是推测。

结论

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

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

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