2015-07-31 14 views
9

ho Spark e Hadoop installato su OS X. Ho lavorato con successo attraverso un esempio in cui Hadoop corse a livello locale, aveva i file memorizzati in HDFS e mi sono imbattuto scintilla conApache Spark eseguito localmente Dare Refused Errore di connessione

spark-shell --master yarn-client 

e dall'interno della shell ha lavorato con HDFS. Sto avendo problemi, tuttavia, cercando di far funzionare Spark senza HDFS, solo localmente sulla mia macchina. Ho guardato this answer ma non mi sembra giusto nei guai con le variabili di ambiente quando il Spark documentation dice

E 'facile da eseguire in locale su una macchina - tutto ciò che serve è avere Java installato sul vostro PATH del sistema, o la variabile di ambiente JAVA_HOME che punta a un'installazione Java.

Se eseguo l'esempio base SparkPi, ottengo l'output corretto.

Se provo eseguire l'applicazione di esempio Java they provide, ancora una volta, ottengo in uscita, ma questa volta con connessione rifiutata errori relativi al porta 9000, che suona come si sta cercando di connettersi a Hadoop, ma io non so perché, perché non sto specificando che

$SPARK_HOME/bin/spark-submit --class "SimpleApp" --master local[4] ~/study/scala/sampleJavaApp/target/simple-project-1.0.jar 
    Exception in thread "main" java.net.ConnectException: Call From 37-2-37-10.tssg.org/10.37.2.37 to localhost:9000 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
... 
... 
... 
org.apache.hadoop.ipc.Client$Connection.setupConnection(Client.java:604) 
     at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:699) 
     at org.apache.hadoop.ipc.Client$Connection.access(Client.java:367) 
     at org.apache.hadoop.ipc.Client.getConnection(Client.java:1462) 
     at org.apache.hadoop.ipc.Client.call(Client.java:1381) 
     ... 51 more 
    15/07/31 11:05:06 INFO spark.SparkContext: Invoking stop() from shutdown hook 
    15/07/31 11:05:06 INFO handler.ContextHandler: stopped o.s.j.s.ServletContextHandler{/metrics/json,null} 
... 
... 
... 
    15/07/31 11:05:06 INFO ui.SparkUI: Stopped Spark web UI at http://10.37.2.37:4040 
    15/07/31 11:05:06 INFO scheduler.DAGScheduler: Stopping DAGScheduler 
    15/07/31 11:05:06 INFO spark.MapOutputTrackerMasterEndpoint: MapOutputTrackerMasterEndpoint stopped! 
    15/07/31 11:05:06 INFO util.Utils: path = /private/var/folders/cg/vkq1ghks37lbflpdg0grq7f80000gn/T/spark-c6ba18f5-17a5-4da9-864c-509ec855cadf/blockmgr-b66cc31e-7371-472f-9886-4cd33d5ba4b1, already present as root for deletion. 
    15/07/31 11:05:06 INFO storage.MemoryStore: MemoryStore cleared 
    15/07/31 11:05:06 INFO storage.BlockManager: BlockManager stopped 
    15/07/31 11:05:06 INFO storage.BlockManagerMaster: BlockManagerMaster stopped 
    15/07/31 11:05:06 INFO scheduler.OutputCommitCoordinator$OutputCommitCoordinatorEndpoint: OutputCommitCoordinator stopped! 
    15/07/31 11:05:06 INFO spark.SparkContext: Successfully stopped SparkContext 
    15/07/31 11:05:06 INFO util.Utils: Shutdown hook called 
    15/07/31 11:05:06 INFO util.Utils: Deleting directory /private/var/folders/cg/vkq1ghks37lbflpdg0grq7f80000gn/T/spark-c6ba18f5-17a5-4da9-864c-509ec855cadf 

Tutti gli indicatori/spiegazioni su dove sto andando male sarebbe molto apprezzato!


UPDATE

Sembra che il fatto che ho la variabile d'ambiente HADOOP_CONF_DIR set sta causando alcuni problemi. In base a tale directory, ho core-site.xml che contiene il seguente

<property> 
    <name>fs.default.name</name>          
    <value>hdfs://localhost:9000</value>        
</property> 

Se cambio il valore per esempio <value>hdfs://localhost:9100</value> poi quando si tenta di eseguire il processo di accensione, il collegamento rifiutato errore si riferisce a questo mutato porta

Exception in thread "main" java.net.ConnectException: Call From 37-2-37-10.tssg.org/10.37.2.37 to localhost:9100 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused 

Così, per qualche motivo, nonostante istruendo l'esecuzione a livello locale, si sta tentando di connettersi a HDFS. Se rimuovo la variabile di ambiente HADOOP_CONF_DIR, il lavoro funziona correttamente.

+0

stai configurando la configurazione principale anche all'interno del tuo lavoro? – eliasah

+0

Non so esattamente cosa intendi (potrebbe essere un segno del perché non funziona!). Sto solo eseguendo il comando '$ SPARK_HOME/bin/spark-submit --class" SimpleApp "--master local [4] ~/study/scala/sampleJavaApp/target/simple-project-1.0.jar' –

+0

come stai configurare il tuo SparkContext nel tuo progetto Java? – eliasah

risposta

12

Apache Spark utilizza le librerie client Hadoop per l'accesso ai file quando si utilizza sc.textFile. Ciò rende possibile utilizzare un percorso hdfs:// o s3n:// ad esempio.È inoltre possibile utilizzare i percorsi locali come file:/home/robocode/foo.txt.

Se si specifica un nome file senza uno schema, viene utilizzato fs.default.name. Il valore predefinito è file:, ma è esplicitamente sostituito in hdfs://localhost:9000 nel numero core-site.xml. Quindi se non si specifica lo schema, sta provando a leggere da HDFS.

La soluzione più semplice è specificare lo schema:

JavaRDD<String> logData = sc.textFile("file:/home/robocode/foo.txt").cache(); 
+0

Ottima spiegazione, questo lo ha risolto. –

1

Penso che le variabili d'ambiente precedentemente definite per l'esempio correlato a Hadoop stiano ancora interferendo con il test.

Dato che si sta utilizzando la Spark esempio ufficiale di Java:

public static void main(String[] args) { 
    String logFile = "YOUR_SPARK_HOME/README.md"; // Should be some file on your system 
    SparkConf conf = new SparkConf().setAppName("Simple Application"); 
    JavaSparkContext sc = new JavaSparkContext(conf); 
    JavaRDD<String> logData = sc.textFile(logFile).cache(); 
... 
} 

vorrei suggerire di impostare esplicitamente il padrone, come valori di default vengono presi altrimenti.

SparkConf conf = new SparkConf().setMaster("local").setAppName("Simple Application") 

Controllare il SparkConf doc per ulteriori informazioni:

+0

ho appena provato il tuo suggerimento, ma anche con il master esplicitamente impostato sta ancora tentando di comunicare con HDFS come risultato di "HADOOP_CONF_DIR" impostato. So che potrei semplicemente disinserire e impostare la variabile env come richiesto ma ci deve essere un modo più ragionevole –

1

ho avuto lo stesso errore, HADOOP_CONF_DIR è stato definito, quindi ho solo impostata la variabile d'ambiente.

unset HADOOP_CONF_DIR