Mac上Spark本地模式调试报错-no snappyjava in java.library.path

本文解决了在Idea中使用Spark 1.5.3版本时,遇到的Snappy压缩库加载失败问题。通过调整JVM参数和修改pom文件依赖,成功避免了因Snappy压缩库版本不匹配导致的运行时错误。

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>

 

再次运行,已经没有报错了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值