Idea本地运行Spark,SparkContext.textFile()读取文件时报错,具体报错:
Caused by: java.lang.UnsatisfiedLinkError: no snappyjava in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
at org.xerial.snappy.SnappyNativeLoader.loadLibrary(SnappyNativeLoader.java:52)
... 33 more
…...
Caused by: java.lang.IllegalArgumentException: org.xerial.snappy.SnappyError: [FAILED_TO_LOAD_NATIVE_LIBRARY] null
at org.apache.spark.io.SnappyCompressionCodec.<init>(CompressionCodec.scala:151)
... 25 more
Caused by: org.xerial.snappy.SnappyError: [FAILED_TO_LOAD_NATIVE_LIBRARY] null
at org.xerial.snappy.SnappyLoader.load(SnappyLoader.java:229)
at org.xerial.snappy.Snappy.<clinit>(Snappy.java:44)
at org.apache.spark.io.SnappyCompressionCodec.<init>(CompressionCodec.scala:149)
... 25 more
环境:
<scala.version>2.10.4</scala.version>
<spark.version>1.5.3</spark.version>
解决问题有两种方法:
1.添加JVM运行参数
(参考:https://www.jianshu.com/p/5097b0ddb76f)
-Dorg.xerial.snappy.lib.name=libsnappyjava.jnilib -Dorg.xerial.snappy.tempdir=/tmp

亲测有效。
2.修改pom文件依赖(此方法一段时间有效,一段时间又没效果)
参考:https://blog.csdn.net/baichoufei90/article/details/83004272
因为spark-core_2.10中依赖的1.0.4版本的snappy-java存在此问题,在1.0.5版本已经修复了此问题。所以可以在pom中这样写:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_${scala.version}</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>
再次运行,已经没有报错了。
本文解决了在Idea中使用Spark 1.5.3版本时,遇到的Snappy压缩库加载失败问题。通过调整JVM参数和修改pom文件依赖,成功避免了因Snappy压缩库版本不匹配导致的运行时错误。

1571

被折叠的 条评论
为什么被折叠?



