Как spark загружает данные в память - PullRequest
2 голосов
/ 03 апреля 2019

У меня полная путаница в процессе искрового исполнения.Я ссылался на майские статьи и учебные пособия, которые никто не обсуждает подробно.Возможно, я неправильно понимаю искру.Пожалуйста, исправьте меня.

У меня есть файл размером 40 ГБ, распределенный по 4 узлам (по 10 ГБ каждый узел) кластера из 10 узлов.Когда я скажу spark.read.textFile("test.txt") в своем коде, загрузит ли он данные (40 ГБ) со всех 4 узлов в программу драйвера (главный узел)?Или этот СДР будет загружен во все 4 узла отдельно.В этом случае каждый узел RDD должен содержать 10 ГБ физических данных, не так ли?И весь RDD содержит 10 ГБ данных и выполняет задачи для каждого раздела, то есть 128 МБ в Spark 2.0.И, наконец, перетасовывает вывод в программу драйвера (мастер-узел)

И я читаю где-то "numbers of cores in Cluster = no. of partitions", значит ли это, что искра переместит разделы одного узла на все 10 узлов для обработки?

1 Ответ

4 голосов
/ 03 апреля 2019

Spark не должен считывать весь файл в память сразу. Этот файл размером 40 ГБ разделен на множество разделов размером 128 МБ (или любого размера раздела). Каждый из этих разделов является задачей обработки. Каждое ядро ​​будет одновременно работать только с одной задачей, причем предпочтение отдается работе с задачами, в которых раздел данных хранится на одном и том же узле. Только тот раздел 128 МБ, с которым ведется работа, должен быть прочитан, остальная часть файла не читается. Как только задача завершается (и производит некоторый вывод), тогда считываются 128 МБ для следующей задачи, и данные, считанные для первой задачи, могут быть освобождены из памяти. Из-за этого в память необходимо загружать только небольшой объем данных за один раз, а не весь файл сразу.

Также, строго говоря, spark.read.textFile("test.txt") ничего не делает. Он не читает данных и не обрабатывает. Он создает СДР, но СДР не содержит никаких данных. А СДР - это просто план выполнения. spark.read.textFile("test.txt") объявил, что файл test.txt будет считан используемым в качестве источника данных, если и когда RDD оценивается, но ничего не делает самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...