从windows到ubuntu提交mapreduce作业到hadoop 2.2时出现UnsatisfiedLinkError(NativeIO $ Windows.access0)

时间:2013-12-14 13:55:39

标签: java windows ubuntu hadoop

我将mapreduce作业从在windows上运行的java应用程序提交到在ubuntu上运行的hadoop 2.2集群。在hadoop 1.x中,这按预期工作,但在hadoop 2.2上我得到一个奇怪的错误:

java.lang.UnsatisfiedLinkError:org.apache.hadoop.io.nativeio.NativeIO $ Windows.access0(Ljava / lang / String; I)Z

我编译了必要的Windows库(hadoop.dll和winutils.exe),可以通过代码访问hdfs并使用hadoop API读取集群信息。只有作业提交不起作用。

任何帮助都是有帮助的。

解决方案:我自己发现了,可以找到windows hadoop二进制文件的路径必须添加到windows的PATH变量中。

3 个答案:

答案 0 :(得分:0)

由于%HADOOP_HOME%\ bin文件夹中的二进制文件不匹配,通常会发生此错误。所以,你需要做的是专门为你的hadoop版本获取hadoop.dll和winutils.exe。

获取特定hadoop版本的hadoop.dll和winutils.exe,并将它们复制到%HADOOP_HOME%\ bin文件夹中。

答案 1 :(得分:0)

  1. Get hadoop.dll(或* x上的libhadoop.so)。确保将位数(32位和64位)与JVM匹配。
  2. 确保可通过 PATH java.library.path 使用。

    请注意,设置java.library.path 会覆盖 PATH。如果您设置了java.library.path,请确保它正确并且包含hadoop库。

答案 2 :(得分:0)

自早上以来,我的 Windows 10 Hadoop安装一直遇到问题,由于二进制文件中的不匹配,NameNode和DataNode无法启动。在将bin文件夹替换为与Hadoop版本相对应的bin文件夹后,问题已解决。我可能将 bin 文件夹替换为安装随附的文件夹,但该文件夹用于另一个版本,我不知道它是如何发生的。如果所有配置均完好无损,则可能要用与 Hadoop安装相对应的版本替换 bin文件夹