我刚刚读到https://stackoverflow.com/a/19974621/260805.Spark(特别是Datastax的Cassandra Spark连接器)在从Cassandra集群读取时会产生与Hadoop相同的开销吗?我知道Spark比Hadoop更频繁地使用线程。
连接器中有vnode和没有vnode的性能应该基本相同。使用hadoop,每个vnode拆分都会生成自己的任务,这会产生大量开销。
使用Spark,任务包含多个vnode的令牌范围,并合并到一个任务中,总体任务开销更低。存在一个轻微的局部性问题,即对于数据大小较小的C*集群中的所有节点,很难获得平衡数量的任务。这个问题正在SPARKC-43中解决。
我将给出三个单独的答案。我为这个相当无条理的答案道歉,但随着时间的推移,它一直在积累:
之前的回答:
这里有一个潜在的答案:为什么不在Hadoop节点中启用虚拟节点?。我引用:
这也适用于Spark吗?
否,如果您使用的是官方的DataStax spark cassandra连接器。它可以在一个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,则对于冷Shark查询执行,vnode的平均(相当稳定)开销为~28秒,对于热执行,为17秒。延迟差异通常不会随数据大小而变化。
该基准的所有数字都可以在这里找到。所有用于运行基准测试的脚本(有关用法,请参阅output.txt
)都可以在这里找到。
我唯一的猜测是,为什么"冷差异"one_answers"热差异"(见电子表格)之间有区别,是Shark花了一些时间来创建元数据,但这只是猜测。
结论
我们的结论是,vnode的开销是13到30秒之间的恒定时间,与数据大小无关。