Подтвердить что ты не робот

Использует ли Spark местность данных?

Я пытаюсь понять внутренности Apache Spark. Интересно, использует ли Spark некоторые механизмы для обеспечения локальности данных при чтении из InputFormat или записи в OutputFormat (или других форматах, поддерживаемых Spark и не полученных из MapReduce).

В первом случае (чтение) я понимаю, что при использовании InputFormat разделители связаны с хостом (или хостами), которые содержат данные, поэтому Spark пытается назначить задачи исполнителям, чтобы уменьшить сеть как можно больше.

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

Я имею в виду среду, в которой узлы Spark и узлы NoSQL находятся в одном и том же физическом компьютере.

4b9b3361

Ответ 1

Если вы используете Спарк и Кассандру на одной и той же физической машине, вы должны проверить spark-cassandra-connector Это обеспечит расположение данных как для чтения и пишет.

Например, если вы загружаете таблицу Кассандры в РДУ, соединитель будет всегда пытаться делать операции на этом РДЕ локально на каждом node. И когда вы сохраняете RDD в Cassandra, соединитель также попытается сохранить результаты локально, а также.

Это предполагает, что ваши данные уже сбалансированы в вашем кластере Cassandra. Если ваш PartitionKey не выполнен правильно, вы все равно останетесь с неуравновешенным кластером.

Также помните о том, чтобы перетасовывать задания на Spark. Например, если вы выполняете ReduceByKey на РДУ, вы в конечном итоге потоковой передачи данных по сети в любом случае. Поэтому всегда тщательно планируйте эти задания.