Spark-version-info.properties не найден в Дженкинс
Я разрабатываю плагин, который использует lib-core spark. это нормально, когда я запускаю его как приложение Java, но когда я запускаю плагин в Jenkins, он показывает ошибку, которая говорит, что
java.lang.ExceptionInInitializerError
at org.apache.spark.package$.<init>(package.scala:91)
at org.apache.spark.package$.<clinit>(package.scala)
at org.apache.spark.SparkContext$$anonfun$3.apply(SparkContext.scala:185)
at org.apache.spark.SparkContext$$anonfun$3.apply(SparkContext.scala:185)
at org.apache.spark.internal.Logging$class.logInfo(Logging.scala:54)
at org.apache.spark.SparkContext.logInfo(SparkContext.scala:74)
at org.apache.spark.SparkContext.<init>(SparkContext.scala:185)
at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2275)
at org.apache.spark.sql.SparkSession$Builder$$anonfun$8.apply(SparkSession.scala:831)
at org.apache.spark.sql.SparkSession$Builder$$anonfun$8.apply(SparkSession.scala:823)
at scala.Option.getOrElse(Option.scala:121)
at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:823)
at com.plugin.goettingen_plugin.HelloWorldBuilder.perform(HelloWorldBuilder.java:88)
at hudson.tasks.BuildStepCompatibilityLayer.perform(BuildStepCompatibilityLayer.java:75)
at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:785)
at hudson.model.Build$BuildExecution.build(Build.java:205)
at hudson.model.Build$BuildExecution.doRun(Build.java:162)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:537)
at hudson.model.Run.execute(Run.java:1741)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
at hudson.model.ResourceController.execute(ResourceController.java:98)
at hudson.model.Executor.run(Executor.java:408)
Caused by: org.apache.spark.SparkException: Error while locating file spark-version-info.properties
at org.apache.spark.package$SparkBuildInfo$.liftedTree1$1(package.scala:75)
at org.apache.spark.package$SparkBuildInfo$.<init>(package.scala:61)
at org.apache.spark.package$SparkBuildInfo$.<clinit>(package.scala)
... 23 more
Caused by: java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Properties.java:434)
at java.util.Properties.load0(Properties.java:353)
at java.util.Properties.load(Properties.java:341)
at org.apache.spark.package$SparkBuildInfo$.liftedTree1$1(package.scala:64)
... 25 more
Я использую следующий код для запуска сеанса спарка:
SparkSession sparkSession = SparkSession.builder().appName("DP-App").master("local[2]").getOrCreate();
Lib из spark-core ищет файл по классу с именем package.java по следующему коду, который возвращает null:
InputStream resourceStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("spark-version-info.properties");
Так как spark-version-info.properties присутствовал в lib спарк -ядра, я попытался переместить файл в Web-INF, но все равно не удалось загрузить файл. Есть ли альтернативный способ загрузить файл и обойти вышеупомянутый код, который находится внутри библиотеки?
Мои зависимости:
<dependencies>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>credentials</artifactId>
<version>1.9.4</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_2.11</artifactId>
<version>2.0.1</version>
</dependency>
</dependencies>
2 ответа
Вам не хватает spark-version-info.properties
файл.
Так что просто создайте один под ./core/target/extra-resources
λ ~/workspace/big_data/spark/ master* ./build/spark-build-info ./core/target/extra-resources 2.1.1
λ ~/workspace/big_data/spark/ master* cat ./core/target/extra-resources/spark-version-info.properties
version=2.1.1
user=chanhle
revision=dec9aa3b37c01454065a4d8899859991f43d4c66
branch=master
date=2017-06-07T15:12:48Z
url=https://github.com/apache/spark
Я также испытываю ту же проблему при отладке Spark на IntelliJ.
Я столкнулся с той же проблемой, используя листы в IntelliJ IDE. Решил это, отключив "Запустить рабочий лист в процессе компиляции"
Я обнаружил, что если вы загружаете Apache Spark через загрузчик классов, который отличается от Thread.currentThread().getContextClassLoader()
значение, то этот файл версии не будет найден. Если вы делаете пользовательскую загрузку классов, вы должны убедиться, что вы установили загрузчик классов, через который Spark был загружен с помощью Thread.currentThread().setContextClassLoader(myCustomLoader)
вызов. Это решило проблему для меня.