2016-06-24 20 views
0

Ich erstellte Hive-Tabelle mit 10 GB CSV-Datei mit Farbton. Dann versucht, SQL-Abfrage auszuführen. Während der Verarbeitung von Daten spricht man lange Zeit mehr als 2 Stunden. Kann mir jemand sagen, ob das das Funkenproblem ist? oder ich habe etwas falsch gemacht.
Ich versuchte alle möglichen Kombinationen wie die Anzahl der Executoren, Kerne und Executors Speicher ändern.Warum ist die Quantilberechnung mit hiveContex in Spark sehr langsam?

 
--driver-memory 10g\ 
--num-executors 10\ 
--executor-memory 10g\ 
--executor-cores 10\ 

I getestet durch num-Vollstrecker, wie 10, und gleiche 15,20,50,100 für Gedächtnis und Kern zu ändern.
Über den Cluster gesprochen hat es 6 Knoten 380+ Kerne und 1 TB Speicher.

 
My SQL query: 
select 
percentile_approx(x1, array(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9)) as x1_quantiles, 
percentile_approx(x2, array(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9)) as x2_quantiles, 
percentile_approx(x3, array(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9)) as x3_quantiles 
from mytest.test1 

Code ist ziemlich einfach

val query= args(0) 

    val sparkConf= new SparkConf().setAppName("Spark Hive") 

    val sc = new SparkContext(sparkConf) 
    val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc) 
    sqlContext.cacheTable(" mytest.test1") 
    val start = System.currentTimeMillis() 

    val testload=sqlContext.sql(query) 

    testload.show() 
    val end = System.currentTimeMillis() 
    println("Time took " + (end-start) + " ms") 

Antwort

1

Nun, es ist kein Funke Problem. Das Berechnen exakter Quantile ist in einer verteilten Umgebung aufgrund der erforderlichen Sortierung und des damit verbundenen Shufflings ein teurer Prozess. Da Sie Perzentile in verschiedenen Spalten berechnen, wird dieser Prozess mehrmals wiederholt und kann besonders teuer sein, wenn die Variablen nicht stark korreliert sind. In der Regel sollten Sie exakte Perzentile berechnen, sofern dies nicht erforderlich ist.

Spark 2.0.0 implementiert durchstimmbare Methoden für die Quantilennäherung und wenn Sie eine frühere Version verwenden, können Sie ein ähnliches Ergebnis durch einfaches Sampling erzielen. Siehe How to find median using Spark

+0

Dies half mir, das Problem und den Weg zu lösen. Vielen Dank @ Zero323 –