2016-10-06 9 views
6

Spark может использовать файловую систему Hadoop S3A org.apache.hadoop.fs.s3a.S3AFileSystem. Добавляя следующее в conf/spark-defaults.conf, я могу получить искру-оболочку для входа в S3 ведро:Spark History Server на 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 

Спарк История Сервер также загружает конфигурацию из conf/spark-defaults.conf, но это, кажется, не загружать spark.jars.packages конфигурацию, и бросает 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) 

Искра исходный код для загрузки конфигурации отличается в SparkSubmitArguments.scala и в HistoryServerArguments.scala, в частности HistoryServerArguments, кажется, не загружать пакеты.

Есть ли способ добавить зависимость org.apache.hadoop.fs.s3a.S3AFileSystem к серверу истории?

ответ

5

Сделал еще несколько копаний и понял это. Вот что было неправильно:

  1. баночки, необходимые для S3A могут быть добавлены к $SPARK_HOME/jars (как описано в SPARK-15965)

  2. Линия

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

    в $SPARK_HOME/conf/spark-defaults.conf вызовет

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

    исключение. Эта линия может быть безопасно удалена, как предложено в этом answer.

Резюмируя:

я добавил следующие фляги $SPARK_HOME/jars:

  • Jets3t-0.9.3.jar (может быть уже присутствуют с предварительно построенным Спарком бинарных файлами, похоже, не имеет значения, какая версия 0.9.x)
  • guava-14.0.1.jar (возможно, уже присутствует с предустановленными двоичными файлами Spark, похоже, не имеет значения, какая версия 14.0.x)
  • AWS-ява-СДК-1.7.4.jar (должен быть 1.7.4)
  • Hadoop-aws.jar (версия 2.7.3) (вероятно, должен соответствовать версии Hadoop в вашем искрообразование)

и добавил эту строку $SPARK_HOME/conf/spark-defaults.conf

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

Вам потребуется какая-либо другая конфигурация, чтобы включить ведение журнала в первой очереди, но когда ведро S3 имеет бревно, это единственная конфигурация, которая необходима для Сервер истории.