4

Elastic Map Reduce 작업 흐름의 입력 데이터로 S3 버킷을 사용하려고합니다. S3 버킷은 EMR 작업 흐름과 동일한 계정에 속하지 않습니다. 각 S3 버킷에 액세스하기 위해 S3 버킷 자격 증명을 지정하는 방법과 장소. 나는 다음과 같은 형식으로 시도 :EMR 작업 흐름에 다른 사용자 소유 S3 버킷 지정

s3n://<Access Key>:<Secret Key>@<BUCKET>

를하지만 나에게 다음과 같은 오류 제공 : 나도 같은 지정에 대한 이동 어떻게

Exception in thread "main" java.lang.IllegalArgumentException: The bucket name parameter must be specified when listing objects in a bucket 
at com.amazonaws.services.s3.AmazonS3Client.assertParameterNotNull(AmazonS3Client.java:2381) 
at com.amazonaws.services.s3.AmazonS3Client.listObjects(AmazonS3Client.java:444) 
at com.amazonaws.services.s3.AmazonS3Client.doesBucketExist(AmazonS3Client.java:785) 
at org.apache.hadoop.fs.s3native.Jets3tNativeFileSystemStore.ensureBucketExists(Jets3tNativeFileSystemStore.java:80) 
at org.apache.hadoop.fs.s3native.Jets3tNativeFileSystemStore.initialize(Jets3tNativeFileSystemStore.java:71) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:83) 
at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:59) 
at org.apache.hadoop.fs.s3native.$Proxy1.initialize(Unknown Source) 
at org.apache.hadoop.fs.s3native.NativeS3FileSystem.initialize(NativeS3FileSystem.java:512) 
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:1413) 
at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:68) 
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:1431) 
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:256) 
at org.apache.hadoop.fs.Path.getFileSystem(Path.java:187) 
at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.setInputPaths(FileInputFormat.java:352) 
at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.setInputPaths(FileInputFormat.java:321) 
at com.inmobi.appengage.emr.mapreduce.TestSession.main(TestSession.java:88) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at org.apache.hadoop.util.RunJar.main(RunJar.java:187) 

를?

답변

3

이러한 자격 증명을 core-site.xml 파일에 추가해야합니다. 노드에서 s3 자격 증명을 수동으로 추가하거나 클러스터를 시작하는 동안 boostrap 작업을 사용하여 추가 할 수 있습니다.

이 같은 뭔가 클러스터를 시작할 수 있습니다 :

ruby elastic-mapreduce --create --alive --plain-output --master-instance-type m1.xlarge --slave-instance-type m1.xlarge --num-instances 11 --name "My Super Cluster" --bootstrap-action s3://elasticmapreduce/bootstrap-actions/configure-hadoop --args -c,fs.s3.awsAccessKeyId=< access-key >,-c,fs.s3.awsSecretAccessKey=< secret-key >

이 클러스터를 실행 계정에 따라 EMR에 의해 배치 디폴트 값을 대체합니다.

+0

나를 위해 args 방식으로 작동하지 않았다. 부트 스트 래퍼 로그에서/mnt/var/lib/bootstrap-actions/2/configure-hadoop -args -c, fs.s3n.awsAccessKeyId = , -c, fs.s3n.awsSecretAccessKey = 을 실행하려고합니다. 다음 오류와 함께 실패합니다. 2013-08-26T08 : 47 : 22.715Z 정보 실행이 ret val 255로 끝났습니다. 2013-08-26T08 : 47 : 22.716Z 오류 코드 '255'로 실행하지 못했습니다. 한 가지 더 JobFlow GUI에서 부트 스트랩 작업을 구성 할 때 "선택적 인수"에 S3 키 옵션을 설정하고 있습니다. 이것이 다른 방법으로 일할 수 있습니까? –

+0

슬레이브 노드에 로그인하여 거기에 core-site.xml 파일에 이러한 변경 사항이 있는지 확인하십시오. 또한 Amazon에서 제공하는 ruby ​​cli를 사용하여 클러스터를 시작하십시오. – Amar

+0

ruby ​​cli를 사용할 수 있었지만 위에서 제안한대로 실행했지만 이제는 새로운 오류가 발생합니다. 상태 코드 : 403, AWS 서비스 : Amazon S3, AWS 요청 ID : 0504CE5FDBFC1D8B, AWS 오류 코드 : null, AWS 오류 메시지 : 금지됨, S3 확장 요청 ID :. 도울 수 있니? –