Je passe les dossiers d’entrée et de sortie en tant que paramètres pour mapréduire le programme de comptage de mots de la page Web.
Obtenir en dessous de l'erreur:
État HTTP 500 - Le traitement de la demande a échoué. exception imbriquée est Java.lang.IllegalArgumentException: ID de clé d'accès AWS et secret La clé d'accès doit être spécifiée en tant que nom d'utilisateur ou mot de passe (respectivement) d'une URL s3n, ou en définissant le fs.s3n.awsAccessKeyId ou des propriétés fs.s3n.awsSecretAccessKey (respectivement).
La documentation a le format: http://wiki.Apache.org/hadoop/AmazonS3
s3n://ID:SECRET@BUCKET/Path
Je vous suggère d'utiliser ceci:
hadoop distcp \
-Dfs.s3n.awsAccessKeyId=<your_access_id> \
-Dfs.s3n.awsSecretAccessKey=<your_access_key> \
s3n://Origin hdfs://destinations
Cela fonctionne également comme solution de contournement pour l'apparition de barres obliques dans la clé . Les paramètres avec l'id et la clé d'accès doivent être fournis exactement dans cet ordre: après disctcp et avant Origin
La transmission des informations d'identification AWS dans l'URL Amazon s3n n'est généralement pas recommandée, du point de vue de la sécurité. Surtout si ce code est poussé vers un service de stockage de référentiel (comme github). Définissez idéalement vos informations d'identification dans le fichier conf/core-site.xml comme suit:
<configuration>
<property>
<name>fs.s3n.awsAccessKeyId</name>
<value>XXXXXX</value>
</property>
<property>
<name>fs.s3n.awsSecretAccessKey</name>
<value>XXXXXX</value>
</property>
</configuration>
ou réinstallez awscli sur votre ordinateur.
pip install awscli
Pour pyspark débutant:
Téléchargez le fichier depuis https://mvnrepository.com/artifact/org.Apache.hadoop/hadoop-aws
, mettez ceci dans le dossier Spark Jars
Ensuite vous pouvez
core-site.xml
export AWS_ACCESS_KEY_ID=<access-key>
export AWS_SECRET_ACCESS_KEY=<secret-key>
<configuration>
<property>
<name>fs.s3n.impl</name>
<value>org.Apache.hadoop.fs.s3native.NativeS3FileSystem</value>
</property>
<property>
<name>fs.s3a.impl</name>
<value>org.Apache.hadoop.fs.s3a.S3AFileSystem</value>
</property>
<property>
<name>fs.s3.impl</name>
<value>org.Apache.hadoop.fs.s3.S3FileSystem</value>
</property>
</configuration>
sc._jsc.hadoopConfiguration().set("fs.s3.awsAccessKeyId", access_key)
sc._jsc.hadoopConfiguration().set("fs.s3n.awsAccessKeyId", access_key)
sc._jsc.hadoopConfiguration().set("fs.s3a.access.key", access_key)
sc._jsc.hadoopConfiguration().set("fs.s3.awsSecretAccessKey", secret_key)
sc._jsc.hadoopConfiguration().set("fs.s3n.awsSecretAccessKey", secret_key)
sc._jsc.hadoopConfiguration().set("fs.s3a.secret.key", secret_key)
sc._jsc.hadoopConfiguration().set("fs.s3n.impl", "org.Apache.hadoop.fs.s3native.NativeS3FileSystem")
sc._jsc.hadoopConfiguration().set("fs.s3a.impl", "org.Apache.hadoop.fs.s3a.S3AFileSystem")
sc._jsc.hadoopConfiguration().set("fs.s3.impl", "org.Apache.hadoop.fs.s3.S3FileSystem")
import sys
from random import random
from operator import add
from pyspark.sql import SparkSession
from pyspark.conf import SparkConf
if __== "__main__":
"""
Usage: S3 sample
"""
access_key = '<access-key>'
secret_key = '<secret-key>'
spark = SparkSession\
.builder\
.appName("Demo")\
.getOrCreate()
sc = spark.sparkContext
# remove this block if use core-site.xml and env variable
sc._jsc.hadoopConfiguration().set("fs.s3.awsAccessKeyId", access_key)
sc._jsc.hadoopConfiguration().set("fs.s3n.awsAccessKeyId", access_key)
sc._jsc.hadoopConfiguration().set("fs.s3a.access.key", access_key)
sc._jsc.hadoopConfiguration().set("fs.s3.awsSecretAccessKey", secret_key)
sc._jsc.hadoopConfiguration().set("fs.s3n.awsSecretAccessKey", secret_key)
sc._jsc.hadoopConfiguration().set("fs.s3a.secret.key", secret_key)
sc._jsc.hadoopConfiguration().set("fs.s3n.impl", "org.Apache.hadoop.fs.s3native.NativeS3FileSystem")
sc._jsc.hadoopConfiguration().set("fs.s3a.impl", "org.Apache.hadoop.fs.s3a.S3AFileSystem")
sc._jsc.hadoopConfiguration().set("fs.s3.impl", "org.Apache.hadoop.fs.s3.S3FileSystem")
# fetch from s3, returns RDD
csv_rdd = spark.sparkContext.textFile("s3n://<bucket-name>/path/to/file.csv")
c = csv_rdd.count()
print("~~~~~~~~~~~~~~~~~~~~~count~~~~~~~~~~~~~~~~~~~~~")
print(c)
spark.stop()