Запуск Apache Hadoop 2.1.0 в Windows

Я новичок в 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" )

Ответ 1

Я выполнил следующие шаги для установки Hadoop 2.2.0

Шаги по созданию дистрибутива Hadoop bin для Windows

  • Загрузите и установите Microsoft Windows SDK v7.1.

  • Загрузите и установите инструмент командной строки Unix Cygwin.

  • Загрузите и установите Maven 3.1.1.

  • Загрузите Buffers Buffers 2.5.0 и извлеките в папку (скажем c:\protobuf).

  • Добавьте переменные среды JAVA_HOME, M2_HOME и платформу, если они еще не добавлены. Примечание. Имя переменной Платформа чувствительна к регистру. И значение будет либо x64, либо Win32 для построения на 64-битной или 32-битной системе. Edit Path Variable, чтобы добавить каталог bin в Cygwin (скажем C:\cygwin64\bin), каталог bin Maven (скажем C:\maven\bin) и путь установки буферов протокола (например, c:\protobuf).

  • Загрузите файл hasoop-2.2.0-src.tar.gz и извлеките его в папку с коротким путем (например, c:\hdfs), чтобы избежать проблемы с запуском из-за ограничения длины пути в Windows.

  • Выберите Пуск → Все программы → Microsoft Windows SDK v7.1 и откройте командную строку Windows SDK 7.1. Измените каталог на папку исходного кода Hadoop (c:\hdfs). Выполнить пакет mvn с параметрами -Pdist, native-win -DskipTests -Dtar для создания бинарного дистрибутива Windows.

  • Если на предыдущем шаге все будет хорошо, тогда внутренний каталог hasoop-2.2.0.tar.gz будет создан внутри каталога C:\hdfs\hadoop-dist\target\hadoop-2.2.0.

Установить Hadoop

  • Извлеките файл hadoop-2.2.0.tar.gz в папку (скажем c:\hadoop).

  • Добавьте переменную среды HADOOP_HOME и измените переменную пути для добавления каталога bin в HADOOP_HOME (скажем C:\hadoop\bin).

Настроить Hadoop

C:\Hadoop\и т.д.\Hadoop\ядро-site.xml

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://localhost:9000</value>
        </property>
</configuration>

C:\Hadoop\и т.д. \\ Hadoop HDFS-site.xml

<configuration>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/hadoop/data/dfs/namenode</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/hadoop/data/dfs/datanode</value>
        </property>
</configuration>

C:\Hadoop\и т.д. \Hadoop\mapred-site.xml

<configuration>
        <property>
           <name>mapreduce.framework.name</name>
           <value>yarn</value>
        </property>
</configuration>

C:\hadoop\etc\hadoop\yarn-site.xml

<configuration>
        <property>
           <name>yarn.nodemanager.aux-services</name>
           <value>mapreduce_shuffle</value>
        </property>
        <property>
           <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
           <value>org.apache.hadoop.mapred.ShuffleHandler</value>
        </property>
</configuration>

Формат namenode

Только в первый раз, namenode нужно отформатировать.

C:\Users\abhijitg>cd c:\hadoop\bin 
c:\hadoop\bin>hdfs namenode –format

Начать HDFS (Namenode и Datanode)

C:\Users\abhijitg>cd c:\hadoop\sbin
c:\hadoop\sbin>start-dfs

Начать MapReduce aka YARN (диспетчер ресурсов и Node менеджер)

C:\Users\abhijitg>cd c:\hadoop\sbin
c:\hadoop\sbin>start-yarn
starting yarn daemons

Всего четыре отдельных окна командной строки будут автоматически открываться для запуска Namenode, Datanode, Resource Manager, Node Manager

Ссылка: Сборка, установка, настройка и запуск Apache Hadoop 2.2.0 в ОС Microsoft Windows

Ответ 2

У меня была та же проблема, но с недавним hadoop v. 2.2.0. Вот мои шаги для решения этой проблемы:

  • Я построил winutils.exe из источников. Каталог проекта:

    hadoop-2.2.0-src\hadoop-common-project\hadoop-common\src\main\winutils

    Моя ОС: Windows 7. Инструмент для создания: MS Visual Studio Express 2013 для Windows Desktop (бесплатно и может быть загружен из http://www.microsoft.com/visualstudio/). Откройте Studio, File -> Open -> winutils.sln. Щелкните правой кнопкой мыши на решении с правой стороны → Build. В моем случае было несколько ошибок (возможно, вам потребуется исправить свойства проекта, указать папку вывода). Виола! Вы получаете winutils.exe - помещаете его в bin-bin.

  • Далее нам нужно построить hadoop.dll. Некоторые ледяные магии здесь: open

    hadoop-2.2.0-src\hadoop-common-project\hadoop-common\src\main\native\native.sln

    в MS VS; щелкните правой кнопкой мыши по решению → build. У меня куча ошибок. Я создал вручную несколько пропущенных файлов заголовков (не спрашивайте меня, почему они пропущены в исходном tarball!):

    https://github.com/jerishsd/hadoop-experiments/tree/master/sources

    (и не спрашивайте меня, для чего этот проект на git, я не знаю - Google указала его, ища имена заголовочных файлов) Я скопировал

    hadoop-2.2.0-src\hadoop-common-project\hadoop-common\target\winutils\Debug\libwinutils.lib

    (результат шага # 1) в

    hadoop-2.2.0-src\hadoop-common-project\hadoop-common\target\bin

    И, наконец, операция сборки создает hasoop.dll! Поместите его снова в бункер-приемник и счастливо запустите namenode!

Надеюсь, что мои шаги помогут кому-то.

Ответ 3

Хан подготовил двоичные файлы Windows x64 Hadoop 2.2 (см. его blog) и загрузили их в Github.

После помещения двух файлов winutils.exe и hadoop.dll в папку %hadoop_prefix%\bin я получил тот же UnsatisfiedLinkError.

Проблема заключалась в том, что некоторая зависимость hadoop.dll отсутствовала. Я использовал Dependency Walker для проверки зависимостей двоичных файлов и Microsoft Распространяемые компоненты Visual С++ 2010 отсутствовали.

Итак, помимо создания всех компонентов, ответ на проблему -

  • обязательно используйте ту же архитектуру для Java и собственный код. java -version указывает, используете ли вы 32 или x64.
  • затем используйте Dependency Walker, чтобы убедиться, что все исходные двоичные файлы являются чистыми и имеют одну и ту же архитектуру. Иногда отсутствует x64-зависимость, и Windows возвращается к x86, что не работает. См. ответ на другой вопрос.
  • также проверяет, удовлетворяются ли все зависимости исходных двоичных файлов.

Ответ 4

В дополнение к другим решениям здесь является предварительно созданной копией winutil.exe. Загрузите его и добавьте в $HADOOP_HOME/bin. Это работает для меня.

(Источник: Нажмите здесь)

Ответ 5

Вместо использования официальной ветки я бы предложил оптимизированные окна

http://svn.apache.org/repos/asf/hadoop/common/branches/branch-trunk-win/

Вам нужно скомпилировать его, создать winutils.exe под окнами и поместить его в каталог hadoop/bin

Ответ 6

У меня возникла проблема с Hadoop 2.4.1 на Windows 8.1; было несколько отличий от полученного решения, вызванного в основном новой ОС.

Сначала я установил двоичный файл Hadoop 2.4.1, распакуя его в% HADOOP_HOME%.

В предыдущих ответах описывается, как настроить Java, protobuf, cygwin и maven и необходимые переменные среды. Мне пришлось изменить переменную среды Платформа из нечетного значения BCD от HP.

Я загрузил источник из зеркала Apache и распаковал его в короткий каталог ( HADOOP_SRC= C:\hsrc). Maven побежал из стандартной командной строки Windows в этом каталоге: mvn package -DskipTests.

Вместо использования Windows 7 SDK (который я не мог загрузить) или SDK Windows 8.1 (у которого нет инструментов построения командной строки), я использовал бесплатный Microsoft Visual Studio Express 2013 для Windows Desktop. Для сборки Hadoop требуется место MSBuild (C:\Program Files (x86)\MSBuild\12.0) в PATH и требуется, чтобы различные исходные проекты Hadoop были обновлены до более нового (MS VS 2013) формата. Ошибки сборки maven были достаточно хороши, чтобы указать абсолютный путь каждого проекта, так как он провалился, что упростило загрузку проекта в Visual Studio (который автоматически преобразуется после запроса).

После создания я скопировал собственные исполняемые файлы и библиотеки в каталог bin Hadoop. Они были созданы в% HADOOP_SRC%\hadoop-common-project\hadoop-common\target\bin и должны быть скопированы в% HADOOP_HOME%\bin.

Ответ 7

Добавьте файл hadoop.dll(зависит от версии) в каталог system32 в каталоге Windows.

Вы можете получить hasoop.dll в winutils

Ответ 8

Добавление hadoop.dll и hdfs.dll в папку% HADOOP_HOME%\bin сделало трюк для меня.

Ответ 9

Просто установлен Hadoop 2.2.0 в моей среде win7 X64.

следующий файл BUILD.txt заставляет меня сделать это. Обратите внимание, что: dir в hdfs-site.xml и mapred-site.xml начинается с/как ниже

например

  <property>
<name>dfs.namenode.name.dir</name>
<value>file:/hadoop-2.2.0_1/dfs/name</value>
<description></description>
<final>true</final>

Может помочь u!

Ответ 10

Вам может потребоваться скопировать файлы hadoop.dll и winutils.exe из hadoop-common-bin в% HADOOP_HOME%\bin Добавьте% HADOOP_HOME%/bin к переменной% PATH%.

Вы можете скачать hadoop-common из https://github.com/amihalik/hadoop-common-2.6.0-bin

Ответ 11

Download и установить Java в c:/java/

убедитесь, что путь указан таким образом, если java установлен в 'program files ', то hasoop-env.cmd не распознает путь Java

Загрузить Бинарный дистрибутив Hadoop.

Я использую двоичное распределение Hadoop-2.8.1. Кроме того, я бы рекомендовал сохранить путь извлечения как можно короче

Установить переменные среды:

JAVA_HOME = "c:/Java"
HADOOP_HOME="<your hadoop home>"
Path= "JAVA_HOME/bin"
Path = "HADOOP_HOME/bin" 

Hadoop будет работать над окнами, если Hadoop-src построен с использованием maven in ваш компьютер с окнами. Построение Hadoop-src (распространение) будет создайте двоичный дистрибутив Hadoop, который будет работать как родной для Windows версия.

Но если вы не хотите этого делать, загрузите предварительно построенный winutils of Hadoop distribution. Вот ссылка GitHub, в которой есть winutils некоторых версий Hadoop.

если версия, которую вы используете, отсутствует в списке, выполните традиционный метод настройки Hadoop на окнах - ссылка

Если вы нашли свою версию, скопируйте все содержимое папки в путь:/bin/

Задайте все конфигурационные файлы .xml - Ссылка и задайте путь JAVA_HOME в файле hadoop-env.cmd

Из cmd перейдите к:

<HADOOP_HOME>/bin/> hdfs namenode -format
<HADOOP_HOME>/sbin> start-all.cmd

Надеюсь, что это поможет.