Verbindung zu einem remote-Spark master - Java / Scala
Erstellte ich eine mit 3 Knoten (1 master, 2 Arbeiter) Apache Spark
- cluster in der AWS. Ich bin in der Lage, Druckaufträge an den cluster aus dem master, aber ich kann es nicht aus der Ferne arbeiten.
/* SimpleApp.scala */
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
object SimpleApp {
def main(args: Array[String]) {
val logFile = "/usr/local/spark/README.md" //Should be some file on your system
val conf = new SparkConf().setAppName("Simple Application").setMaster("spark://ec2-54-245-111-320.compute-1.amazonaws.com:7077")
val sc = new SparkContext(conf)
val logData = sc.textFile(logFile, 2).cache()
val numAs = logData.filter(line => line.contains("a")).count()
val numBs = logData.filter(line => line.contains("b")).count()
println(s"Lines with a: $numAs, Lines with b: $numBs")
sc.stop()
}
}
Kann ich sehen, von der master:
Spark Master at spark://ip-171-13-22-125.ec2.internal:7077
URL: spark://ip-171-13-22-125.ec2.internal:7077
REST URL: spark://ip-171-13-22-125.ec2.internal:6066 (cluster mode)
also wenn ich ausführen SimpleApp.scala
von meiner lokalen Maschine, es nicht zu verbinden, die die Spark Master
:
2017-02-04 19:59:44,074 INFO [appclient-register-master-threadpool-0] client.StandaloneAppClient$ClientEndpoint (Logging.scala:54) [] - Connecting to master spark://ec2-54-245-111-320.compute-1.amazonaws.com:7077...
2017-02-04 19:59:44,166 WARN [appclient-register-master-threadpool-0] client.StandaloneAppClient$ClientEndpoint (Logging.scala:87) [] - Failed to connect to spark://ec2-54-245-111-320.compute-1.amazonaws.com:7077
org.apache.spark.SparkException: Exception thrown in awaitResult
at org.apache.spark.rpc.RpcTimeout$$anonfun$1.applyOrElse(RpcTimeout.scala:77) ~[spark-core_2.10-2.0.2.jar:2.0.2]
at org.apache.spark.rpc.RpcTimeout$$anonfun$1.applyOrElse(RpcTimeout.scala:75) ~[spark-core_2.10-2.0.2.jar:2.0.2]
at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:33) ~[scala-library-2.10.0.jar:?]
at org.apache.spark.rpc.RpcTimeout$$anonfun$addMessageIfTimeout$1.applyOrElse(RpcTimeout.scala:59) ~[spark-core_2.10-2.0.2.jar:2.0.2]
Aber ich weiß, es würde gearbeitet haben, wenn ich hatte den Meister zu local
, denn dann würde es lokal laufen. Allerdings habe ich an meinem client die Verbindung zu dieser remote-master. Wie kann ich erreichen, dass? Die Apache-Konfiguration sieht-Datei. Ich kann auch mit telnet auf die public-DNS und port habe ich auch konfiguriert /etc/hosts
mit dem öffentlichen DNS-und Hostnamen für jede der EC2
Instanzen.
Ich möchte in der Lage sein, um jobs zu dieser remote-master, was bin ich?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für die Bindung master-host-name/IP-gehen Sie zu Ihrem Funken installation conf (Funke-2.0.2-bin-hadoop2.7/conf) und erstellen spark-env.sh Datei mit nachstehenden Befehl.
Öffnen spark-env.sh Datei im vi-editor und fügen Sie folgende Zeile mit host-name/IP der master.
Stoppen und starten der Funke über stop-all.sh und start-all.sh. Jetzt können Sie es verwenden, um die Verbindung remote-master mit
Weitere Informationen zum festlegen von Umgebungsvariablen überprüfen Sie bitte http://spark.apache.org/docs/latest/spark-standalone.html#cluster-launch-scripts
Hatte ich ein anderes problem Neueinstufung starten von lokalen code auf dem remote-cluster:
Der job wird immer eingereicht, und Ressourcen bereitgestellt werden, richtig, aber der Treiber läuft auf meinem lokalen Rechner behauptet, dass cluster nicht akzeptiert
Auf dem remote-Rechner meldet mir aufgefallen, dass es die Annahme der Arbeit mit der Treiber-url aus meinem lokalen Netzwerk
So mine Probleme, war mit dem falschen Hostnamen auflösen für Fahrer Prozess