читать спарк с другого аккаунта s3 и писать в мой аккаунт s3 - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть искровое задание, в котором необходимо прочитать данные из s3, находящиеся в другом аккаунте ** (Data Account) **, и обработать эти данные.

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

Поэтому я настроил доступ и секретный ключ «Учетная запись данных» , как показано ниже в моей сеансе зажигания

val hadoopConf=sc.hadoopConfiguration
hadoopConf.set("fs.s3a.access.key","DataAccountKey")
hadoopConf.set("fs.s3a.secret.key","DataAccountSecretKey") 
hadoopConf.set("fs.s3a.endpoint", "s3.ap-northeast-2.amazonaws.com")
System.setProperty("com.amazonaws.services.s3.enableV4", "true")

val df = spark.read.json("s3a://DataAccountS/path")
/* Reading is success */

df.take(3).write.json("s3a://myaccount/test/")

с этим чтением в порядке, но я получаю ошибку ниже при записи.

com.amazonaws.services.s3.model.AmazonS3Exception: Status Code: 301, AWS Service: Amazon S3, AWS Request ID: A5E574113745D6A0, AWS Error Code: PermanentRedirect, AWS Error Message: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.

но если я не настрою детали учетной записи и попытаюсь записать некоторые фиктивные данные в мой s3 от spark, это сработает.

Так как мне настроить, чтобы работали как чтение из другого аккаунта s3, так и запись в мой аккаунт s3

1 Ответ

0 голосов
/ 09 ноября 2018

Если в вашем искровом classpath включены JAR-файлы hadoop-2.7, вы можете использовать секреты в путях в качестве метода, поэтому URL-адрес будет иметь вид s3a://DataAccountKey:DataAccountSecretKey/DataAccount/path. Имейте в виду, что секреты будут храниться везде.

Jad-файлы Hadoop 2.8+ сообщат вам о необходимости регистрировать ваши секреты повсюду, но добавят привязку для каждого блока

spark.hadoop.fs.s3a.bucket.DataAccount.access.key DataAccountKey spark.hadoop.fs.s3a.bucket.DataAccount.secret.key DataAccountSecretKey spark.hadoop.fs.s3a.bucket.DataAccount.endpoint s3.ap-northeast-2.amazonaws.com

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

Примечание: если вы хотите использовать это, не думайте, что добавление hadoop-aws-2.8.jar в ваш classpath будет работать, вы получите только ошибки classpath. Все из hadoop- * JAR должны перейти на 2.8, а также обновить aws-sdk.

...