UnsatisfiedLinkError (NativeIO $Windows.access0) при отправке задания mapreduce в hadoop 2.2 из окон в ubuntu

Я отправляю задания mapreduce из приложения java, работающего на окнах, в кластер hadoop 2.2, работающий на ubuntu. В hadoop 1.x это работало так, как ожидалось, но на hadoop 2.2 я получаю странную ошибку:

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

Я скомпилировал необходимые библиотеки окон (hadoop.dll и winutils.exe) и могу получить доступ к hdfs через код и прочитать информацию о кластере с использованием API-интерфейса hadoop. Только задание не работает.

Любая помощь aprecciated.

Решение. Я сам нашел это, путь, в котором могут быть найдены двоичные файлы windowsoop, должен быть добавлен в переменную PATH из окон.

Ответ 1

Эта ошибка обычно возникает из-за несоответствия в ваших двоичных файлах в папке% HADOOP_HOME%\bin. Итак, что вам нужно сделать, это получить hasoop.dll и winutils.exe специально для вашей версии hadoop.

Получите hasoop.dll и winutils.exe для вашей конкретной версии hadoop и скопируйте их в папку% HADOOP_HOME%\bin.

Ответ 2

  1. Получите hadoop.dll (или libhadoop.so on * x). Удостоверьтесь в соответствии с битностью (32- и 64-бит) с вашей JVM.
  2. Убедитесь, что он доступен через PATH или java.library.path.

    Обратите внимание, что установка java.library.path переопределяет PATH. Если вы установили java.library.path, убедитесь, что он правильный и содержит библиотеку hadoop.