2015-04-06 6 views
8

Ecco cosa sto cercando di fare.TaskSchedulerImpl: il lavoro iniziale non ha accettato alcuna risorsa;

Ho creato due nodi del cluster aziendale DataStax, in cima al quale ho creato un programma java per ottenere il conteggio di una tabella (tabella del database Cassandra).

Questo programma è stato creato in eclissi che è in realtà da una finestra di Windows.

Al momento della esecuzione di questo programma da Windows è in fallimento con il seguente errore in fase di esecuzione:

iniziale di lavoro non ha accettato alcuna risorsa; controllare la vostra interfaccia utente cluster per garantire che i lavoratori sono registrati e dispone di memoria sufficiente

Lo stesso codice è stato compilato & run con successo su tali cluster senza alcun problema. Quale potrebbe essere la ragione per cui sto superando l'errore?

Codice:

import org.apache.spark.SparkConf; 

import org.apache.spark.SparkContext; 

import org.apache.spark.api.java.JavaSparkContext; 
import org.apache.spark.sql.SchemaRDD; 
import org.apache.spark.sql.cassandra.CassandraSQLContext; 
import com.datastax.bdp.spark.DseSparkConfHelper; 

public class SparkProject { 

    public static void main(String[] args) { 

     SparkConf conf = DseSparkConfHelper.enrichSparkConf(new SparkConf()).setMaster("spark://10.63.24.14X:7077").setAppName("DatastaxTests").set("spark.cassandra.connection.host","10.63.24.14x").set("spark.executor.memory", "2048m").set("spark.driver.memory", "1024m").set("spark.local.ip","10.63.24.14X"); 

     JavaSparkContext sc = new JavaSparkContext(conf); 

     CassandraSQLContext cassandraContext = new CassandraSQLContext(sc.sc()); 
     SchemaRDD employees = cassandraContext.sql("SELECT * FROM portware_ants.orders"); 

     //employees.registerTempTable("employees"); 
     //SchemaRDD managers = cassandraContext.sql("SELECT symbol FROM employees"); 
     System.out.println(employees.count()); 

     sc.stop(); 
    } 
} 
+0

prega di dare un'occhiata al https://stackoverflow.com/a/44581586/808096 –

risposta

2

Si prega di guardare di Russ post

In particolare questa sezione:

Questo è di gran lunga il primo errore più comune che un nuovo utente Spark sarà vedere quando tentando di eseguire una nuova applicazione. Il nostro nuovo ed eccitato utente Spark tenterà di avviare la shell o eseguire la propria applicazione e essere soddisfatte con il seguente messaggio

...

La soluzione a breve termine a questo problema è quello di assicurarsi che si aren 't Richiedere più risorse dal cluster di esistere o per spegnere eventuali app che utilizzano inutilmente risorse. Se è necessario eseguire contemporaneamente più app Spark, è necessario regolare la quantità di core utilizzata da ciascuna app.

+0

Questo è stato assicurato. 2 core e 1 applicazione spark in esecuzione su memoria da 6 GB. Sto ancora riscontrando problemi con l'applicazione Submit PySpark su AWS EC2 - Errore iniziale del job fallito - L'applicazione va in stato Wait a causa di indisponibilità delle risorse. Fammi sapere se c'è qualche soluzione. Il problema è indicato qui: http://stackoverflow.com/questions/38359801/spark-job-submitted-waiting-taskschedulerimpl-initial-job-not-acccepted @phact –

13

ho affrontato problema simile e dopo qualche ricerca online e la prova-n-errore, ho ridotta a 3 cause per questo (tranne che per la prima gli altri due non sono nemmeno vicino al messaggio di errore):

  1. Come indicato dall'errore, probabilmente si è allocare le risorse più di quella disponibile. => Questo non era il mio problema
  2. nome host & Indirizzo IP Mishaps: Ho preso cura di questo specificando lo SPARK_MASTER_IP e SPARK_LOCAL_IP in spark-env.sh
  3. Disabilita firewall sul client: Questa è stata la soluzione che ha funzionato per me. Dal momento che stavo lavorando su un prototipo di codice interno, ho disabilitato il firewall sul nodo client. Per qualche motivo i nodi operai, non erano in grado di rispondere al cliente per me. Per scopi di produzione, vorrai aprire un certo numero di porte richieste.
+0

Nel mio caso SPARK_LOCAL_IP ha aiutato. Mi sono collegato tramite VPN e ho configurato diverse interfacce. Quando ho impostato SPARK_LOCAL_IP sull'interfaccia VPN, l'errore è scomparso. –

+0

In spark-env.sh di Master - Ho impostato SPARK_MASTER_IP. Ora cos'è SPARK_LOCAL_IP e non cambierebbe per l'istanza Master e Worker. Il firewall è comunque disabilitato su entrambe le istanze. Sto ancora riscontrando problemi con l'applicazione Submit PySpark su AWS EC2 - Errore iniziale del job fallito - L'applicazione va in stato Wait a causa di indisponibilità delle risorse. Fammi sapere se c'è qualche soluzione. Il problema è indicato qui: http://stackoverflow.com/questions/38359801/spark-job-submitted-waiting-taskschedulerimpl-initial-job-not-acccepted @ameyamm –

+0

@oo_olo_oo SPARK_LOCAL_IP deve essere impostato sull'indirizzo IP corrispondente per entrambi lavoratore e autista giusto? –

6

Il mio problema era che stavo assegnando troppa memoria di quanto i miei schiavi avessero a disposizione. Prova a ridurre la dimensione della memoria della scintilla invia. Qualcosa di simile a quanto segue:

~/spark-1.5.0/bin/spark-submit --master spark://my-pc:7077 --total-executor-cores 2 --executor-memory 512m 

con la mia ~/spark-1.5.0/conf/spark-env.sh essere:

SPARK_WORKER_INSTANCES=4 
SPARK_WORKER_MEMORY=1000m 
SPARK_WORKER_CORES=2 
+0

Ho 1 istanza di lavoro, 2 core e 6 GB di memoria disponibile e ho assegnato 1 core e 1 GB di memoria all'applicazione mentre invio senza altre applicazioni in esecuzione al momento. Nonostante ciò, sto affrontando un problema - per quanto riguarda l'applicazione Submit PySpark su AWS EC2 - Errore di processo iniziale non riuscito - L'applicazione va in stato di attesa a causa di indisponibilità di risorse. Fammi sapere se c'è qualche soluzione. Il problema è indicato qui: http://stackoverflow.com/questions/38359801/spark-job-submitted-waiting-taskschedulerimpl-initial-job-non-accettato @Sudipta Basak –

0

Nel mio caso, il problema era che avevo la seguente riga nel $SPARK_HOME/conf/spark-env.sh:

SPARK_EXECUTOR_MEMORY = 3g

di ciascun lavoratore,
e la seguente riga nella $SPARK_HOME/conf/spark-default.sh

spark.executor.memory 4g

nel nodo "master".

Il problema è andato via una volta ho cambiato da 4g a 3g. Spero che questo possa aiutare qualcuno con lo stesso problema. Le altre risposte mi hanno aiutato a individuare questo.

0

Ho affrontato questo problema poche volte anche se l'allocazione delle risorse era corretta.

La correzione era di riavviare i servizi del mesos.

sudo service mesos-slave restart 
sudo service mesos-master restart