Pour accéder à mon seau S3 j'ai exporté mes creds(python) Spark .textFile (s3: // ...) Accès refusé 403 avec des informations d'identification valides
export AWS_SECRET_ACCESS_KEY=
export AWS_ACCESSS_ACCESS_KEY=
je peux vérifier que tout fonctionne par faire
aws s3 ls mybucket
Je peux aussi vérifier avec boto3 que cela fonctionne en python
resource = boto3.resource("s3", region_name="us-east-1")
resource.Object("mybucket", "text/text.py") \
.put(Body=open("text.py", "rb"),ContentType="text/x-py")
Cela fonctionne et je peux voir la fi le dans le seau.
Cependant quand je fais cela avec étincelle:
spark_context = SparkContext()
sql_context = SQLContext(spark_context)
spark_context.textFile("s3://mybucket/my/path/*)
je reçois une belle
> Caused by: org.jets3t.service.S3ServiceException: Service Error
> Message. -- ResponseCode: 403, ResponseStatus: Forbidden, XML Error
> Message: <?xml version="1.0"
> encoding="UTF-8"?><Error><Code>InvalidAccessKeyId</Code><Message>The
> AWS Access Key Id you provided does not exist in our
> records.</Message><AWSAccessKeyId>[MY_ACCESS_KEY]</AWSAccessKeyId><RequestId>XXXXX</RequestId><HostId>xxxxxxx</HostId></Error>
est ce que je soumets le travail localement
étincelle soumettre--packages com. amazonaws: aws-java-sdk-pom: 1.11.98, org.apache.hadoop: hadoop-aws: 2.7.3 test.py
Pourquoi ça marche? s avec la ligne de commande + boto3 mais l'étincelle est choquante?
EDIT:
Même problème en utilisant s3a: // avec
hadoopConf = spark_context._jsc.hadoopConfiguration()
hadoopConf.set("fs.s3a.access.key", "xxxx")
hadoopConf.set("fs.s3a.secret.key", "xxxxxxx")
hadoopConf.set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
et même problème en utilisant aws-sdk 1.7.4 et 2.7.2 Hadoop
lire ceci? https://www.cloudera.com/documentation/enterprise/latest/topics/spark_s3.html –
Je pense que cela fonctionnerait également avec l'exportation de AWS_SECRET_ACCESS_KEY et AWS_ACCESS_KEY. est de créer ce fichier d'informations d'identification vraiment une nécessité? comme vous pouvez le voir, Spark récupère correctement AWS_ACCESS_KEY à partir de la variable d'environnement, mais la raison ne parvient pas à s'authentifier? – Johny19
Spark est distribué. Parce que vous avez des variables ENV dans un exécuteur ne veut pas dire que les autres exécuteurs l'ont aussi bien.Vous devez utiliser 'SparkConf' pour définir les valeurs –