2016-06-22 6 views
0

Я вызываю собственные функции на основе JNI в операциях карты Spark.Медленная работа Spark на JNI на EC2

// Read each input from HDFS or S3 
val A = info.sc.broadcast(fs.read(0, 4)) // 400 MB 
val B = info.sc.broadcast(fs.read(1, 4)) // 400 MB 

// Generate RDD 
val index = info.sc.parallelize(0.toLong to SIZE-1 by 1) 

// Perform Map operations --> the problematic part 
val res = index.map{ x => nativeFunction(x, A, B) }.persist 

// Fake action for profiling purpose 
res.foreachPartition{ x => } 

// Get the results back and write them in the HDFS or S3 
val output = res.reduce(Util.bitor) 
fs.write(2, output) 

Когда я бегу это на EC2, выполнение отображения занимает около 4x больше, чем когда я запускаю его на локальном кластере с тем же partitionning и количество ядер.

Когда я запускаю функцию native вне Spark, выполнение эквивалентно, что доказывает, что это не из-за виртуализации EC2.

Любая идея причины?

+0

Я только обнаружил, что проблема не возникает, если Спарк руки я группу (то есть без искрового ec2 сценария) на EC2 используя Ubuntu 14.04 AMI – elldekaa

ответ

0

Решение было слишком изменится на более поздний Linux, образ