Как persist(StorageLevel.MEMORY_AND_DISK()) работает в Spark 3.1 с реализацией Java

Я использую Apache Spark 3.1 с java в кластере GCP Dataproc. И моя структура кода такая.

      Dataset<Row> dataset1 = readSpannerData(SparkSession session, Configuration session.sessionState().newHadoopConf());

Dataset<Row> dataset2 = reading some data from table1 bigtable

Dataset<Row> result1 = dataset1.join(dataset2);
dataset1.persist(StorageLevel.MEMORY_AND_DISK());
dataset2.persist(StorageLevel.MEMORY_AND_DISK()); //once the usage is done I am persisting both datasets

System.out.println(result1.count()); // It throws error in this line 

Точная ошибка пользовательского интерфейса YARN: выберите запрос в таблице гаечных ключей, которую я использую в начале задания, а не из какой-либо большой таблицы. Я сохранил набор данных 1 только после завершения использования.

В моем кластере включено автоматическое масштабирование: не более 250 рабочих узлов, каждый из которых имеет 8 ядер и 1024 ГБ памяти. Он настроен на использование 2 Executors на каждом узле (4 ядра на каждый exe).

Он отлично работал с небольшим объемом данных. Но он выдает ошибку при работе с огромными данными.

Почему в этой ситуации возникает ошибка? Будет ли он проверять родительский набор данных в памяти при использовании результата, рассчитанного на основе уже сохраненного родительского набора данных? Если мы хотим сохранить этот набор данных, то каково использование хранилища IN-Memory?

Как это работает в средах с низким объемом данных? Сколько узлов и как долго набор данных IN-MEMORY будет поддерживаться в искровой задаче? Повлияет ли объем данных на набор данных IN-MEMORY?

Кто-нибудь может прояснить это сомнение?

Заранее спасибо :)

0 ответов

Другие вопросы по тегам