Windows连接远程hdfs出现java.lang.UnsatisfiedLinkError: org.apache.hado

举报
anqier 发表于 2021/11/02 16:59:56 2021/11/02
【摘要】 背景以前写spark都没有读取过hdfs文件,而是读取本地文件,今天试了一下读取公司服务器的文件,做一个简单的word count结果出问题了。Caused by: java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSums(IILjava/nio/ByteBuffer...

背景
以前写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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。