2016-07-04 3 views
1

EC2 인스턴스에서 스파크 독립 실행 형을 설정했습니다. 클러스터 모드를 사용하여 Spark 응용 프로그램을 제출하려고합니다. 항아리는 S3에 있으며 IAM 역할을 통해 항아리에 대한 액세스가 설정됩니다. aws s3 cp s3 : //bucket/dir/foo.jar을 실행할 수 있습니다. jar 파일을 얻으려면 - 잘 작동합니다. 그러나 다음을 실행할 때 :스파크 제출 s3에서 클러스터 모드

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

Spark이 IAM 역할을 사용하는 방법을 알고 있는지 잘 모르겠습니다. 나는 우리가 여기서도 시도해 보았고 실패했다고 생각합니다. 또한, 클러스터 모드에서 스파크 작업을 제출할 때, 포트가 올바르게 리콜되면 보통 6066으로 기본 설정됩니다. 왼쪽 상단의 Spark UI에서 포트를 볼 수 있습니다. –

+0

결국 무엇을 했습니까? 항아리를 다운로드하려고했습니다. 클라이언트 모드는 작동하지만 클러스터 모드는 jar를 노드에 복사하지 않습니다. – ashic

+0

클라이언트 모드는 Spark이 클러스터 모드에서 작업자에게 항아리를 배포하는 Jetty HTTP 서버를 설정하므로 S3에 액세스해야합니다. 현재 스트리밍 작업을 클라이언트 모드로 실행 중입니다. –

답변

0

해결 방법을 발견했습니다. jar를 정적 http 서버에 넣고 spark-submit에 http://server/foo.jar을 사용합니다. 그것은 작동하는 것 같습니다.

+0

S3 URL에 항상 액세스 키와 비밀 키를 제공 할 수 있습니다. –

+0

액세스 및 비밀 키를 가지고 있지 않으므로 문제가 있습니다. 상자는 IAM 역할에 액세스 할 수 있습니다. :) – ashic

+0

AWS로 작업하는 더 좋은 방법이 있어야합니다. 나는 현재 클러스터 모드와'--supervise' 플래그로 탄력성을 테스트하고 있습니다. 드라이버를 실행하는 작업자 시스템이 종료되면 실제로 작동하지 않습니다. 내가 정리하면 IAM 역할을하기 위해 S3와 함께 노력할 것입니다. –

관련 문제