2015-01-11 10 views
5

Voglio eseguire query Spark SQL nel mio servizio Web riposante, quindi come posso eseguire Spark Context tramite il contesto di Jersey? Devo passare la mia richiesta Spark SQL al cluster e quindi restituire il risultato all'utente tramite l'API REST. Ma in Spark Documentations, non c'è modo di eseguire Spark SQL Query in codice java senza inviare il file jar al cluster (master/slave).Come richiamare il lavoro spark nel contesto del servizio Web REST?

risposta

4

Se si utilizza la versione Spark> 1.4, è possibile utilizzare SparkLauncher per eseguire l'applicazione.

import org.apache.spark.launcher.SparkLauncher; 

public class MyLauncher { 
    public static void main(String[] args) throws Exception { 
    Process spark = new SparkLauncher() 
     .setAppResource("/my/app.jar") 
     .setMainClass("my.spark.app.Main") 
     .setMaster("local") 
     .setConf(SparkLauncher.DRIVER_MEMORY, "2g") 
     .launch(); 
    spark.waitFor(); 
    } 
} 

Al fine di farlo funzionare si dovrebbe dare un file jar. Dal momento che si desidera eseguire una query SparkSQL, è possibile comprimerla in un singolo file jar oppure è possibile che un jar ottenga come parametro la query che si desidera eseguire.

L'avvertenza è che è necessario avviare/arrestare SparkContext ogni volta che si desidera eseguire la query. Se non ti dispiace aspettarlo, allora va bene. Ma se il tempo è una cosa importante, consiglierei di scrivere un servizio separato che avrebbe il contesto scintilla sempre attivo e la tua applicazione farebbe delle chiamate.

+1

Mi sono appena reso conto che la domanda è piuttosto vecchia, ma poiché non ha risposta e qualcuno potrebbe avere la stessa domanda, io ho risposto! – MitsakosGR