Я использую Zeppelin для чтения avro-файлов размером в ГБ и записи в миллиардах. Я пытался использовать 2 экземпляра и 7 экземпляров на AWS EMR, но производительность кажется одинаковой. С экземплярами 7 это все еще занимает много времени. Код:
val snowball = spark.read.avro(snowBallUrl + folder + prefix + "*.avro")
val prod = spark.read.avro(prodUrl + folder + prefix + "*.avro")
snowball.persist()
prod.persist()
val snowballCount = snowball.count()
val prodCount = prod.count()
val u = snowball.union(prod)
Output:
snowballCount: Long = 13537690
prodCount: Long = 193885314
А ресурсы можно посмотреть здесь:
Для параметра spark.executor.cores установлено значение 1. Если я попытаюсь изменить этот номер, Zeppelin не будет работать и spark context выключится. Было бы здорово, если бы кто-то мог немного подсказать, чтобы улучшить производительность.
Изменить: я проверил, сколько разделов он создал:
snowball.rdd.partitions.size
prod.rdd.partitions.size
u.rdd.partitions.size
res21: Int = 55
res22: Int = 737
res23: Int = 792
Integer.MAX_VALUE
. - person vvg   schedule 22.05.2018No Spark shuffle block can be larger than 2GB (Integer.MAX_VALUE bytes) so you need more / smaller partitions.
Пробовали ли вы увеличить количество разделов в RDD u с помощью функцииrepartition
? - person jose.goncabel   schedule 22.05.2018persist
, тогда как ваши данные не были изменены? - person Setop   schedule 23.05.2018