Lokales Lesen von S3-Dateien über Spark (oder besser: pyspark)
Ich Lesen möchte eine S3-Datei von meinem (lokalen) Maschine, durch Spark (pyspark, wirklich). Nun, ich halte immer Authentifizierung Fehler wie
java.lang.IllegalArgumentException: AWS Access Key ID und Secret
Access Key angegeben werden müssen, Benutzername oder Passwort
(jeweils) eine s3n-URL, oder durch die Einstellung des fs.s3n.awsAccessKeyId
oder fs.s3n.awsSecretAccessKey Eigenschaften (jeweils).
Ich sah überall hier und im web, viele Dinge versucht, aber anscheinend ist das S3 hat sich verändert über die letzten Jahre oder Monate, und alle Methoden gescheitert, aber:
pyspark.SparkContext().textFile("s3n://user:password@bucket/key")
(Hinweis: die s3n
[s3
hat nicht funktioniert]). Nun, ich will nicht, um eine URL verwenden, die mit dem Benutzer und Passwort, da können Sie erscheinen in den Protokollen, und ich bin auch nicht sicher, wie man Sie aus der ~/.aws/credentials
Datei sowieso.
So, wie kann ich lokal gelesen von S3 durch Funken (oder, besser, pyspark) mit der AWS-Anmeldeinformationen aus der jetzt standard ~/.aws/credentials
- Datei (im Idealfall, ohne Sie zu kopieren Sie die Anmeldeinformationen gibt es noch eine weitere Konfigurationsdatei)?
PS: ich habe versucht os.environ["AWS_ACCESS_KEY_ID"] = …
und os.environ["AWS_SECRET_ACCESS_KEY"] = …
es hat nicht funktioniert.
PPS: ich bin mir nicht sicher, wo Sie "eingestellt bei der fs.s3n.awsAccessKeyId oder fs.s3n.awsSecretAccessKey Eigenschaften" (Google wollte nicht kommen mit nichts). Jedoch, ich habe versucht, viele Möglichkeiten der Einstellung: SparkContext.setSystemProperty()
sc.setLocalProperty()
und conf = SparkConf(); conf.set(…); conf.set(…); sc = SparkContext(conf=conf)
. Nichts funktionierte.
InformationsquelleAutor der Frage Eric Lebigot | 2015-04-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, Sie haben zu verwenden
s3n
statts3
.s3
ist einige seltsame Missbrauch von S3 die Vorteile von denen sind mir unklar.Übergeben Sie die Anmeldeinformationen für die
sc.hadoopFile
odersc.newAPIHadoopFile
Aufrufe:InformationsquelleAutor der Antwort Daniel Darabos
Das problem war tatsächlich ein bug in der Amazon
boto
Python-Modul. Das problem bezog sich auf die Tatsache, dass MacPort-version ist eigentlich alt: Installationboto
durch pip das problem gelöst:~/.aws/credentials
richtig gelesen wurde.Nun, dass ich mehr Erfahrung habe, würde ich sagen, dass im Allgemeinen (ab Ende 2015) Amazon Web Services-tools und Funke/PySpark haben eine lückenhafte Dokumentation und kann einige schwerwiegende bugs, die sind sehr einfach zu laufen. Zum ersten problem würde ich empfehlen, um erste update der aws-Befehlszeilen-Schnittstelle
boto
und Funke jedes mal, wenn etwas seltsames passiert,: das "Magische Weise" gelöst ein paar Fragen schon für mich.InformationsquelleAutor der Antwort Eric Lebigot
Hier ist eine Lösung auf, wie zu Lesen, die Anmeldeinformationen von
~/.aws/credentials
. Es macht Gebrauch von der Tatsache, dass die credentials-Datei ist eine INI-Datei, die geparst werden können mit Python configparser.Siehe auch meine Kernaussage in https://gist.github.com/asmaier/5768c7cda3620901440a62248614bbd0 .
InformationsquelleAutor der Antwort asmaier
Umgebungsvariablen setup helfen könnte.
Hier im Spark-FAQ unter der Frage "Wie kann ich den Zugriff auf Daten in S3?", die Sie vorschlagen, zu setzen
AWS_ACCESS_KEY_ID
undAWS_SECRET_ACCESS_KEY
Umgebungsvariablen.InformationsquelleAutor der Antwort Zeke Fast
Kann ich nicht viel sagen über die java-Objekte, die Sie haben, um das zu geben hadoopFile Funktion, nur dass diese Funktion scheint schon depricated für einige "newAPIHadoopFile". Die Dokumentation dazu ist sehr lückenhaft und ich fühle, wie Sie benötigen, zu wissen, Scala/Java wirklich auf den Grund gehen, was alles bedeutet.
In der Zwischenzeit habe ich herausgefunden, wie man tatsächlich einige s3-Daten in pyspark und ich dachte, ich würde teilen meine Erkenntnisse.
In dieser Dokumentation: Spark-API-Dokumentation sagt, dass es verwendet ein dict, das umgewandelt wird in ein java-Konfiguration (XML). Ich fand die Konfiguration für java, das sollte wahrscheinlich reflektieren die Werte sollten Sie in die dict: Wie Sie Zugang zu S3/S3n von lokalen hadoop-installation
Diesem code-snippet lädt die Datei aus dem Eimer und Präfix (Pfad der Datei im Eimer) angegeben, die auf die ersten beiden Zeilen.
InformationsquelleAutor der Antwort firelynx