spark工作者如何在cassandra集群中分配负载?

时间:2015-02-19 06:18:22

标签: cassandra apache-spark datastax partition

我试图了解卡桑德拉和火花是如何协同工作的,特别是当时 数据分布在各个节点上。

我使用DSE使用两个节点集群进行cassandra + spark设置。

架构是

CREATE KEYSPACE foo WITH replication = {'class': 'SimpleStrategy','replication_factor':1}

CREATE TABLE bar (
    customer text,
    start timestamp,
    offset bigint,
    data blob,
    PRIMARY KEY ((customer, start), offset)
)

我用大量的测试数据填充了表格。后来想出了钥匙 在“nodetool getendpoints”命令的帮助下,它位于不同的节点上。 例如,在我的情况下,日期为“2014-05-25”的特定客户数据已启用 node1和'2014-05-26'是node2。

当我从spark shell运行以下查询时,我看到了spark worker node1正在mapPartitions阶段运行任务。

csc.setKeyspace("foo")
val query = "SELECT cl_ap_mac_address FROM bar WHERE customer='test' AND start IN ('2014-05-25')"
val srdd = csc.sql(query)
srdd.count()

并且对于以下查询,node2上的spark worker正在运行该任务。

csc.setKeyspace("foo")
val query = "SELECT cl_ap_mac_address FROM bar WHERE customer='test' AND start IN ('2014-05-26')"
val srdd = csc.sql(query)
srdd.count()

但是当我给两个日期时,只有一个节点工作者被利用。

csc.setKeyspace("foo")
val query = "SELECT cl_ap_mac_address FROM bar WHERE customer='test' AND start IN ('2014-05-25', '2014-05-26')"
val srdd = csc.sql(query)
srdd.count()

我当时认为这应该同时使用两个节点 mapPartitions阶段。我错过了什么。

1 个答案:

答案 0 :(得分:0)

我认为您正在尝试理解Spark和Cassandra之间的相互作用以及Cassandra中的数据分布。

基本上来自spark应用程序,将向Cassandra节点之一发出请求,该节点充当该特定客户端请求的协调者。More details可以在此处找到。

只有Cassandra系统才会照顾data partitioning and replication