3 votes

Pyspark n'utilise pas TemporaryAWSCredentialsProvider

J'essaie de lire des fichiers depuis S3 à l'aide de Pyspark en utilisant des informations d'identification de session temporaire mais je continue à obtenir l'erreur suivante :

Received error response: com.amazonaws.services.s3.model.AmazonS3Exception: Status Code: 403, AWS Service: null, AWS Request ID: XXXXXXXX, AWS Error Code: null, AWS Error Message: Forbidden, S3 Extended Request ID: XXXXXXX

Je pense que le problème pourrait être que la connexion S3A doit utiliser org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider afin d'intégrer le jeton de session en plus de la clé d'accès et de la clé secrète standard, mais même en définissant l'attribut fs.s3a.aws.credentials.provider il tente toujours de s'authentifier avec la variable de configuration BasicAWSCredentialsProvider . En regardant les journaux, je vois :

DEBUG AWSCredentialsProviderChain:105 - Loading credentials from BasicAWSCredentialsProvider

J'ai suivi les instructions ici pour ajouter les valeurs de configuration nécessaires, mais elles ne semblent pas faire de différence. Voici le code que j'utilise pour le configurer :

import os
import sys
import pyspark
from pyspark.sql import SQLContext
from pyspark.context import SparkContext

os.environ['PYSPARK_SUBMIT_ARGS'] = '--packages com.amazonaws:aws-java-sdk-pom:1.11.83,org.apache.hadoop:hadoop-aws:2.7.3 pyspark-shell'

sc = SparkContext()
sc.setLogLevel("DEBUG")
sc._jsc.hadoopConfiguration().set("fs.s3a.aws.credentials.provider", "org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider")
sc._jsc.hadoopConfiguration().set("fs.s3a.access.key", os.environ.get("AWS_ACCESS_KEY_ID"))
sc._jsc.hadoopConfiguration().set("fs.s3a.secret.key", os.environ.get("AWS_SECRET_ACCESS_KEY"))
sc._jsc.hadoopConfiguration().set("fs.s3a.session.token", os.environ.get("AWS_SESSION_TOKEN"))
sql_context = SQLContext(sc)

Pourquoi est-ce que TemporaryAWSCredentialsProvider n'est pas utilisé ?

5voto

wafle Points 246

Quelle version d'Hadoop utilisez-vous ?

Le soutien de S3A STS a été ajouté dans Hadoop 2.8.0, et c'est le message d'erreur exact que j'ai obtenu dans Hadoop 2.7.

0voto

Steve Loughran Points 4637

Wafle a raison, c'est 2.8+ seulement.

Mais vous pouvez peut-être vous en sortir en définissant les variables d'environnement AWS_ et en récupérant les secrets de session de cette manière, car la prise en charge des variables d'environnement AWS existe depuis longtemps, et je pensez à il reprendra le AWS_SESSION_TOKEN

Voir Documents AWS

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X