Spark是否会产生与Hadoop for vnodes相同的开销?

时间:2015-04-27 12:02:55

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

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

2 个答案:

答案 0 :(得分: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,vnodes的平均(非常稳定)开销对于冷Shark查询执行约为28秒,对于热执行则为17秒。延迟差异通常不随数据大小而变化。

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

我唯一猜到为什么"冷差异"和#34; Hot diff" (参见电子表格)是Shark花了一些时间来创建元数据,但这只是猜测。

结论

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

答案 1 :(得分:2)

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

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