Windows连接远程hdfs出现java.lang.UnsatisfiedLinkError: org.apache.hado
背景
以前写spark都没有读取过hdfs文件,而是读取本地文件,今天试了一下读取公司服务器的文件,做一个简单的word count结果出问题了。
Caused by: java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSums(IILjava/nio/ByteBuffer;ILjava/nio/ByteBuffer;IILjava/lang/String;JZ)V
at org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSums(Native Method)
at org.apache.hadoop.util.NativeCrc32.verifyChunkedSums(NativeCrc32.java:59)
at org.apache.hadoop.util.DataChecksum.verifyChunkedSums(DataChecksum.java:301)
at
下面是我的解决过程。
微信公众号:大数据报文
解决方案
方案一
看了好多其他人的答案,大多是把hadoop.dll和winutil.exe文件拷贝到C:/Windows/System32目录下,就可以了。但是我试了一下,我的问题并没有得到解决。
但是网上特别多这种答案,虽然我的问题没有解决,至少说明这种方案对大多数人来说是有效的,大家可以参考一下。
方案二
昨天同事其实已经碰到这个问题了,当时搜的就是上面说的答案,他的也没有解决,最后他的解决方案是,把本机配置的HADOOP_HOME环境变量去掉(当然不要忘记去掉PATH中的相应的环境变量)
同事说:因为后面数据保存的时候需要调用windows的io操作,不能让程序把本地hadoop当作运行环境。
我今天试了他的方法程序还是报错。正在万念俱灰之际,找到了第三种答案
方案三
在程序运行前,添加`-Djava.library.path=$HADOOP_HOME/lib/native`参数,如果是idea,是下面这个位置
博主解释:这是由于$HADOOP_HOME/lib/native源码二进制包下,文件默认是32位,而在window下运行需要64位格式,因此需要在网上寻找网友已编译好的对应版本的64位native包,或者自己自行编译Hadoop源码,也可以得到64位native包。
但是我本地的hadoop确实是64位的,可能就是程序没有找到吧。如果找不到64位的可以留言我。
————————————————
版权声明:本文为CSDN博主「iFence」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Vector97/article/details/99695838
- 点赞
- 收藏
- 关注作者
评论(0)