spark worker如何在cassandra集群中分配负载?
我试图了解卡桑德拉和斯帕克是如何合作的,尤其是在 数据分布在各个节点上 我有cassandra+spark设置,带有使用DSE的两节点群集 模式是spark worker如何在cassandra集群中分配负载?,cassandra,apache-spark,datastax,partition,Cassandra,Apache Spark,Datastax,Partition,我试图了解卡桑德拉和斯帕克是如何合作的,尤其是在 数据分布在各个节点上 我有cassandra+spark设置,带有使用DSE的两节点群集 模式是 CREATE KEYSPACE foo WITH replication = {'class': 'SimpleStrategy','replication_factor':1} CREATE TABLE bar ( customer text, start timestamp, offset bigint, dat
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”的特定客户数据处于打开状态
节点1和“2014-05-26”为节点2
当我从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()
我在想,在这个过程中,应该同时使用两个节点
地图分割阶段。我遗漏了什么。我想你是在试图理解spark和Cassandra之间的相互作用以及Cassandra中的数据分布 基本上,从spark应用程序,将向Cassandra节点之一发出请求,该节点充当特定客户端请求的协调器。可以在这里找到
此外,将仅由Cassandra系统负责。这是因为复制系数。复制系数为1表示一个节点上每行只有一个副本。但这两个日期在不同的节点上。