Я пытаюсь понять внутренности Apache Spark. Интересно, использует ли Spark некоторые механизмы для обеспечения локальности данных при чтении из InputFormat или записи в OutputFormat (или других форматах, поддерживаемых Spark и не полученных из MapReduce).
В первом случае (чтение) я понимаю, что при использовании InputFormat разделители связаны с хостом (или хостами), которые содержат данные, поэтому Spark пытается назначить задачи исполнителям, чтобы уменьшить сеть как можно больше.
В случае написания, как будет работать такой механизм? Я знаю, что технически файл в HDFS можно сохранить в любом node локально и реплицировать на другие два (так что вы используете сеть для двух из 3-х реплик), но если вы подумали о записи в другие системы, например NoSQL базы данных (Cassandra, HBase, others..), такие системы имеют свой собственный способ распространения данных. Есть ли способ сказать искру разбивать RDD таким образом, чтобы оптимизировать локальность данных на основе распределения данных, ожидаемых выходным приемником (целевая база данных NoSQL, видимая изначально или через OutputFormat)?
Я имею в виду среду, в которой узлы Spark и узлы NoSQL находятся в одном и том же физическом компьютере.