2016-07-04 3 views
1

私は、EC2インスタンス上にスパークスタンドアローンを設定しました。私はクラスタモードを使用してSparkアプリケーションを提出しようとしています。 jarはS3にあり、IAMの役割を介してJAMへのアクセスが設定されます。私はaws s3 cp s3://bucket/dir/foo.jarを実行できます。 jarファイルを取得する - それはうまく動作します。しかし、私が以下を実行したとき:s3からspark submit clusterモード

spark-submit --master spark://master-ip:7077 --class Foo 
--deploy-mode cluster --verbose s3://bucket/dir/foo/jar 

私は以下のようなエラーが表示されます。ボックスにアクセスを許可するようにIAMロールが設定されていることを確認すると、ジョブをサブミットする正しい方法は何でしょうか?ジョブ自体はS3を全く使用していません...問題はS3からそのジャーをフェッチしているようです。

ご協力いただければ幸いです。

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) 
+0

スパークはIAMの役割の操作方法を知っていません。私たちもここで試してみたところ、失敗したと思う。また、クラスタモードでスパークジョブを送信するとき、正しくリコールすると、ポートは通常6066にデフォルト設定されます。左上のSpark UIでポートを表示できます。 –

+0

最後に何をしましたか?私は瓶をダウンロードしようとしました。クライアントモードは動作しますが、クラスタモードではjarをノードにコピーしていないようです。 – ashic

+0

クライアントモードは、SparkがクラスタモードでS3にアクセスする必要があるワーカーにワーカーを配布するJetty HTTPサーバーを設定するため動作します。現在、クライアントモードでストリーミングジョブを実行しています。 –

答えて

0

回避策が見つかりました。 jarを静的なhttpサーバーに入れ、spark-submitにhttp://server/foo.jarを使用します。それはうまくいくようです。

+0

あなたはいつもS3のURLにアクセスキーと秘密鍵を提供することができます:) –

+0

私はアクセスと秘密鍵を持っていないので、それは問題です。ボックスはIAMの役割でアクセスします。 :) – ashic

+0

AWSで作業するには、より良い方法が必要です。私は現在、クラスタモードと '--supervise'フラグを使って復元力をテストしています。ドライバを実行するワーカーマシンが終了した場合、実際には動作しません。ソートされたら、S3でIAMの役割を果たそうとします。 –

関連する問題