2016-04-26 1 views
3

У меня есть кластер Cassandra с N узлами на машинах N. Также у меня есть искрообразователь на каждой машине. Для чтения из Кассандры я использую разъем Datastax spark-cassandra. Когда я настраиваю рабочих (автономный режим), я говорю только мастер-хозяин для них. В драйвере я указываю семена Кассандры по свойству spark.cassandra.connection.host. Я видел много презентаций о местонахождении данных. Но я не нашел информации о том, как разъем spark-cassandra выбирает локальный узел для каждого рабочего. Какой алгоритм использует коннектор?Как искра выбирает узел cassandra для чтения?

ответ

0

Разъем предназначен для обозначения токенов. Он обеспечивает локальность данных, добавляя фильтрацию диапазона токенов, например token("partition-key") > ? AND token("partition-key") <= ?, к выполняемому запросу.

Соединитель использует параметр spark.cassandra.input.split.size_in_mb (по умолчанию 64 МБ), чтобы генерировать запросы (token(...) >? AND token(...)< ?), который будет загружать около 64 Мбайт данных в каждом разделе искры.

+0

Но как искрообразователь понимает, что именно он должен читать некоторые данные? Как он узнает локальный узел кассандры? – Cortwave

+0

Драйвер устанавливает начальное соединение с кластером Cassandra. Он обнаруживает топологию Cassandra и токены. Я предполагаю, что он соответствует совпадениям рабочих IP-адресов с IP-адресами Cassandra, чтобы узнать, какой запрос генерировать для рабочих мест для данных. –