首页 文章

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

提问于
浏览
1

我试图了解cassandra和spark如何协同工作,尤其是当数据跨节点分布时 .

我使用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运行以下查询时,我看到node1上的spark worker正在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

    我想你正试图理解spark和Cassandra之间的相互作用以及Cassandra中的数据分布 .

    基本上从spark应用程序,将请求Cassandra节点之一,该节点充当该特定客户机请求的协调器 . More details可以在这里找到 .

    此外data partitioning and replication将仅由Cassandra系统负责 .

相关问题