Данные в памяти для RDD

Я использую Spark, и мне интересно, как именно работают RDD. Я понимаю, что RDD - это указатель на данные. Если я пытаюсь создать RDD для файла HDFS, я понимаю, что RDD будет указателем на фактические данные в файле HDFS.

Чего я не понимаю, так это того, где данные хранятся в памяти. Когда задача отправляется на рабочий узел, сохраняются ли данные для определенного раздела в памяти на этом рабочем узле? Если да, то что происходит, когда раздел RDD хранится в памяти на рабочем узле 1, но рабочий узел 2 должен выполнить задачу для того же раздела RDD? Общается ли рабочий узел 2 с рабочим узлом 1, чтобы получить данные для раздела и сохранить их в своей памяти?


person RagHaven    schedule 17.04.2015    source источник
comment
В память, наверное? Не уверен, насколько более конкретным является ожидаемый ответ. Возможно, это: в зарезервированном пространстве кучи jvm, на котором запущен процесс-исполнитель Spark.   -  person maasg    schedule 17.04.2015
comment
Извините, похоже, мой обновленный вопрос не был опубликован. Я внес изменения в него, но я предполагаю, что что-то пошло не так. Пожалуйста, дайте мне время, чтобы исправить это.   -  person RagHaven    schedule 17.04.2015


Ответы (1)


В принципе, задачи распределяются между исполнителями, каждый из которых представляет свой отдельный фрагмент данных (например, из файлов или папок HDFS). Данные для задачи загружаются в локальную память для этого исполнителя. Несколько преобразований могут быть объединены в одну и ту же задачу.

Однако если преобразованию необходимо получить данные от более чем одного исполнителя, будет создан новый набор задач, а результаты предыдущих задач будут перетасованы и перераспределены между исполнителями. Например, многие преобразования *byKey будут перетасовывать все данные через HDFS, чтобы исполнители могли выполнять второй набор задач. Количество перемешанных данных и объем данных имеют решающее значение для производительности Spark.

person Daniel Langdon    schedule 17.04.2015
comment
Не могли бы вы указать мне место в исходном коде, где это происходит? - person RagHaven; 17.04.2015
comment
В коде это повсюду! Возможно, это поможет вам: blog.cloudera.com/blog/2015/03/ - person Daniel Langdon; 17.04.2015