我将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变量中。
答案 0 :(得分:0)
由于%HADOOP_HOME%\ bin文件夹中的二进制文件不匹配,通常会发生此错误。所以,你需要做的是专门为你的hadoop版本获取hadoop.dll和winutils.exe。
获取特定hadoop版本的hadoop.dll和winutils.exe,并将它们复制到%HADOOP_HOME%\ bin文件夹中。
答案 1 :(得分:0)
hadoop.dll
(或* x上的libhadoop.so
)。确保将位数(32位和64位)与JVM匹配。确保可通过 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文件夹。