我有一个应用程序可以触发 spark master 的工作。但是当我检查执行作业的 IP 地址时,它显示的是我的应用程序 IP,而不是 spark worker IP。因此,据我了解,对 RDD 的调用会产生一个火花工作者来工作。
但我的问题是这个。
CassandraSQLContext c = new CassandraSQLContext(sc);
QueryExecution q=c.executeSql(cqlCommand); //-----1
q.toRDD().count(); //----2
我看到工人为 2 做某事,但为 1 什么也没做。
那么这是否意味着从 Cassandra 获取并在 1 中创建 RDD 都在应用程序中完成?
如果是这样,2 确实会触发两个工人的工作。在这种情况下,它会再次从 Cassandra 获取并处理计数吗?
有人可以澄清一下吗?
编辑
- 按照提供的答案,如果计数调用触发了工作人员的功能,那么在本地创建 RDD 的 executeSQL 有什么用?这是否通过查询创建数据的 Cassandra 数据集?如果是这种情况,来自 Cassandra 的查询会发生两次?
2.. 如果 spark 自动将 Cassandra 的 10 个分区的计算分配给 4 个 worker,谁来汇总结果?大师只是在做分配。那么它也聚合吗?
如果我不缓存RDD并进行另一个计数操作,会发生什么?将激发尝试使用先前用于特定分区的相同工作人员并附加到该节点中的结果 RDD。我认为它必须查询 Cassandra 才能再次获取此分区数据?你能提供一些澄清吗?
如果我缓存我的 RDD,会发生什么?RDD存储在worker中,它将用于所有操作?在那种情况下,这与我们将数据集存储在内存中并进行处理有何不同?让我知道这是否也是正确的。