2016-08-09 3 views
0

Я пытаюсь прочитать 5 терабайт json в RDD пользовательских объектов, используя json4s. Есть 50 000 файлов по 100 МБ каждый. По какой-то причине, если я установил размер своего исполнителя на 16G, я получаю следующую ошибку.Spark - Task Scheduler Ошибка при разборе JSON

ERROR TaskSchedulerImpl: Lost executor foo on bar: Remote RPC client 
disassociated. Likely due to containers exceeding thresholds, or network 
issues. Check driver logs for WARN messages. 

Мой код выглядит следующим образом:

val input = sc.textFile(inPath) 
val operations = input.mapPartitions(row => { 
     row.flatMap(record => { 
     try { 
      implicit val formats = DefaultFormats // formats not serializable 
      Some(parse(record).extract[MyClass]) 
     } catch { 
      case e: Exception => None 
     } 
     }) 
    }) 

Я не получаю эту проблему при чтении в сотни гигабайт данных. Если я увеличиваю память исполнителя до 55G, он работает, но это кажется неэффективным. Каждый заархивированный файл составляет всего 100 МБ, возможно, не более 1 Gig unzipped. Я бы подумал, что смогу выкрутить тонну исполнителей 8 гигабайт или даже 4 гигабайта, чтобы прочитать данные.

+0

Искры в памяти вычислений. Поэтому вам потребуется много памяти, если у вас много данных. –

+0

Не удалось ли это сделать через других исполнителей? Зачем вам нужно больше памяти для одного исполнителя? – Luke

+0

В чем причина этой ошибки? Это вызвано переполнением «прямой буферной памяти» или некоторым переполнением раздела памяти? Сообщение об ошибке, которое вы указали, может возникнуть в случае возникновения нескольких проблем. Предоставьте полную информацию об ошибке. –

ответ

0

Оказывается, это произошло из-за слишком низкой памяти. На 16 концертах я установил его на 6000.

--conf spark.mesos.executor.memoryOverhead=6000