2015-05-04 2 views
5

следующее исключение которое происходит при выполнении модульного теста искры, которая требует мгновенного сжатия:UnsatisfiedLinkError: нет snappyjava в java.library.path, когда не работает Спарк тест MLLib блок в пределах Intellij

java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.xerial.snappy.SnappyLoader.loadNativeLibrary(SnappyLoader.java:317) 
    at org.xerial.snappy.SnappyLoader.load(SnappyLoader.java:219) 
    at org.xerial.snappy.Snappy.<clinit>(Snappy.java:44) 
    at org.apache.spark.io.SnappyCompressionCodec.<init>(CompressionCodec.scala:150) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
    at org.apache.spark.io.CompressionCodec$.createCodec(CompressionCodec.scala:68) 
    at org.apache.spark.io.CompressionCodec$.createCodec(CompressionCodec.scala:60) 
    at org.apache.spark.broadcast.TorrentBroadcast.org$apache$spark$broadcast$TorrentBroadcast$$setConf(TorrentBroadcast.scala:73) 
    at org.apache.spark.broadcast.TorrentBroadcast.<init>(TorrentBroadcast.scala:79) 
    at org.apache.spark.broadcast.TorrentBroadcastFactory.newBroadcast(TorrentBroadcastFactory.scala:34) 
    at org.apache.spark.broadcast.BroadcastManager.newBroadcast(BroadcastManager.scala:62) 
    at org.apache.spark.SparkContext.broadcast(SparkContext.scala:1077) 
    at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$submitMissingTasks(DAGScheduler.scala:849) 
    at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$submitStage(DAGScheduler.scala:790) 
    at org.apache.spark.scheduler.DAGScheduler$$anonfun$org$apache$spark$scheduler$DAGScheduler$$submitStage$4.apply(DAGScheduler.scala:793) 
    at org.apache.spark.scheduler.DAGScheduler$$anonfun$org$apache$spark$scheduler$DAGScheduler$$submitStage$4.apply(DAGScheduler.scala:792) 
    at scala.collection.immutable.List.foreach(List.scala:318) 
    at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$submitStage(DAGScheduler.scala:792) 
    at org.apache.spark.scheduler.DAGScheduler$$anonfun$org$apache$spark$scheduler$DAGScheduler$$submitStage$4.apply(DAGScheduler.scala:793) 
    at org.apache.spark.scheduler.DAGScheduler$$anonfun$org$apache$spark$scheduler$DAGScheduler$$submitStage$4.apply(DAGScheduler.scala:792) 
    at scala.collection.immutable.List.foreach(List.scala:318) 
    at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$submitStage(DAGScheduler.scala:792) 
    at org.apache.spark.scheduler.DAGScheduler.handleJobSubmitted(DAGScheduler.scala:774) 
    at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1393) 
    at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1385) 
    at org.apache.spark.util.EventLoop$$anon$1.run(EventLoop.scala:48) 
Caused by: java.lang.UnsatisfiedLinkError: no snappyjava in java.library.path 
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1878) 
    at java.lang.Runtime.loadLibrary0(Runtime.java:849) 
    at java.lang.System.loadLibrary(System.java:1087) 
    at org.xerial.snappy.SnappyNativeLoader.loadLibrary(SnappyNativeLoader.java:52) 
    ... 33 more 

Каких настроек или изменения, которые необходимы решить проблему?

ответ

8

Способ справиться с этим заключается в обновлении конфигурации Intellij Run. Добавьте следующие параметры JVM:

-Dorg.xerial.snappy.lib.name=libsnappyjava.jnilib -Dorg.xerial.snappy.tempdir=/tmp 
+1

Я столкнулся с той же ошибкой когда я запустил работу с мажором-искрами в Mac. Следующая конфигурация работала для меня. Я скопировал мгновенный родной lib в/Library/Java/Extensions затем set env variable как export MAHOUT_OPTS = "- Dorg.xerial.snappy.lib.path =/Библиотека/Java/Расширения -Dorg.xerial.snappy.lib.name = libsnappyjava.jnilib -Dorg.xerial.snappy.tempdir = ~/tmp " – Sujee

+0

@Sujee Спасибо за вашу обратную связь с mahout. – javadba

10

Другим решением является обновление вашей версии мгновенного действия. Хотя эта проблема существует в 1.0.4.1, она была исправлена ​​в 1.0.5. Добавление исключения в зависимости искровых как

<dependency> 
    <groupId>org.apache.spark</groupId> 
    <artifactId>spark-core_2.10</artifactId> 
    <version>${spark.version}</version> 
    <exclusions> 
     <exclusion> 
      <groupId>org.xerial.snappy</groupId> 
      <artifactId>snappy-java</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

, а затем добавить

<dependency> 
    <groupId>org.xerial.snappy</groupId> 
    <artifactId>snappy-java</artifactId> 
    <version>1.0.5</version> 
</dependency> 

сделал это для меня.

+0

Это 1.0.5 или 1.5.0 - ваш ответ, кажется, имеет несогласованность. – javadba

+0

хороший улов, @javadba, я сделал опечатку. Он должен быть 1.0.5, следующий выпуск после 1.0.4.1 – Sean

1

У меня была такая же ошибка. версия искрового-сердечника был: 1.3.0-cdh5.4.3

раз я изменил его на: 1.3.0 он установил ее.

Обратите внимание, что оно «предусмотрено», поэтому на производстве это не имеет значения, его единственная машина для разработки.

Редактировать: Я нашел более разумное решение. проблема возникает из-за ошибки быстрого сжатия Java в OSX. так, чтобы решить ее, вы можете добавить в файл пом:

<dependency> 
    <groupId>org.xerial.snappy</groupId> 
    <artifactId>snappy-java</artifactId> 
    <version>1.1.2</version> 
    <type>jar</type> 
    <scope>provided</scope> 
</dependency> 
2

Столкнувшись с этой проблемой чистой автономной установки Спарк 1.6.1. Чтобы решить эту проблему, я должен был:

1) вручную добавить libsnappyjava.jnilib (это в банке) для java.library.path (который включает в себя несколько мест, ~/Library/Java/Extensions/штраф)

2) добавить snappy-java-1.1.2.4.jar в путь класса Spark (в spark-env.sh добавить "export SPARK_CLASSPATH = .../snappy-java-1.1.2.4.jar"

Смежные вопросы