La connexion à distance à un Spark master Java / Scala
J'ai créé un nœud 3 (1 master, 2 salariés) Apache Spark
cluster dans AWS. Je suis en mesure de soumettre des travaux à la grappe, à partir de le maître, cependant je ne peux pas le faire fonctionner à distance.
/* 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()
}
}
Je peux le voir sur le maître:
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)
alors, quand j'execute SimpleApp.scala
de ma machine locale, il ne parvient pas à se connecter à la 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]
Cependant, je sais que ça aurait fonctionné si j'avais mis le maître de local
, car alors il aurait exécuté localement. Cependant, je veux avoir mon client qui se connecte à ce maître. Comment puis-je le réaliser? La configuration d'Apache ressemble fichier. Je peux même telnet pour que le public DNS et le port, j'ai aussi configuré /etc/hosts
avec le public DNS et le nom d'hôte pour chacun des EC2
instances.
Je veux être en mesure de soumettre des travaux à ce maître, ce qui me manque?
Vous devez vous connecter pour publier un commentaire.
Pour la liaison maître-nom-hôte/IP, allez à votre étincelle de l'installation le répertoire conf (spark-2.0.2-bin-hadoop2.7/conf) et de créer spark-env.sh fichier en utilisant la commande ci-dessous.
Ouvrir spark-env.sh fichier dans l'éditeur vi et ajouter en dessous de la ligne avec le nom d'hôte/adresse IP de votre maître.
Arrêt et de démarrage de l'Étincelle à l'aide de stop-all.sh et start-all.sh. Maintenant, vous pouvez l'utiliser pour vous connecter à distance master à l'aide
Pour plus d'informations sur la configuration des variables d'environnement veuillez vérifier http://spark.apache.org/docs/latest/spark-standalone.html#cluster-launch-scripts
J'ai eu un autre problème de reclassement lancement de code local sur un cluster à distance:
Le travail est soumis, et des ressources sont attribuées correctement, mais le processus de pilote sur ma machine locale prétend que le groupe n'a pas accepté
Sur la machine distante journaux, j'ai remarqué que c'est en acceptant le travail avec chauffeur-url de mon réseau local
Donc mine de questions a été avec le mauvais nom d'hôte pour résoudre pilote de processus