UnsatisfiedLinkError (NativeIO$Windows.access0) 当从 Windows 向 ubuntu 提交 mapreduce job to hadoop 2.2 时

2022-09-04 23:13:55

我将我的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变量中。


答案 1
  1. 获取(或在 *x 上)。确保将位数(32 位与 64 位)与 JVM 相匹配。hadoop.dlllibhadoop.so
  2. 确保它可以通过 PATHjava.library.path 获得

    请注意,设置将覆盖 。如果设置 ,请确保它是正确的,并且包含 hadoop 库。java.library.pathPATHjava.library.path


答案 2

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

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