2016-09-30 2 views
0

У меня есть искровой приложение, которое считывает файл с 100 миллионов строк (каждая строка кода, такие как US1.234.567B1) и получает некоторые образцы из него следующим образом:Спарк OutOfMemoryError при приеме большого входного файла

val codes = sc.textFile("/data/codes.txt") 

    def getPattern(code: String) = code.replaceAll("\\d", "d") 

    val patterns: RDD[(String, Int)] = codes 
    .groupBy(getPattern) 
    .mapValues(_.size) 
    .sortBy(- _._2) 

    patterns 
    .map { case (pattern, size) => s"$size\t$pattern" } 
    .saveAsTextFile("/tmp/patterns") 

Я запускаю это на master = local [*], и он не работает с java.lang.OutOfMemoryError: GC overhead limit exceeded.

Почему?

Я думал, что Spark может обрабатывать любые размеры ввода, если на нем достаточно места на жестком диске.

+1

две документы, объясняющие, почему группиЙ следует избегать: https://databricks.gitbooks.io/databricks-spark-knowledge-base/content/best_practices/prefer_reducebykey_over_groupbykey.html https://github.com/awesome -spark/искровые подводные камни –

ответ

2

Длинные Короче вы пытаетесь использовать Спарк антишаблоном:

.groupBy(getPattern) 
.mapValues(_.size) 

, которые легко могут быть выражены, например, как:

codes.keyBy(getPattern).mapValues(_ => 1L).reduceByKey(_ + _).sortBy(_._2, false) 

Я думал, что искра может обрабатывать любой размер ввода.

Обычно это может быть уменьшено до тех пор, пока вы не сделаете это невозможным. group/groupByKey на RDD создают локальные коллекции для каждого ключа. У каждого из них есть память одного исполнителя.

1

Да, искра может обрабатывать очень большие файлы, но блок параллелизма является исполнителем. «Ошибка в памяти» - это потому, что память исполнительного механизма искры или память искрового драйвера недостаточны. Попробуйте увеличить значение spark.executor.memory и spark.driver.memory, а также настройте количество исполнителей перед отправкой задания.

Вы можете установить эти значения в файле свойств или в SparkConf или непосредственно в командной строке во время искра-submit. Ссылка http://spark.apache.org/docs/latest/configuration.html

Смежные вопросы