Давайте сначала разберемся с вопросом @intellect_dp, у вас есть кластер из 5 узлов (здесь термин «узел», я предполагаю машину, которая обычно включает в себя жесткий диск, оперативную память, 4-ядерный процессор и т. Д.), Теперь каждый узел имеет 1 ГБ ОЗУ и у вас есть 10 ГБ файла данных, который распределен таким образом, что 2 ГБ данных находятся на жестком диске каждого узла.Здесь давайте предположим, что вы используете HDFS, и теперь ваш размер блока на каждом узле составляет 2 ГБ.
теперь давайте разберем это:
- размер каждого блока = 2 ГБ
- Объем ОЗУ каждого узла = 1 ГБ
Из-за ленивых вычислений в spark только при запуске «Action API» только он загрузит ваши данные в ОЗУ и выполнит их дальше.
здесь вы говорите, что используете "коллекционирование" как действие API.Теперь проблема заключается в том, что размер ОЗУ меньше размера вашего блока, и если вы обрабатываете его со всей конфигурацией по умолчанию ( 1 блок = 1 раздел ) spark и с учетом того, что больше ни один узел не будет добавлентогда в этом случае возникнет исключение из-за нехватки памяти.
теперь вопрос - есть ли способ, с помощью которого spark может обрабатывать большие объемы данных с данным типом аппаратного обеспечения?
Ответ - да, сначала вам нужно установить минимальный раздел по умолчанию:
val rdd = sc.textFile ("filepath", n)
здесь n будет моим значением по умолчаниюминимальный раздел блока, теперь, когда у нас есть только 1 ГБ ОЗУ, поэтому нам нужно оставить его менее 1 ГБ, поэтому предположим, что мы берем n = 4, теперь, когда ваш размер блока равен 2 ГБ, а минимальный раздел блока равен 4:
размер каждого раздела будет равен = 2 ГБ / 4 = 500 МБ;
теперь спарк обработает эти 500 МБ сначала и преобразует их в СДР, когда придет следующий кусок в 500 МБ,первый случай будет разлитна жесткий диск (учитывая, что вы установили уровень хранения «MEMORY_AND_DISK_ONLY» ).
Таким образом он обработает все ваши 10 ГБ файла данных с заданной конфигурацией аппаратного обеспечения кластера.
Теперь я лично не буду рекомендовать данное аппаратное обеспечение для такого случая, так как оно определенно будет обрабатывать данные, но есть несколько недостатков:
во-первых, это будет включать несколькоОперация ввода-вывода делает весь процесс очень медленным.
Во-вторых, если произойдет задержка при чтении или записи на жесткий диск, вся ваша работа будет отброшена, вы будете разочарованы таким оборудованиемконфигурации.В дополнение к этому вы никогда не будете уверены, что запустят обработку ваших данных и смогут дать результат, когда данные будут увеличиваться.
Так что постарайтесь сохранить очень меньше операций ввода-вывода,Использование вычислительных мощностей искры в памяти с добавлением нескольких ресурсов для повышения производительности.