Как 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?
Кто-нибудь может прояснить это сомнение?
Заранее спасибо :)