Ich habe Spark Stand-alone-Setup auf EC2-Instanzen. Ich versuche, den Cluster-Modus zum Übermitteln einer Spark-Anwendung zu verwenden. Das Jar befindet sich in S3 und der Zugriff darauf wird über IAM-Rollen eingerichtet. Ich kann aws s3 cp s3: //bucket/dir/foo.jar ausführen. um die JAR-Datei zu bekommen - das funktioniert gut. Wenn ich jedoch Folgendes ausführe:Spark senden Cluster-Modus von s3
spark-submit --master spark://master-ip:7077 --class Foo
--deploy-mode cluster --verbose s3://bucket/dir/foo/jar
Ich bekomme den unten beschriebenen Fehler. Wenn die IAM-Rollen in den Boxen so konfiguriert sind, dass sie den Zugriff erlauben, wie würde der Job dann korrekt übermittelt? Der Job selbst verwendet S3 überhaupt nicht ... das Problem scheint den Jar von S3 zu holen.
Jede Hilfe wird geschätzt.
16/07/04 11:44:09 ERROR ClientEndpoint: Exception from cluster was: java.lang.IllegalArgumentException: AWS Access Key ID and Secret Access Key must be specified as the username or password (respectively) of a s3 URL, or by setting the fs.s3.awsAccessKeyId or fs.s3.awsSecretAccessKey properties (respectively).
java.lang.IllegalArgumentException: AWS Access Key ID and Secret Access Key must be specified as the username or password (respectively) of a s3 URL, or by setting the fs.s3.awsAccessKeyId or fs.s3.awsSecretAccessKey properties (respectively).
at org.apache.hadoop.fs.s3.S3Credentials.initialize(S3Credentials.java:66)
at org.apache.hadoop.fs.s3.Jets3tFileSystemStore.initialize(Jets3tFileSystemStore.java:82)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:85)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:62)
at com.sun.proxy.$Proxy5.initialize(Unknown Source)
at org.apache.hadoop.fs.s3.S3FileSystem.initialize(S3FileSystem.java:77)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:1446)
at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:67)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:1464)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:263)
at org.apache.spark.util.Utils$.getHadoopFileSystem(Utils.scala:1686)
at org.apache.spark.util.Utils$.doFetchFile(Utils.scala:598)
at org.apache.spark.util.Utils$.fetchFile(Utils.scala:395)
at org.apache.spark.deploy.worker.DriverRunner.org$apache$spark$deploy$worker$DriverRunner$$downloadUserJar(DriverRunner.scala:150)
at org.apache.spark.deploy.worker.DriverRunner$$anon$1.run(DriverRunner.scala:79)
Ich bin nicht sicher, Spark weiß, wie man mit IAM-Rollen arbeitet. Ich denke, wir haben es auch hier ausprobiert und es ist fehlgeschlagen. Beim Senden von Funke-Jobs im Cluster-Modus wird der Port standardmäßig auf 6066 gesetzt, wenn ich mich richtig erinnere, Sie können ihn in der Spark-Benutzeroberfläche oben links ansehen. –
Was hast du am Ende gemacht? Ich habe versucht, das Glas herunterzuladen. Der Client-Modus funktioniert, aber der Cluster-Modus scheint das Jar nicht auf die Knoten zu kopieren. – ashic
Der Client-Modus funktioniert, weil Spark einen Jetty-HTTP-Server einrichtet, der die Jars an die Worker verteilt, wo sie im Cluster-Modus auf S3 zugreifen müssen. Wir führen derzeit unseren Streaming-Job im Client-Modus aus. –