Я новичок в Hadoop и столкнулся с проблемами, пытаясь запустить его на моем компьютере с Windows 7. В частности, я заинтересован в использовании Hadoop 2.1.0, поскольку его примечания к выпуску упоминают, что поддерживается работа в Windows. Я знаю, что могу попробовать запустить версии 1.x на Windows с помощью Cygwin или даже использовать подготовленную ВМ, например Cloudera, но эти варианты по некоторым причинам менее удобны для меня.
Изучив архив с http://apache-mirror.rbc.ru/pub/apache/hadoop/common/hadoop-2.1.0-beta/ Я обнаружил, что действительно есть некоторые скрипты *.cmd, которые можно запускать без Cygwin. Все работало нормально, когда я отформатировал раздел HDFS, но когда я попытался запустить демон hdfs namenode, я столкнулся с двумя ошибками: первая, не фатальная, заключалась в том, что не удалось найти winutils.exe (его действительно не было в загруженном архиве). Я нашел исходники этого компонента в дереве исходников 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, но нет ли более простого способа? Нет ли какой-то опции, которую я не знаю, которая может отключить собственный код и сделать этот архив пригодным для использования в Windows?
Спасибо.
ОБНОВЛЕНО. Да, в самом деле. Пакет «Доморощенный» содержал несколько дополнительных файлов, в первую очередь winutils.exe и hadoop.dll. С этими файлами namenode и datanode успешно запущены. Думаю вопрос можно закрыть. Я не удалял его на случай, если кто-то столкнется с той же проблемой.
ОБНОВЛЕНО 2. Чтобы собрать пакет «homebrew», я сделал следующее:
- Получил исходники и распаковал их.
- Внимательно прочитайте 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 версии 7.1 | ... Командная строка (я изменил этот ярлык, добавив параметр /release в командную строку для создания выпускных версий собственного кода). Все последующие шаги выполняются из окна командной строки 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 пакет -Pdist -DskipTests
Вы можете попробовать без 'skipTests', но на моей машине некоторые тесты не прошли, и сборка была прекращена. Это может быть связано с проблемами с символическими ссылками, упомянутыми в BUILDING .txt. 8. Выбрал результат в hadoop-dist\target\hadoop-2.1.0-beta (исполняемые файлы Windows и библиотеки DLL находятся в папке «bin»)