Я новичок в Hadoop и столкнулся с проблемами, пытаясь запустить его на моей машине с Windows 7. В частности, я заинтересован в том, чтобы запустить Hadoop 2.1.0 в качестве примечаний к выпуску, о том, что поддерживается работа в Windows. Я знаю, что я могу попробовать запустить версии 1.x в Windows с Cygwin или даже использовать подготовленную VM, например Cloudera, но эти параметры по некоторым причинам менее удобны для меня.
Изучив tarball из http://apache-mirror.rbc.ru/pub/apache/hadoop/common/hadoop-2.1.0-beta/, я обнаружил, что действительно есть некоторые *.cmd-скрипты, которые можно запускать без Cygwin. Все работало нормально, когда я формировал раздел HDFS, но когда я пытался запустить hdfs namenode daemon, я столкнулся с двумя ошибками: во-первых, не фатальным было то, что winutils.exe не удалось найти (его действительно не было в загруженном tarball). Я нашел источники этого компонента в дереве источников Apache Hadoop и скомпилировал его с помощью Microsoft SDK и MSbuild. Благодаря подробному сообщению об ошибке было ясно, где поставить исполняемый файл для удовлетворения Hadoop. Но вторая ошибка, которая является фатальной, не содержит достаточной информации для меня:
13/09/05 10:20:09 FATAL namenode.NameNode: Exception in namenode join
java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
at org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Native Method)
at org.apache.hadoop.io.nativeio.NativeIO$Windows.access(NativeIO.java:423)
at org.apache.hadoop.fs.FileUtil.canWrite(FileUtil.java:952)
at org.apache.hadoop.hdfs.server.common.Storage$StorageDirectory.analyzeStorage(Storage.java:451)
at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverStorageDirs(FSImage.java:282)
at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:200)
...
13/09/05 10:20:09 INFO util.ExitUtil: Exiting with status 1
Похоже, что что-то еще должно быть скомпилировано. Я собираюсь попытаться построить Hadoop из источника с Maven, но нет ли более простого способа? Разве нет какой-то опции-я-не-знаю, что может отключить собственный код и сделать этот tarball пригодным для использования в Windows?
Спасибо.
ОБНОВЛЕНО. Да, в самом деле. В пакете "Homebrew" содержались дополнительные файлы, а самое главное winutils.exe и hadoop.dll. С этим файлом namenode и datanode начали успешно. Я думаю, вопрос может быть закрыт. Я не удалял его, если кто-то сталкивается с такой же трудностью.
ОБНОВЛЕНО 2. Чтобы создать пакет "доморощенный", я сделал следующее:
- Получил источники и распаковал их.
- Внимательно прочитайте файл BUILDING.txt.
- Установленные зависимости:
3a) Windows SDK 7.1
3b) Maven (я использовал 3.0.5) 3c) JDK (я использовал 1.7.25)
3d) ProtocolBuffer (я использовал 2.5.0 - http://protobuf.googlecode.com/files/protoc-2.5.0-win32.zip). Достаточно просто поместить компилятор (protoc.exe) в некоторые папки PATH.
3e) Набор инструментов командной строки UNIX (я установил Cygwin) - Начальная командная строка Windows SDK. Начало | Все программы | Microsoft Windows SDK v7.1 |... Командная строка (я изменил этот ярлык, добавив параметр/выпуск в командной строке для создания версий версии собственного кода). Все следующие шаги выполняются из окна командной строки SDK).
-
Настройка среды:
установить JAVA_HOME = {path_to_JDK_root}
Кажется, что JAVA_HOME НЕ ДОЛЖЕН содержать пробел!
set PATH={path_to_maven_bin};%PATH%
set Platform=x64
set PATH={path_to_cygwin_bin};%PATH%
set PATH={path_to_protoc.exe};%PATH%
- Изменен каталог источников в корневой каталог (BUILDING.txt предупреждает, что существуют ограничения на длину пути, поэтому исходный корень должен иметь краткое имя - я использовал D:\hds)
-
Ускоренный процесс сборки:
mvn package -Pdist -DskipTests
Вы можете попробовать без 'skipTests', но на моей машине некоторые тесты не удались, и строительство было прекращено. Он может быть связан с проблемами сибольной ссылки, упомянутыми в СТРОЕНИИ .txt. 8. Выбрали результат в hadoop-dist\target\hadoop-2.1.0-beta (исполняемые файлы и библиотеки DLL находятся в папке "bin" )