2016-09-23 6 views
2

Моя ЭМИ у нас-запад-1, но мое ведро S3 у нас - восток-1, и я становлюсь ниже ошибки.Перекресток доступа S3 от AWS EMR Spark

Я пробовал s3://{bucketname}.s3.amazon.com, но это создало бы новое ведро с s3.amazon.com.

Как получить доступ к поперечному регистру s3?

com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: Moved Permanently (Service: Amazon S3; Status Code: 301; Error Code: 301 Moved Permanently; Request ID: FB1139D9BD8F409B), S3 Extended Request ID: pWK3X9BBRp8BLlXEHOx008RCdlZC64YFTounDYGtnwsAneR0IDP1Z/gmDudRoqWhDArfYLNRxk4= 
    at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1389) 
    at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:902) 
    at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:607) 
    at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:376) 
    at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:338) 
    at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:287) 
    at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3826) 
    at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.AmazonS3Client.getObjectMetadata(AmazonS3Client.java:1015) 
    at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.AmazonS3Client.getObjectMetadata(AmazonS3Client.java:991) 
    at com.amazon.ws.emr.hadoop.fs.s3n.Jets3tNativeFileSystemStore.retrieveMetadata(Jets3tNativeFileSystemStore.java:212) 
    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:191) 
    at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:102) 
    at com.sun.proxy.$Proxy38.retrieveMetadata(Unknown Source) 
    at com.amazon.ws.emr.hadoop.fs.s3n.S3NativeFileSystem.getFileStatus(S3NativeFileSystem.java:780) 
    at org.apache.hadoop.fs.FileSystem.exists(FileSystem.java:1428) 
    at com.amazon.ws.emr.hadoop.fs.EmrFileSystem.exists(EmrFileSystem.java:313) 
    at org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelationCommand.run(InsertIntoHadoopFsRelationCommand.scala:85) 
    at org.apache.spark.sql.execution.command.ExecutedCommandExec.sideEffectResult$lzycompute(commands.scala:60) 
    at org.apache.spark.sql.execution.command.ExecutedCommandExec.sideEffectResult(commands.scala:58) 
    at org.apache.spark.sql.execution.command.ExecutedCommandExec.doExecute(commands.scala:74) 
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$1.apply(SparkPlan.scala:115) 
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$1.apply(SparkPlan.scala:115) 
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$executeQuery$1.apply(SparkPlan.scala:136) 
    at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151) 
    at org.apache.spark.sql.execution.SparkPlan.executeQuery(SparkPlan.scala:133) 
    at org.apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:114) 
    at org.apache.spark.sql.execution.QueryExecution.toRdd$lzycompute(QueryExecution.scala:86) 
    at org.apache.spark.sql.execution.QueryExecution.toRdd(QueryExecution.scala:86) 
    at org.apache.spark.sql.execution.datasources.DataSource.write(DataSource.scala:487) 
    at org.apache.spark.sql.DataFrameWriter.save(DataFrameWriter.scala:211) 
    at org.apache.spark.sql.DataFrameWriter.save(DataFrameWriter.scala:194) 
    at org.apache.spark.sql.DataFrameWriter.text(DataFrameWriter.scala:520) 
+0

Это используется в поддержке, но как-то изменилось в последнее время в ЭМИ. Кажется, что он больше не разрешает доступ к ведро S3 в другом регионе. Это также, по-видимому, повлияло на исторические ОИМ, поэтому это изменение в самой ЭМИ, а не связано с emr-5.0. –

+0

Да, мы делали доступ к кросс-региону s3 с помощью EMR 4.6, а искра 2.0 с обновлением EMR 5.0 имеет эту проблему. Я надеялся, что есть явный способ для меня установить другой регион, как с помощью 'class InstanceProfileCredentialsProvider' или что-то еще ... – codingtwinky

+1

@JohnRotenstein это проблематично. Я не сталкивался с такими проблемами «пока», но что мы делаем в таких случаях? Пожалуйста, не говорите мне, что нам нужно скопировать данные из одного региона в другой с помощью S3 API, чтобы мы могли получить к нему доступ. И что более абсурдно, это влияет на исторические ОИМ. Это огромный регресс. – eliasah

ответ

3

Это решение работает для меня на ЭМИ-5.0.0/ЭМИ-5.0.3:

Добавьте следующее свойство в core-site configuration

"fs.s3n.endpoint":"s3.amazonaws.com" 
+1

Наконец-то было время проверить это. И, похоже, он работает для s3n, s3a и s3. Возможно, недавно был выпущен EMR 5.1.0, но примечания к выпуску не указаны. http://docs.aws.amazon.com/ElasticMapReduce/latest/ReleaseGuide/emr-whatsnew.html – codingtwinky

0

Как было предложено @codingtwinky в комментариях, ЭМИ 4.6.0 не имеет этой проблемы в слое emr.hadoop.fs. Мои рабочие задания теперь работают в EMR 4.6.0, но не работают в 5.0.0 или 4.7.0.

1

Попал в команду поддержки AWS и TLDR, что они знают об этой проблеме, и в настоящее время они работают над ней и надеются исправить это для следующего выпуска EMR, но у меня нет eta.

Для «s3a» вы можете использовать пользовательский s3 end points within spark во время выполнения, но это не работает для «s3» или «s3n».

Кроме того, вы можете настроить EMR для указания другой области s3 во время создания, но как только вы настроите этот способ, вы застряли с этим регионом.

Это региональное связывание EMRFS применяется от EMR 4.7.2 и далее в соответствии с командой поддержки.

Смежные вопросы