2016-10-06 3 views
6

Spark kann Hadoop S3A-Dateisystem org.apache.hadoop.fs.s3a.S3AFileSystem verwenden. Folgendes in die conf/spark-defaults.conf Durch das Hinzufügen kann ich Funkenschale mit dem S3 Eimer zu protokollieren:Spark History Server auf S3A FileSystem: ClassNotFoundException

spark.jars.packages    net.java.dev.jets3t:jets3t:0.9.0,com.google.guava:guava:16.0.1,com.amazonaws:aws-java-sdk:1.7.4,org.apache.hadoop:hadoop-aws:2.7.3 
spark.hadoop.fs.s3a.impl   org.apache.hadoop.fs.s3a.S3AFileSystem 
spark.eventLog.enabled   true 
spark.eventLog.dir    s3a://spark-logs-test/ 
spark.history.fs.logDirectory  s3a://spark-logs-test/ 
spark.history.provider   org.apache.hadoop.fs.s3a.S3AFileSystem 

Spark-History Server lädt auch Konfiguration von conf/spark-defaults.conf, aber es scheint nicht spark.jars.packages Konfiguration zu laden, und wirft ClassNotFoundException:

Exception in thread "main" java.lang.ClassNotFoundException: org.apache.hadoop.fs.s3a.S3AFileSystem 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:348) 
    at org.apache.spark.util.Utils$.classForName(Utils.scala:225) 
    at org.apache.spark.deploy.history.HistoryServer$.main(HistoryServer.scala:256) 
    at org.apache.spark.deploy.history.HistoryServer.main(HistoryServer.scala) 

Die Spark-Quellcode für das Laden Konfiguration unterscheidet sich in SparkSubmitArguments.scala und in HistoryServerArguments.scala, insbesondere die HistoryServerArguments scheint nicht Pakete zu laden.

Gibt es eine Möglichkeit, die org.apache.hadoop.fs.s3a.S3AFileSystem Abhängigkeit zum History Server hinzuzufügen?

Antwort

5

Habe etwas mehr graben und herausgefunden. Hier ist, was falsch war:

  1. Die JAR-Dateien, die für S3A kann $SPARK_HOME/jars hinzugefügt werden (wie in SPARK-15965 beschrieben)

  2. Die Linie

    spark.history.provider  org.apache.hadoop.fs.s3a.S3AFileSystem 
    

    in $SPARK_HOME/conf/spark-defaults.conf verursachen

    Exception in thread "main" java.lang.NoSuchMethodException: org.apache.hadoop.fs.s3a.S3AFileSystem.<init>(org.apache.spark.SparkConf) 
    

    Ausnahme. Diese Linie kann sicher entfernt werden, wie in dieser answer vorgeschlagen.

Fassen wir zusammen:

  • jets3t-0.9.3.jar (kann bereits mit vorgefertigten Spark-Binärdateien:

    ich die folgenden JAR-Dateien zu $SPARK_HOME/jars hinzugefügt scheint keine Rolle, welche Version 0.9.x)

  • guava-14.0.1.jar (möglicherweise bereits vorhanden mit Ihren vorgefertigten Spark-Binärdateien, scheint nicht wichtig, welche 14.0.x-Version)
  • aws-java-sdk-1.7.4.jar
  • hadoop-aws.jar (Version 2.7.3) (muss 1.7.4 sein)
(wahrscheinlich sollte in Ihrem Spark-Build der Version von Hadoop entsprechen)

und hinzugefügt, um diese Linie zu $SPARK_HOME/conf/spark-defaults.conf

spark.history.fs.logDirectory  s3a://spark-logs-test/ 

Sie einige andere Konfiguration benötigen die Protokollierung in erster Linie zu ermöglichen, aber sobald die S3-bucket die Protokolle hat, ist dies die einzige Konfiguration, die für die benötigt wird, Verlaufsserver.

Verwandte Themen