2015-07-31 15 views
9

Ich habe Funken und Hadoop auf OS X installiert ich erfolgreich durch ein Beispiel gearbeitet, wo Hadoop lokal lief, hatte Dateien in HDFS gespeichert und ich lief Funken mitApache Spark lokal ausgeführt Refused Giving Verbindungsfehler

spark-shell --master yarn-client 

und aus der Shell heraus mit HDFS gearbeitet. Ich habe jedoch Probleme, Spark ohne HDFS zu bekommen, nur lokal auf meinem Rechner. Ich this answer aussah, aber es fühlt sich nicht richtig um mit Umgebungsvariablen durcheinander, wenn die Spark documentation sagt

Es ist einfach, die lokal auf einem Rechner laufen - alles, was Sie brauchen, ist zu haben Java auf Ihrem System bereits installiert haben, oder die JAVA_HOME-Umgebungsvariable , die auf eine Java-Installation verweist.

Wenn ich das grundlegende SparkPi Beispiel führe, bekomme ich die korrekte Ausgabe.

Wenn ich versuche, den Beispiel-Java-App they provide, erneut ausführen, I-Ausgang, aber diesmal mit Verbindung abgelehnt Fehler im Zusammenhang mit Port 9000, die wie es klingt zu Hadoop zu verbinden versucht, aber ich weiß nicht, warum, weil ich nicht, dass

$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 

Alle Hinweise/Erklärungen, die Angabe, wohin ich gehe falsch wäre sehr geschätzt!


UPDATE

Es scheint, dass die Tatsache, dass ich die Umgebungsvariable HADOOP_CONF_DIR Satz einige Probleme verursacht haben. Unter diesem Verzeichnis habe ich core-site.xml, die folgenden

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

enthält Wenn ich den Wert beispielsweise ändern <value>hdfs://localhost:9100</value> dann, wenn ich versuche, den Funken Job ausgeführt werden soll, die Verbindung verweigerte Fehler auf diesen verändert Port So

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 

aus irgendeinem Grunde bezieht sich trotz anweist, lokal auszuführen, es versucht zu HDFS zu verbinden. Wenn ich die Umgebungsvariable HADOOP_CONF_DIR entferne, funktioniert der Job einwandfrei.

+0

Richten Sie die Master-Konfiguration auch in Ihrem Job ein? – eliasah

+0

Ich bin mir nicht sicher, was genau du meinst (was ein Zeichen dafür sein könnte, dass es nicht funktioniert!). Ich verwende nur den Befehl '$ SPARK_HOME/bin/Funken einreichen --Klasse "SimpleApp" --master local [4] ~/Studie/scala/sampleJavaApp/target/simple-Projekt-1.0.jar' –

+0

wie geht es dir Einrichten Ihres SparkContext in Ihrem Java-Projekt? – eliasah

Antwort

12

Apache Spark verwendet die Hadoop-Client-Bibliotheken für den Dateizugriff, wenn Sie sc.textFile verwenden. Dies ermöglicht beispielsweise die Verwendung eines Pfades hdfs:// oder s3n://.Sie können auch lokale Pfade als file:/home/robocode/foo.txt verwenden.

Wenn Sie einen Dateinamen ohne Schema angeben, wird fs.default.name verwendet. Der Standardwert ist file:, aber sie explizit in Ihrem core-site.xml-hdfs://localhost:9000 außer Kraft setzen. Wenn Sie also das Schema nicht angeben, versucht es, von HDFS zu lesen.

Die einfachste Lösung ist das Schema zu spezifizieren:

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

Große Erklärung, das hat es gelöst. –

1

Ich denke, die Umgebungsvariablen, die Sie zuvor für das Hadoop-Beispiel definiert haben, stören Ihren Test noch.

Vorausgesetzt, dass Sie das offizielle Spark-Java-Beispiel verwenden:

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(); 
... 
} 

Ich würde den Meister explictly gesetzt suggerieren, als Standardwert anders getroffen werden.

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

Überprüfen Sie die SparkConf doc für weitere Informationen:

+0

ich gerade versucht, Ihr Vorschlag, aber selbst mit Master explizit eingestellt ist es immer noch versucht, mit HDFS als Ergebnis von 'HADOOP_CONF_DIR' zu kommunizieren. Ich weiß, ich könnte einfach deaktivieren und setzen Sie die Variable env wie erforderlich, aber es muss eine vernünftige Art und Weise –

1

ich den gleichen Fehler hatte, wurde HADOOP_CONF_DIR definiert, so dass ich nur ungesetzt die Umgebungsvariable.

unset HADOOP_CONF_DIR