Я пытаюсь прочитать 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 гигабайта, чтобы прочитать данные.
Искры в памяти вычислений. Поэтому вам потребуется много памяти, если у вас много данных. –
Не удалось ли это сделать через других исполнителей? Зачем вам нужно больше памяти для одного исполнителя? – Luke
В чем причина этой ошибки? Это вызвано переполнением «прямой буферной памяти» или некоторым переполнением раздела памяти? Сообщение об ошибке, которое вы указали, может возникнуть в случае возникновения нескольких проблем. Предоставьте полную информацию об ошибке. –