2016-09-02 4 views
2

AFAIK, die neueste, beste S3-Implementierung für Hadoop + Spark, wird mit dem URL-Protokoll "s3a: //" aufgerufen. Dies funktioniert gut auf vorkonfigurierten Amazon EMR.Spark + Amazon S3 "s3a: //" URLs

Wenn jedoch auf einem lokalen Entwickler-System läuft die Verwendung von vorgefertigtem spark-2.0.0-bin-hadoop2.7.tgz, bekomme ich

Caused by: java.lang.ClassNotFoundException: Class org.apache.hadoop.fs.s3a.S3AFileSystem not found 
    at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2101) 
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2193) 
    ... 99 more 

Weiter habe ich versucht, meinen Spark-Job zu starten, um den Hadoop-aws Addon Angabe:

$SPARK_HOME/bin/spark-submit --master local \ 
    --packages org.apache.hadoop:hadoop-aws:2.7.3 \ 
    my_spark_program.py 

ich

:::::::::::::::::::::::::::::::::::::::::::::: 

    ::    FAILED DOWNLOADS   :: 

    ::^see resolution messages for details^:: 

    :::::::::::::::::::::::::::::::::::::::::::::: 

    :: com.google.code.findbugs#jsr305;3.0.0!jsr305.jar 

    :: org.apache.avro#avro;1.7.4!avro.jar 

    :: org.xerial.snappy#snappy-java;1.0.4.1!snappy-java.jar(bundle) 

    :::::::::::::::::::::::::::::::::::::::::::::: 

ich ein Dummy build.sbt Projekt in einem temporären Verzeichnis, die mit diese drei Abhängigkeiten zu sehen, ob eine grundlegende sbt Build erfolgreich diejenigen herunterladen konnte, und ich bekam:

[error] (*:update) sbt.ResolveException: unresolved dependency: org.apache.avro#avro;1.7.4: several problems occurred while resolving dependency: org.apache.avro#avro;1.7.4 {compile=[default(compile)]}: 
[error]  org.apache.avro#avro;1.7.4!avro.pom(pom.original) origin location must be absolute: file:/Users/username/.m2/repository/org/apache/avro/avro/1.7.4/avro-1.7.4.pom 
[error]  org.apache.avro#avro;1.7.4!avro.pom(pom.original) origin location must be absolute: file:/Users/username/.m2/repository/org/apache/avro/avro/1.7.4/avro-1.7.4.pom 
[error] 
[error] unresolved dependency: com.google.code.findbugs#jsr305;3.0.0: several problems occurred while resolving dependency: com.google.code.findbugs#jsr305;3.0.0 {compile=[default(compile)]}: 
[error]  com.google.code.findbugs#jsr305;3.0.0!jsr305.pom(pom.original) origin location must be absolute: file:/Users/username/.m2/repository/com/google/code/findbugs/jsr305/3.0.0/jsr305-3.0.0.pom 
[error]  com.google.code.findbugs#jsr305;3.0.0!jsr305.pom(pom.original) origin location must be absolute: file:/Users/username/.m2/repository/com/google/code/findbugs/jsr305/3.0.0/jsr305-3.0.0.pom 
[error] 
[error] unresolved dependency: org.xerial.snappy#snappy-java;1.0.4.1: several problems occurred while resolving dependency: org.xerial.snappy#snappy-java;1.0.4.1 {compile=[default(compile)]}: 
[error]  org.xerial.snappy#snappy-java;1.0.4.1!snappy-java.pom(pom.original) origin location must be absolute: file:/Users/username/.m2/repository/org/xerial/snappy/snappy-java/1.0.4.1/snappy-java-1.0.4.1.pom 
[error]  org.xerial.snappy#snappy-java;1.0.4.1!snappy-java.pom(pom.original) origin location must be absolute: file:/Users/username/.m2/repository/org/xerial/snappy/snappy-java/1.0.4.1/snappy-java-1.0.4.1.pom 
[error] Total time: 2 s, completed Sep 2, 2016 6:47:17 PM 

Alle Ideen, wie ich diese Arbeit zu bekommen?

+0

haben Sie versucht, die anderen Abhängigkeiten Hinzufügen zu SBT? –

+0

Ich habe die drei Abhängigkeiten hinzugefügt, die zu einem ansonsten leeren sbt-Projekt führen und das nicht erstellt werden konnte. Warum sollte das Hinzufügen anderer Abhängigkeiten nützlich oder hilfreich sein? – clay

+0

Ich war nur neugierig. Das Hinzufügen des AWS-Hadoop-Pakets ist natürlich der Ansicht, dass es diese anderen herunterladen muss. Aus diesem Grund ist es nützlich/hilfreich, explizit im Projekt nach ihnen zu fragen –

Antwort

1

Es sieht so aus, als ob Sie zusätzliche Gläser in Ihrem Submit-Flag benötigen. Das Maven-Repository verfügt über eine Reihe von AWS-Paketen für Java, mit denen Sie Ihren aktuellen Fehler beheben können: https://mvnrepository.com/search?q=aws

Ich bekomme ständig Kopfschmerzen mit dem S3A-Dateisystemfehler; aber das aws-java-sdk: 1.7.4 jar funktioniert für Spark 2.0.

Weitere Dialoge zu diesem Thema finden Sie hier; Allerdings gibt es tatsächlich ein tatsächliches Paket im Maven AWS EC2-Repository.

https://sparkour.urizone.net/recipes/using-s3/

Versuchen Sie folgendes:

spark-submit --packages com.amazonaws:aws-java-sdk:1.7.4,org.apache.hadoop:hadoop-aws:2.7.3 my_spark_program.py 
0

Wenn Sie Apache Spark verwenden (das heißt: Ich ignoriere das Build Amazon Schiff in EMR), müssen Sie eine Abhängigkeit hinzufügen auf org.apache.hadoop:hadoop-aws für genau die gleiche Version von Hadoop, die der Rest von Spark verwendet. Dies fügt die S3a FS und die transitiven Abhängigkeiten hinzu. Die Version des AWS-SDK muss dieselbe sein, die zum Erstellen der hadoop-aws-Bibliothek verwendet wurde, da es sich um ein bewegliches Ziel handelt.

Siehe: Apache Spark and Object Stores