Meine Saga geht weiter -Hadoop kann s3 Inhalt Liste aber funken Schale wirft ClassNotFoundException
Kurz Ich versuche, eine teststack für Funke zu schaffen - darauf abzielen, eine Datei von einem s3 Eimer zu lesen ist, und schreiben Sie es dann Ein weiterer. Windows-Umgebung
Ich habe wiederholt Fehler beim Versuch, auf S3 oder S3n zuzugreifen, wenn eine ClassNotFoundException ausgelöst wurde. Diese Klassen wurden auf den Kern-site.xml als s3 hinzugefügt und s3n.impl
Ich habe die hadoop/share/tools/lib zu dem Classpath ohne Erfolg, habe ich dann die aws-java-jdk
und hadoop-aws
Gläser auf den Anteil/hadoop/common folder und ich bin jetzt in der Lage, den Inhalt eines Buckets mit haddop in der Befehlszeile aufzulisten.
hadoop fs -ls "s3n://bucket"
zeigt mir der Inhalt, dann ist dies eine gute Nachricht :)
In meinem Kopf speichern die hadoop Konfiguration aufgenommen werden soll, indem Funken so lösen sollte man die anderen aber lösen, wenn ich Funken Shell laufen und versuchen, eine Datei an s3 Ich bekomme die übliche ClassNotFoundException wie unten gezeigt.
Ich bin immer noch ziemlich neu und unsicher, wenn ich etwas offensichtlich übersehen habe, hoffentlich kann mir jemand helfen, das Rätsel zu lösen? Jede Hilfe wird sehr geschätzt, danke.
Die Ausnahme:
java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.fs.s3native.NativeS3FileSystem not found
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2074)
at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2578)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2591)
mein Kern-site.xml (was ich glaube jetzt korrekt zu sein, wie hadoop s3 zugreifen kann):
<property>
<name>fs.s3.impl</name>
<value>org.apache.hadoop.fs.s3.S3FileSystem</value>
</property>
<property>
<name>fs.s3n.impl</name>
<value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value>
<description>The FileSystem for s3n: (Native S3) uris.</description>
</property>
und schließlich die Hadoop-env.cmd zeigt den Klassenpfad (die scheinbar ignoriert):
set HADOOP_CONF_DIR=C:\Spark\hadoop\etc\hadoop
@rem ##added as s3 filesystem not found.http://stackoverflow.com/questions/28029134/how-can-i-access-s3-s3n-from-a-local-hadoop-2-6-installation
set HADOOP_USER_CLASSPATH_FIRST=true
set HADOOP_CLASSPATH=%HADOOP_CLASSPATH%:%HADOOP_HOME%\share\hadoop\tools\lib\*
@rem Extra Java CLASSPATH elements. Automatically insert capacity-scheduler.
if exist %HADOOP_HOME%\contrib\capacity-scheduler (
if not defined HADOOP_CLASSPATH (
set HADOOP_CLASSPATH=%HADOOP_HOME%\contrib\capacity-scheduler\*.jar
) else (
set HADOOP_CLASSPATH=%HADOOP_CLASSPATH%;%HADOOP_HOME%\contrib\capacity-scheduler\*.jar
)
)
EDIT: funken defaults.conf
spark.driver.extraClassPath=C:\Spark\hadoop\share\hadoop\common\lib\hadoop-aws-2.7.1.jar:C:\Spark\hadoop\share\hadoop\common\lib\aws-java-sdk-1.7.4.jar
spark.executor.extraClassPath=C:\Spark\hadoop\share\hadoop\common\lib\hadoop-aws-2.7.1.jar:C:\Spark\hadoop\share\hadoop\common\lib\aws-java-sdk-1.7.4.jar
Haben Sie versucht, sie explizit auf den Klassenpfad zu setzen, wenn Sie einen Spark-Job übergeben? –
@YuvalItzchakov Ich buchstäblich, und ich meine LITERALLY war hier: http://StackOverflow.com/Questions/29099115/Spark-Submit-Add-Multiple-Jars-in-Classpath: D Ich werde es jetzt versuchen – null
I Übergeben Sie sie mit dem '--jars' Flag und fügen Sie sie über:' spark.driver.extraClassPath = hadoop-aws-2.7.1.jar: aws-java-sdk-1.10.50.jar' dem Klassenpfad hinzu. Dasselbe gilt für 'spark.executor.extraClassPath'. –