Я пытаюсь запустить Spark в локальном режиме, используя Spring boot, который в конечном итоге будет развернут как контейнер Docker. Как правильно установить память драйвера? Страница конфигурации spark https://spark.apache.org/docs/latest/configuration.html говорит, что для клиентского режима это должно быть до запуска JVM при запуске во встроенном режиме. Как можно передать эти параметры?
Файл конфигурации Spark, которым я являюсь используя.
@Configuration
public class SparkConfiguration {
private static final Logger LOGGER = Logger.getLogger(SparkConfiguration.class);
@Value("${config.spark.worker.threads}")
private String workerThreads;
@Value("${config.spark.driver.memory}")
private String driveryMemory;
@Value("${config.spark.sql.shuffle.partitions}")
private String shuffleParitions;
@Bean
public SparkSession sparkSession() {
// Logger.getLogger("org").setLevel(Level.OFF);
// Logger.getLogger("akka").setLevel(Level.OFF);
SparkSession sparkSession = SparkSession.builder()
.master(getWorkerThreadCount())
.appName("API-Spark")
/* Spark UI Config */
.config("spark.ui.enabled", true)
.config("spark.ui.killEnabled", true)
.config("spark.ui.retainedJobs", 100)
.config("spark.ui.retainedStages", 100)
.config("spark.ui.retainedTasks", 1000)
/* Spark performance configs */
.config("spark.driver.memory", driveryMemory)
.config("spark.sql.shuffle.partitions",shuffleParitions)
.config("spark.sql.crossJoin.enabled",true)
.getOrCreate();
Map<String, String> all = sparkSession.conf().getAll();
LOGGER.info(" Spark runtime config "+all);
LOGGER.info("Started Spark App ::: UI at : " + sparkSession.sparkContext().uiWebUrl().get());
return sparkSession;
}
private String getWorkerThreadCount() {
return "local[WORKER_THREAD_COUNT]".replace("WORKER_THREAD_COUNT", workerThreads);
}
}