2016-04-26 36 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進行匹配,以知道要向哪些工作人員生成數據局部性的查詢。 –