Операция искра блокада: Наступательная операция «Искра» по прорыву блокады Ленинграда

Первая «Искра» Победы. Президентская библиотека – о прорыве блокады Ленинграда

«В мутном рассвете зимнего утра прогремел артиллерийский залп. Затем залпы последовали один за другим. Разгорячённые орудийные расчёты работали в гимнастёрках, хотя на улице стоял 20-градусный мороз… Не затихая, бой продолжался почти двое суток. В кровопролитных схватках отвоёвывался каждый метр земли…»

Это – строки из статьи спецкора ТАСС «Блокада прорвана», опубликованной в газете «Тамбовская правда». 18 января 1943 года. Прорыв блокады Ленинграда, продолжавшейся более 16 месяцев. О героизме и мужестве жителей и защитников осаждённого города сказано и написано немало. Кадры кинохроники «Оборона Ленинграда. Блокада Ленинграда» говорят за себя сами. Чёрные провалы разрушенных зданий, скованная льдом «Аврора», «зенитки» у заиндевевшего Исаакиевского собора, заваленные сугробами улицы, очереди за хлебом, брошенные на рельсах трамваи, измождённые ленинградцы, везущие на санках тела умерших, женщины и дети, из последних сил набирающие в проруби воду, автоколонна машин на Дороге жизни, её безжалостный обстрел… И вот, наконец, кадры бегущих в атаку автоматчиков в белых маскхалатах, встреча солдат Ленинградского и Волховского фронтов, ликование бойцов…  

Наступательная операция «Искра» готовилась почти месяц. Командование фронтами было поручено генерал-лейтенанту Леониду Говорову и генералу армии Кириллу Мерецкову. Координировали взаимодействие представители Ставки: генерал армии Георгий Жуков и маршал Клим Ворошилов. Уникальные кадры, запечатлевшие советских военачальников, которые, склоняясь над картами, разрабатывают план операции, также можно увидеть в кинохронике, доступной на портале Президентской библиотеки

Замысел «Искры» сводился к тому, чтобы встречными ударами двух фронтов – Ленинградского с запада и Волховского с востока – разгромить группировку немецко-фашистских войск, удерживавших Шлиссельбургско-Синявинский выступ на южном берегу Ладожского озера. Этот небольшой обледеневший участок, так называемое «бутылочное горло», отделявший осаждённый город от Большой земли, был самой главной надеждой ленинградцев. 12 января, в первый день наступательной операции, нашим войскам удалось прорвать линию обороны противника и захватить плацдарм глубиной до трёх километров. В последующие дни советские ударные части продолжали продвигаться навстречу друг другу. В ходе операции удалось захватить немецкий экспериментальный танк «Тигр». Информация о его боевых характеристиках очень пригодилась во время битвы под Курском, в которой немцы делали ставку на «Тигры». Решающие действия развернулись 18 января. Утром в 9 часов 30 минут на восточной окраине Рабочего посёлка № 1 под Шлиссельбургом части 123-й отдельной стрелковой бригады Ленинградского фронта соединились с частями 372-й стрелковой дивизии Волховского фронта. В 12 часов дня 136-я стрелковая дивизия и 61-я отдельная танковая бригада ворвались в Рабочие поселки № 1 и 5, где соединились с частями 18-й стрелковой дивизии Волховского фронта. В тот же день был полностью освобождён Шлиссельбург. Около полуночи 18 января по радио было передано сообщение о прорыве блокады. Рано утром 19 января город украсили флаги. «По случаю прорыва блокады в Ленинграде праздничное настроение, на фабриках, заводах, в учреждениях проходят митинги. Всю ночь радио извещало мир о радостном известии – прорыве блокады. Особенно радостно это нам, ленинградцам, пережившим суровые месяцы блокады», – писал в своем дневнике Фёдор Григорьевич Ешугов.

После прорыва кольца блокады в беспрецедентно короткие сроки, всего за 18 дней, на отвоёванном у неприятеля участке была построена автодорога протяжённостью 33 километра и сооружён через Неву железнодорожный мост, которые в буквальном смысле вернули в город на Неве жизнь. Уже утром 7 февраля ленинградцы встречали первый состав с Большой земли. До конца года по этим маршрутам было доставлено более 4 миллионов тонн различных грузов. В город завезли уголь, промышленность получила электроэнергию, замороженные заводы и фабрики ожили.

Подвигом ленинградцев и защитников города гордилась не только родная страна. Президент США Франклин Рузвельт от имени своего народа вручил грамоту «городу Ленинграду в память о его доблестных воинах и его верных мужчинах, женщинах и детях, которые, будучи изолированными захватчиком от остальной части своего народа, и несмотря на постоянные бомбардировки и несказанные страдания от холода, голода и болезни, успешно защищали свой любимый город в течение критического периода от 8 сентября 1941 года по 18 января 1943 года…»

Ещё один уникальный документ, представленный на портале Президентской библиотеки – «Телеграмма из Лондона 24 января 1943 в Народный Комиссариат Иностранных Дел». В ней цитируется письмо министра национальной обороны Чехословацкой Республики генерала Ингра, в котором он просит принять «самые искренние поздравления по случаю великолепной победы, которую Красная Армия только что одержала под Ленинградом» и «передать наши горячие поздравления и наши искренние пожелания новых побед как славной Красной Армии, так и великому народу СССР».

Картину блокады города и её прорыва можно увидеть с помощью электронной коллекции Президентской библиотеки «Оборона и блокада Ленинграда», включающей официальные документы, периодические издания, видеоматериалы, кинохронику, воспоминания, дневники и материалы из личных архивов ленинградцев, а также фотохронику ТАСС. На снимках военкоров запечатлены уникальные моменты прорыва блокады Ленинграда в 1943 году: «Волховский фронт. После прямого попадания в фашистскую батарею», «Ленинградский фронт. На освобождённой советской земле», «По следам отступающих немцев», «В боях за прорыв блокады Ленинграда. На улицах освобождённого Шлиссельбурга», «Блокада Ленинграда прорвана!» и другие.

И хотя полностью блокада Ленинграда была снята лишь год спустя, 27 января 1944-го, именно операция «Искра» высветила новый вектор в Великой Отечественной войне – переход стратегической инициативы в руки советских войск, которые с января 1943 года проводили только наступательные операции.

Операция «Искра». Как прорывали блокаду Ленинграда под гимн «Интернационал» | ОБЩЕСТВО

С 12 по 30 января 1943 года силами Ленинградского и Волховского фронтов была проведена наступательная операция «Искра», результатом которой стал прорыв блокады Ленинграда. 

Сейчас до места прорыва блокады от Невы по трассе «Кола» — всего 20 минут на машине. В далеком 1943-м этот путь занял шесть суток кровопролитных, ожесточенных боев, которые приходилось вести в тяжелейших условиях. Мы расскажем о нескольких ярких моментах операции. 

Подготовка к операции «Искра»

К концу 1942 года обстановка под Ленинградом оставалась сложной: сухопутной связи между городом и «большой землей» не было, войска Ленинградского фронта и Балтийский флот были изолированы. К подготовке операции «Искра» командование подошло со всей возможной осмотрительностью.

Расстановка сил под Ленинградом, январь 1943 Фото: Министерство обороны РФ

Даже сейчас, прогуливаясь по набережной Кировска, или стоя на площадке рядом с Государственной районной электростанции №8 (историческое здание сохранилось до сих пор, его восстановили после войны, сейчас там современная ТЭЦ — прим.ред.), понимаешь, насколько высок левый берег Невы.

ГРЭС-8 (справа, дымит трубами; ныне — обычная ТЭЦ) занимала господствующую позицию на правом фланге наступления. В 1943 году стала мощным пунктом фашистской обороны. Фото: АиФ/ Алексей Блахнов

За время своего присутствия, фашистские захватчики его оборудовали линией обороны: заминировали, изрыли окопами и противотанковыми препятствиями. Бойцам требовалось пробежать порядка 400 метров по льду, забраться на высокий берег, прорезать проход в заграждениях из колючей проволоки. Стало понятно, что укрепления противника должны были быть подавлены прямой наводкой, при этом артиллерия не должна разбивать лед.  

«Василий Довиденко, на тот момент капитан и начальник артиллерии одного из наших полков (269-ого — прим. ред.) описывал, что они выходили на берег и лежали в укрытиях, целыми днями наблюдая в бинокль за противоположным берегом: откуда стреляют пулеметы, где амбразуры. Все зарисовывали и фотографировали», — рассказывает  историк, российский военный писатель, директор Военного музея Карельского перешейка Баир Иринчеев

Окопы для орудий, расположенные на берегу, в прямой видимости противника, отрыли заблаговременно: все делали ночью, стук лопат и заступов о мерзлую землю маскировали пулеметной стрельбой, землю тут же уносили в мешках и плащ-палатках. Только эти работы заняли два месяца. Постоянно измерялась толщина льда.

«Готовили и личный состав. Николай Павлович Симоняк, тогда еще полковник, свою дивизию гонял через Неву в Рыбацком по десять раз в полной выкладке, отрабатывая и постановку штурмовых лестниц, и разминирование», — отмечает Иринчеев.  

План проведения операции «Искра» Фото: Министерство обороны РФ

Преодолеть Неву

12 января в 9.30 по переднему краю гитлеровцев открыли огонь 2000 советских орудий, обстрел длился 2 часа 20 минут. 

«По воспоминаниям ветеранов, весь берег был черным: там не осталось ни клочка снега. В секторе обстрела Довиденко было 22 огневые точки противника. И если одна из них открывала огонь, то все орудия начинали бить по ней, — отмечает Баир Климентьевич. — Симоняк сделал очень красивый жест: в береговые окопы он направил музыкальный взвод — в момент атаки музыканты исполнили «Интернационал» — гимн страны. Когда пушки замолчали, оркестр сразу грянул, и бойцы 136-й дивизии, услышав гимн страны, бросились в атаку. И в этот момент выпустили снаряды «Катюши».

Форсирование Невы. Правый фрагмент полотна диорамы «Прорыв блокады Ленинграда». Фото: Музей-заповедник «Прорыв блокады Ленинграда», группа «ВКонтакте»

Фашисты не успели прийти в себя после удара, и 136-я, наступавшая в центре, перебежала Неву практически без потерь.

Волховский фронт

В тыл фашистам должны были ударить силы Волховского фронта. В 11.15 они перешли в наступление. Однако оно развивалось с большим трудом: артиллерия не сумела подавить все огневые точки, а торфяные болота даже зимой не замерзали — увязали и тонули танки, личный состав продвигался медленно. Бои приняли затяжной и ожесточенный характер.

Наступление Волховского фронта. Фото: Министерство обороны РФ

Где-то среди болот и переплетений дорог бился и рядовой пехотинец Владимир Молев.

«Искра» Владимира Молева

«Помню, нас посадили на танки. Мы тогда не знали, что это «Искра», команда была простая: «Прорывайтесь. Не получится в одном месте — прорывайтесь в другом», — вспоминал те дни кавалер ордена Славы, ветеран операции «Искра», Владимир Дмитриевич Молев. — Три Т-34 выехали затемно, бойцы сидели на броне. Мобильная группа выбралась на шоссе Мга-Любань к утру. Внезапно немец ударил пулеметами. Танк начал разворачиваться. Мы, с товарищем моим, Васиным, его прикрываем. Автоматчик соскочил с брони и начал бить в ответ, на звук, наступая. И, похоже, у них затвор заклинило. Один немец побежал, а со вторым наш паренек схватился врукопашную. Немец подмял нашего автоматчика, начал душить. Солдат кричит: «Ребята, помогите!» И мы подбежали. Васин достал штык, ударил немца в горло. Тот хрипит, не умирает, и снег черным кажется. Я сказал: «Не мучай его». И выстрелил прямо через каску. Убил. В первый раз увидел, глаза в глаза, как убил. 

В этот момент по группе неприятель открыл огонь уже с другой стороны, только что спасенный автоматчик упал замертво. Офицер командует наступать и подавить огонь, а нас только двое осталось. Темно, лес, танк не знает, куда целить, пули свистят. И деревья кругом. Васин перебегает впереди, от дерева к дереву, где-то ползком. Я поддерживаю огнем. Идем на выстрелы. Нашли, наконец: слышим, как кто-то вскрикнул, упал. Попали. И вышли к блиндажу, оттуда кричат: «Рус, рус, ауфгебен!» Сдаются. Взяли восемь человек». 

Пленные немцы на улицах Ленинграда. Фото: Министерство обороны РФ

Засада

Следующей же ночью Владимир возвращался на танке на передовую, снова на броне. К утру машина вышла на дорогу Мга-Любань, подтянулись и другие танки. Ожидание команды затягивалось. Только Молев отошел от машины, как она вспыхнула: в нее ударили прямой наводкой.

«Из темноты выскочил «Тигр»: лупил то болванками, то термитными. Танк вспыхнул от первого снаряда. «Тигр» повернулся на месте, и сходу выпалил по второй нашей машине. Командира роты ранило, обожгло, мехвода убило на месте. Последний наш танк дал газу, завертел башней, всаживая в немца снаряд за снарядом. Мы вползли на броню, втащили раненых, а немец все продолжал по нам бить. Меня сшибло: один осколок прошил левое плечо насквозь, второй скользнул по ребрам и застрял под сердцем, — вспоминает собседник.

— Многих тогда убило. На оставшемя танке мы вернулись в часть. Врач шарила щупом у меня под кожей, в поисках осколка – рентгена-то не было. Боли почти не чувствовал, как-то застыло все, онемело. Только звон в голове и пальцы липкие. Так осколок и не нашли: я воевал с ним еще два года».

Территория музея-диорамы «Прорыв блокады Ленинграда». Все почти как тогда: нависшая тишина, падает снег, замерли танки. Фото: Музей-заповедник «Прорыв блокады Ленинграда», группа «ВКонтакте»

Итоги

«По факту, «Искра» стала первым скоординированным полномасштабным ударом изнутри и снаружи блокадного кольца. Стоит отметить и высокий уровень подготовки войск. Как результат — блокада прорвана, противнику нанесен серьезный урон, взяты трофеи, пленные, захвачен новый танк — «Тигр». Создание коридора дало возможность построить железную дорогу — «Дорогу победы», что увеличило объем грузов, доставляемых в Ленинград», — резюмирует Баир Иринчеев.

Прорыв блокады Ленинграда. Встреча войск Ленинградского и Волховского фронтов у Ропши. Фото: Министерство обороны РФ

Важен и психологический фактор — прорыва блокады ждали с 8 сентября 1941 года, это было огромное облегчение и радость для горожан.   Более того, все эти события происходят одновременно со Сталинградской битвой — 1943 год начинался с триумфа. Все вместе это имело огромное значение — именно здесь становится ясно, что войну выиграет Советский Союз. Благодаря успеху операции стало возможно последующее полное снятие блокады». 

Владимир Дмитриевич Молев скончался на 99-м году жизни 25 декабря 2020 года.

Spark: должен ли DataFrameWriter быть блокирующим шагом?

У меня есть данные, разделенные по столбцам (скажем, id ), и я сохранил этот набор данных в каком-то месте. Время от времени я получаю меньший добавочный набор данных с той же структурой, и мне, по сути, приходится обновлять существующие данные на основе моего идентификатора id со столбцом даты , определяя, какая запись является самой новой. (Я не пишу это в том же месте, я сохраняю весь новый блоб в другом месте.)

Я делал это двумя способами: либо группируя в окне, либо выбирая строку с наибольшим значением 9. 0003 дата . Или через dropDuplicates , полагаясь на то, что мои данные упорядочены. (Я бы предпочел использовать первое, но я пробовал разные вещи.)

Одна большая проблема заключается в том, что каждая группа id не является незначительной (несколько гигабайт), поэтому я надеялся, что Spark (с n рабочих) понимал бы, что, поскольку я читаю id -partitioned data и записываю id -partitioned data, он будет обрабатывать n id одновременно и постоянно записывать их в мое хранилище, принимая новые id по мере завершения предыдущие.

К сожалению, похоже, что происходит то, что Spark обрабатывает все мои группы id в одном большом задании (и, естественно, сбрасывает на диск) перед записью чего-либо на диск. Это становится действительно очень медленным.

Вопрос такой: Есть ли способ заставить Spark обрабатывать эти группы и записывать их, как только они будут готовы? Опять же, они разделены, поэтому никакая другая задача не повлияет на мой раздел.


Вот фрагмент кода, который воспроизводит проблему:

 # сначала сгенерировать фиктивные данные
импортировать случайный
от ввода списка импорта
из даты и времени импортировать дату и время, timedelta
из pyspark.sql.functions импортировать desc, col, row_number
из окна импорта pyspark.sql.window
из pyspark.sql.dataframe импортировать DataFrame
def gen_data(n: int) -> Список[кортеж]:
    имена = 'foo, bar, baz, bak'.split(', ')
    return [(random.randint(1, 25), random.choice(имена), datetime.today() - timedelta(days=random.randint(1, 100))) \
          для j в диапазоне (n)]
def get_df(n: int) -> DataFrame:
    вернуть spark.createDataFrame (gen_data (n), ['id', 'имя', 'дата'])
п = 10_000
дф = получить_дф (п)
дд = get_df (n * 10)
df.write.mode('перезаписать').partitionBy('id').parquet('выход/первый')
dd.write.mode('перезаписать').partitionBy('id').parquet('выходов/секунду')
 

d1 и d2 разделены по id , как и результирующий набор данных, но это не отражено в плане:

 w = Window(). partitionBy('id').orderBy(desc( 'свидание'))
d1 = spark.read.parquet('выход/первый')
d2 = spark.read.parquet('выводы/секунда')
d1.union(d2).\
  withColumn('rn', row_number().over(w)).filter(col('rn') == 1).drop('rn').\
  write.mode('перезаписать').partitionBy('id').parquet('выход/окно')
 

Я также пытался явно указать ключ раздела (в остальном код тот же):

 d1 = spark.read.parquet('выход/первый').repartition('id')
d2 = spark.read.parquet('выводы/секунда').repartition('id')
d1.union(d2).\
  withColumn('rn', row_number().over(w)).filter(col('rn') == 1).drop('rn').\
  write.mode('перезаписать').partitionBy('id').parquet('outputs/window2')
 

То же самое с использованием dropDuplicates :

 d1 = spark.read.parquet('outputs/first')
d2 = spark.read.parquet('выводы/секунда')
d1.union(d2).\
  dropDuplicates(subset=['id']).\
  write.mode('перезаписать').partitionBy('id').parquet('outputs/window3')
 

Я также пытался подчеркнуть, что мой союз все еще разделен, используя что-то вроде этого, но снова безрезультатно:

 df. union(d2).repartition('id').\
  .withColumn...
 

Я мог бы перечислить все разделы ( id s), загрузить их один за другим, используя обрезку разделов, дедупликацию и запись. Но это похоже на дополнительный шаблон, который не должен быть необходим. Или это можно сделать через foreach ?


Обновление (2018-03-27):

Оказывается, информация о партиционировании так или иначе присутствует в оконном функционале, потому что когда я фильтрую в самом конце, партиционирование на входах происходит:

 d1 = spark.read.parquet ('выход/первый')
d2 = spark.read.parquet('выводы/секунда')
w = Window().partitionBy('id', 'имя').orderBy(desc('дата'))
d1.union(d2).withColumn('rn', row_number().over(w)).filter(col('rn') == 1).filter(col('id') == 12).explain (Истинный)
 

Результаты в

 == Физический план ==
*(4) Фильтр (isnotnull(rn#387) && (rn#387 = 1))
+- Окно [row_number() определение окна (id#187, имя#185, дата#186 DESC NULLS LAST, selectedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS rn#387], [id#187, имя#185], [дата#186 DESC NULLS LAST]
   +- *(3) Сортировать [id#187 ASC NULLS FIRST, имя#185 ASC NULLS FIRST, дата#186 DESC NULLS LAST], false, 0
      +- Exchange hashpartitioning(id#187, name#185, 200)
         +- Союз
            :- *(1) FileScan parquet [name#185,date#186,id#187] Batched: true, Format: Parquet, Location: InMemoryFileIndex[file:/. ../spark_perf_partitions/outputs..., PartitionCount: 1 , PartitionFilters: [isnotnull(id#187), (id#187 = 12)], PushedFilters: [], ReadSchema: struct
            +- *(2) FileScan паркет [имя#191,дата#192,id#193] Пакетная обработка: true, Формат: Parquet, Расположение: InMemoryFileIndex[файл:/.../spark_perf_partitions/outputs..., PartitionCount: 1, PartitionFilters: [isnotnull(id#193), (id#193 = 12)], PushedFilters: [], ReadSchema: struct
 

Так что он действительно читает только два раздела, по одному на каждый файл. Таким образом, я мог бы вместо зацикливания просто запускать код с одним фильтром за раз (фильтр находится между оконной функцией и .write ). Утомительно и не очень практично, но потенциально быстрее, чем выливать все на диск.

apache spark — Как долго RDD остается в памяти?

спросил

Изменено
3 года, 7 месяцев назад

Просмотрено
4к раз

Учитывая ограниченность памяти, у меня возникло ощущение, что spark автоматически удаляет RDD с каждого узла. Я хотел бы знать, можно ли на этот раз настроить? Как spark решает, когда удалить RDD из памяти

Примечание. Я не говорю о rdd.cache()

  • apache-spark
  • rdd

Я хотел бы знать, можно ли на этот раз настроить? Как искра решает, когда
удалить RDD из памяти

СДР — такой же объект, как и любой другой. Если вы не сохраните/кэшируете его, он будет действовать как любой другой объект управляемого языка и будет собран, как только на него не укажут живые корневые объекты.

Как указывает @Jacek, за часть «как» отвечает объект с именем Средство очистки контекста . В основном, если вам нужны подробности, вот как выглядит метод очистки:

 private def keepCleaning(): Unit = Utils.tryOrStopSparkContext(sc) {
  пока (!остановлено) {
    пытаться {
      ссылка val = Option(referenceQueue.remove(ContextCleaner.REF_QUEUE_POLL_TIMEOUT))
          .map(_.asInstanceOf[CleanupTaskWeakReference])
      // Синхронизировать здесь, чтобы избежать прерывания при остановке()
      синхронизирован {
        reference. foreach {ссылка =>
          logDebug("Получена задача очистки " + ref.task)
          referenceBuffer.remove(ссылка)
          ref.task соответствует {
            case CleanRDD(rddId) =>
              doCleanupRDD (rddId, блокировка = blockOnCleanupTasks)
            case CleanShuffle(shuffleId) =>
              doCleanupShuffle(shuffleId, blocking = blockOnShuffleCleanupTasks)
            case CleanBroadcast(broadcastId) =>
              doCleanupBroadcast (broadcastId, блокировка = blockOnCleanupTasks)
            case CleanAccum(accId) =>
              doCleanupAccum(accId, блокировка = blockOnCleanupTasks)
            case CleanCheckpoint(rddId) =>
              doCleanCheckpoint (rddId)
            }
          }
        }
      } ловить {
        case т. е.: InterruptedException, если остановлено => // игнорировать
        case e: Exception => logError("Ошибка очистки потока", e)
    }
  }
}
 

Если вы хотите узнать больше, я предлагаю просмотреть исходный код Sparks или, что еще лучше, прочитать книгу @Jacek под названием «Освоение Apache Spark» (это указывает на объяснение относительно ContextCleaner )

2

В общем, так Юваль Ицчаков написал «как и любой другой объект», но. ..( всегда есть «но», не так ли? )

В Spark это не так очевидно, так как у нас тасовка блоки (среди других блоков, управляемых Spark). Ими управляют менеджеры блоков, работающие на исполнителях. Их каким-то образом нужно будет уведомить, когда объект в драйвере будет вытеснен из памяти, верно?

Вот где ContextCleaner  выходит на сцену. Именно сборщик мусора Spark Application отвечает за очистку всего приложения от перетасовок, RDD, широковещательных передач, накопителей и RDD с контрольными точками, что направлено на снижение требований к памяти длительно работающих приложений Spark с большим объемом данных.

ContextCleaner работает с драйвером. Он создается и сразу же запускается при запуске SparkContext (и свойство spark.cleaner.referenceTracking Spark включено, что по умолчанию). Он останавливается, когда SparkContext остановлен.

Вы можете увидеть, как это работает, выполнив дамп всех потоков в приложении Spark, используя jconsole или jstack . ContextCleaner использует поток демона Spark Context Cleaner , который очищает состояния RDD, перемешивания и широковещания.

Вы также можете увидеть его работу, включив уровни ведения журнала INFO или DEBUG для регистратора org.apache.spark.ContextCleaner . Просто добавьте следующую строку в conf/log4j.properties :

 log4j.logger.org.apache.spark.ContextCleaner=DEBUG
 

Измерение влияния сборщика мусора

Первым шагом в настройке сборщика мусора является сбор статистики о том, как часто происходит сборка мусора и сколько времени затрачивается сборщик мусора. Это можно сделать, добавив -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps к параметрам Java. (Информацию о передаче параметров Java заданиям Spark см. в руководстве по настройке.) При следующем запуске задания Spark вы увидите сообщения, распечатываемые в журналах рабочего процесса каждый раз, когда происходит сборка мусора. Обратите внимание, что эти журналы будут находиться на рабочих узлах вашего кластера (в файлах stdout в их рабочих каталогах), а не в вашей программе-драйвере.

Расширенная настройка сборщика мусора

Для дальнейшей настройки сборки мусора нам сначала нужно понять некоторые основные сведения об управлении памятью в JVM:

Пространство кучи Java разделено на два региона: молодой и старый. Поколение Young предназначено для хранения объектов с коротким сроком службы, а поколение Old предназначено для объектов с более длительным сроком службы.

Молодое поколение делится на три региона [Эдем, Выживший1, Выживший2].

Упрощенное описание процедуры сборки мусора: когда Eden заполнен, в Eden запускается второстепенный GC, и объекты, живые из Eden и Survivor1, копируются в Survivor2. Регионы выживших меняются местами. Если объект достаточно старый или Survivor2 заполнен, он перемещается в Старый. Наконец, когда Old близок к заполнению, вызывается полный GC.

Согласно документу об отказоустойчивом распределенном наборе данных —

Наши рабочие узлы кэшируют разделы RDD в памяти как
Java-объекты.