2016-04-26 37 views
3

我有N台机器上有N个节点的Cassandra群集。另外我在每台机器上都有spark工作人员。对于Cassandra的阅读,我使用的是Datastax spark-cassandra连接器。当我设置工作人员(独立模式)时,我只说他们的主人主人。在驱动程序中,我通过spark.cassandra.connection.host属性指定了Cassandra种子。我看到很多关于数据局部性的介绍。但是我没有发现关于spark-cassandra连接器如何为每个工作人员选择本地节点的信息。连接器使用哪种算法?火花如何选择cassandra节点进行读取?

回答

0

连接器具有令牌感知功能。它通过向您运行的查询添加令牌范围筛选(例如token("partition-key") > ? AND token("partition-key") <= ?)来确保数据局部性。

连接器使用的参数spark.cassandra.input.split.size_in_mb(默认为64MB),以生成查询(token(...) >? AND token(...)< ?)将加载关于在每个火花分区中的数据的64MB。

+0

但是,spark工作人员如何理解它应该读取一些数据?它如何识别本地cassandra节点? – Cortwave

+0

驱动程序正在建立与Cassandra群集的初始连接。它发现了Cassandra拓扑和令牌分布。我假设它接下来将工作IP与Cassandra IP进行匹配,以知道要向哪些工作人员生成数据局部性的查询。 –