摘要
我是spark的新手,在使用snappy压缩保存文本文件时遇到了一个问题。我一直收到下面的错误信息。我从网上得到了很多指示,但没有一条对我有用。最终,我找到了一个解决办法,但我喜欢有人建议正确的解决方案。
java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCodeLoader.buildSupportsSnappy()Z
技术堆栈
ubuntu 20.04.1 64位
hadoop 3.3.0版
Spark3.0.0
openjdk 1.8.0Đ
我只使用spark shell来测试我的代码,我开始使用:
spark-shell --master yarn \
--num-executors 1 \
--executor-memory 512M
我试图解决的问题
在.bashrc中添加了以下环境变量
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export SPARK_HOME=/opt/spark
export PATH=$PATH:$SPARK_HOME/bin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
在spark-env.sh中添加了以下环境变量
export JAVA_LIBRARY_PATH=$JAVA_LIBRARY_PATH:/opt/hadoop/lib/native
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/hadoop/lib/native
export SPARK_YARN_USER_ENV="JAVA_LIBRARY_PATH=$JAVA_LIBRARY_PATH,LD_LIBRARY_PATH=$LD_LIBRARY_PATH"
存在选中的snappy库
hadoop checknative
...
Native library checking:
hadoop: true /opt/hadoop/lib/native/libhadoop.so.1.0.0
zlib: true /lib/x86_64-linux-gnu/libz.so.1
zstd : true /lib/x86_64-linux-gnu/libzstd.so.1
snappy: true /lib/x86_64-linux-gnu/libsnappy.so.1
lz4: true revision:10301
bzip2: true /lib/x86_64-linux-gnu/libbz2.so.1
...
变通办法
我还尝试运行sparkshell而不使用yarn,我可以将我的rdd保存为snappy成功压缩的文本文件。因此,这个问题似乎与Yarn有关。我在spark-defaults.conf中添加了以下属性,最终帮助解决了使用yarn时的问题。但我不确定为什么需要这样做,也不确定这是否是配置sparkonyarn以使用hadoop本机库的正确方法。
spark.driver.extraLibraryPath /opt/hadoop/lib/native
spark.executor.extraLibraryPath /opt/hadoop/lib/native
暂无答案!
目前还没有任何答案,快来回答吧!