Я создал автономный кластер Spark (2.1.1) на своих локальных машинах с 9 ядрами / 80 ГБ на каждой машине (всего 27 ядер / 240 ГБ оперативной памяти)
У меня есть образец искровой работы, который суммирует все числа от 1 до x, это код:
package com.example
import org.apache.spark.sql.SparkSession
object ExampleMain {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder
.master("spark://192.168.1.2:7077")
.config("spark.driver.maxResultSize" ,"3g")
.appName("ExampleApp")
.getOrCreate()
val sc = spark.SparkContext
val rdd = sc.parallelize(Lisst.range(1, 1000))
val sum = rdd.reduce((a,b) => a+b)
println(sum)
done
}
def done = {
println("\n\n")
println("-------- DONE --------")
}
}
При запуске приведенного выше кода я получаю результаты через несколько секунд, поэтому я запустил код, чтобы суммировать все числа от 1 до 1B (1000000000), и затем я получаю предел накладных расходов GC.
Я читал, что искра должна пролить память на жесткий диск, если памяти недостаточно. Я пытался поиграть с конфигурацией кластера, но это не помогло.
Driver memory = 6G
Number of workers = 24
Cores per worker = 1
Memory per worker = 10
Я не разработчик и не разбираюсь в Scala, но хотел бы найти решение для запуска этого кода без проблем с сборкой мусора.
По запросу @philantrovert я добавляю свою команду spark-submit
/opt/spark-2.1.1/bin/spark-submit \
--class "com.example.ExampleMain" \
--master spark://192.168.1.2:6066 \
--deploy-mode cluster \
/mnt/spark-share/example_2.11-1.0.jar
Кроме того, мои spark / conf следующие:
- файл slaves содержит 3 IP-адреса моих узлов (включая главный)
- spark-defaults contain:
- spark.master spark://192.168.1.2:7077
- spark.driver.memory 10g
- spark-env.sh contain:
- SPARK_LOCAL_DIRS= shared folder among all nodes
- SPARK_EXECUTOR_MEMORY = 10 ГБ
- SPARK_DRIVER_MEMORY = 10 ГБ
- SPARK_WORKER_CORES = 1
- SPARK_WORKER_MEMORY = 10 ГБ
- SPARK_WORKER_INSTANCES = 8
- SPARK_WORKER_DIR = общая папка среди всех узлов
- SPARK_WORKER_OPTS = "- Dspark.worker.cleanup.enabled = true"
Спасибо
spark-submit
команду к вопросу? - person philantrovert   schedule 28.11.2017--conf "spark.driver.maxResultSize=3G"
в вашу искру-отправку вместо вашей программы. Я не работал с кластерами Spark Standalone, но думаю, что драйвер запустится до того, как сможет выполнитьconf.set(..)
в вашей программе. Я могу быть не прав. - person philantrovert   schedule 28.11.2017val rdd = spark.range(1000000000L).rdd
? Я думаю, что создание списка scala с 1 миллиардом записей является проблемой здесь ... - person Raphael Roth   schedule 28.11.2017