Запуск Apache Hadoop 2.1.0 в Windows

Я новичок в 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», я сделал следующее:

  1. Получил исходники и распаковал их.
  2. Внимательно прочитайте BUILDING.txt.
  3. Установленные зависимости:
    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)
  4. Запущена командная строка Windows SDK. Старт | Все программы | Microsoft Windows SDK версии 7.1 | ... Командная строка (я изменил этот ярлык, добавив параметр /release в командную строку для создания выпускных версий собственного кода). Все последующие шаги выполняются из окна командной строки SDK)
  5. Настройте среду:

    установить 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%  
  1. Изменен каталог на корневую папку с исходниками (BUILDING.txt предупреждает, что существуют некоторые ограничения на длину пути, поэтому корень с исходниками должен иметь короткое имя — я использовал D:\hds)
  2. Процесс сборки:

    mvn пакет -Pdist -DskipTests

Вы можете попробовать без 'skipTests', но на моей машине некоторые тесты не прошли, и сборка была прекращена. Это может быть связано с проблемами с символическими ссылками, упомянутыми в BUILDING .txt. 8. Выбрал результат в hadoop-dist\target\hadoop-2.1.0-beta (исполняемые файлы Windows и библиотеки DLL находятся в папке «bin»)


person Hatter    schedule 05.09.2013    source источник
comment
@mamdouh alramadan Спасибо за совет. Может случиться так, что я переключусь на какой-нибудь вариант Linux с Hadoop. Но на данный момент вся моя среда основана на Windows, и наличие раздела HDFS с большими файлами данных внутри виртуальной машины внутри хост-ОС не кажется мне... изящным.   -  person Hatter    schedule 05.09.2013


Ответы (13)


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

Действия по созданию дистрибутива bin Hadoop для Windows

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

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

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

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

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

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

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

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

Установите Hadoop

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

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

Настроить Hadoop

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

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

C:\hadoop\etc\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\etc\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.

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, также известный как YARN (диспетчер ресурсов и диспетчер узлов)

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

person Abhijit    schedule 03.11.2013
comment
Ссылки на внешние ресурсы приветствуются, но, пожалуйста, добавьте контекст вокруг ссылки, чтобы ваши коллеги-пользователи имели некоторое представление о том, что это такое и почему оно там. Всегда цитируйте наиболее релевантную часть важной ссылки на случай, если целевой сайт недоступен или навсегда отключится. stackoverflow.com/help/how-to-answer - person Wouter J; 04.11.2013
comment
Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится. - person bensiu; 04.11.2013
comment
Спасибо за подробный мастер-класс. :) - person dharam; 03.07.2014
comment
Какая польза от Cygwin и Protocol Buffers 2.5.0 здесь? - person Bhuvan; 13.04.2015

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

Поместив два бинарника winutils.exe и hadoop.dll в папку %hadoop_prefix%\bin, я получил тот самый UnsatisfiedLinkError.

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

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

person Peter Kofler    schedule 30.05.2014
comment
Dependency Walker показывает архитектуру в названии. - person Peter Kofler; 24.11.2016
comment
обязательно используйте одну и ту же архитектуру для Java и собственного кода. java -version сообщает вам, используете ли вы 32 или x64. Это мне поможет! - person Ben; 21.12.2016

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

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

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

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

  2. Далее нам нужно построить hadoop.dll. Вот вам и волшебство вуду: открыть

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

    в МС ВС; щелкните правой кнопкой мыши решение -> построить. У меня куча ошибок. Я вручную создал несколько отсутствующих заголовочных файлов (не спрашивайте меня, почему они отсутствуют в исходном архиве!):

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

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

    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

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

Надеюсь, мои действия кому-нибудь помогут.

person Aleksei Egorov    schedule 23.10.2013
comment
Что ж, в моем случае было меньше магии Вуду, но больше шагов. Я просто следил за BUILDING.txt из исходников. Мне пришлось установить некоторые зависимости: бесплатный Windows SDK, Maven, библиотеку ProtocolBuffer и набор утилит Unix. После этого Maven сделал всю работу. Конечно, он создавал не только нативный код, но и пакеты Java. Единственная проблема, которую я помню, это то, что некоторые неудачные тесты отменили процесс сборки. Поэтому мне пришлось отключить их с помощью параметров командной строки Maven. - person Hatter; 24.10.2013
comment
@Aleksei- я пытался собрать native.sln. Я получил ошибки для отсутствующих файлов заголовков. Можете ли вы сказать мне путь, куда я должен положить недостающие файлы? - person Aviral Kumar; 31.08.2014

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

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

person Prasad D    schedule 10.12.2014
comment
@Prasad D Я использовал ваши утилиты и смог успешно запустить HDFS. Но это не удается при запуске YARN. Не могли бы вы проверить и ответить stackoverflow.com/questions/30964216 - person Kaushik Lele; 21.06.2015
comment
Спасибо. Есть ли ссылка на hadoop-2.6? - person Tagar; 14.09.2015

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

Вы можете получить hadoop.dll по адресу winutils.

person futuredaemon    schedule 09.10.2017

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

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

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

person Marco Seravalli    schedule 04.10.2013
comment
Не могли бы вы предоставить хорошую ссылку с инструкциями по созданию этого материала под окнами? - person Aleksei Egorov; 23.10.2013
comment
На самом деле я построил Hadoop на машине с Linux, потому что там были проблемы с ant / maven и т. Д. В этой части я просто следовал инструкциям, представленным на веб-сайте, если я правильно помню. Затем для сборки winutils вы можете использовать визуальную студию, также эта часть была простой, просто загрузите проект и соберите его. - person Marco Seravalli; 23.10.2013

Возможно, вам потребуется скопировать файлы 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

person Vikash Pareek    schedule 12.09.2017
comment
Не работает, пока я не положу hadoop.dll в C:\Windows\System32 в win10+64. - person yuxh; 26.09.2017

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

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

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

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

Вместо использования Windows 7 SDK (который мне не удалось загрузить) или Windows 8.1 SDK (в котором нет инструментов сборки из командной строки) я использовал бесплатную Microsoft Visual Studio Express 2013 для рабочего стола Windows< /сильный>. Для сборки 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.

person leifbennett    schedule 04.08.2014

Добавление hadoop.dll и hdfs.dll в папку %HADOOP_HOME%\bin помогло мне.

person Kunal Kanojia    schedule 07.02.2017

Только что установил Hadoop 2.2.0 в моей среде win7 X64.

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

E.G

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

May help u!

person Derry    schedule 29.10.2013

Загрузите и установите Java в c:/java/

убедитесь, что путь указан таким образом, если java установлен в «программных файлах», то hadoop-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 будет работать в Windows, если Hadoop-src создается с использованием maven на вашем компьютере с Windows. Создание Hadoop-src(дистрибутив) создаст бинарный дистрибутив Hadoop, который будет работать как родная версия Windows.

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

если используемой версии нет в списке, воспользуйтесь обычным методом настройки Hadoop в Windows — ссылка

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

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

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

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

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

person Raxit Solanki    schedule 05.12.2017


После нескольких проб и ошибок я заработал с приведенным ниже решением.

Изменения Windows:

  1. Загрузите ZIP-файл winutils с https://github.com/steveloughran/winutils.
  2. Распакуйте zip в C:\winutils.
  3. Откройте экран Windows Environment Variables и добавьте следующее System Variable.

HADOOP_HOME = C:\winutils\hadoop-3.0.0

  1. Под системной переменной Path добавить

%HADOOP_HOME%\bin 5. Перезагрузите систему.

Изменения Maven:

  <properties>

    <java.version>1.8</java.version>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

    <scala.version>2.12</scala.version>
    <spark.version>3.0.1</spark.version>
    <hadoop.version>3.0.0</hadoop.version>  <!-- Note: HADOOP Version used is the one available for winutils -->

  </properties>

  <dependencies>

    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_${scala.version}</artifactId>
      <version>${spark.version}</version>
<!--  <scope>provided</scope> -->
    </dependency>

    <!-- Hadoop-->
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-common</artifactId>
      <version>${hadoop.version}</version>
    </dependency>

    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
      <version>${hadoop.version}</version>
    </dependency>

    <!-- For S3 Read (optional) -->
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-aws</artifactId>
      <version>${hadoop.version}</version>
    </dependency>
person Arjun SK    schedule 22.11.2020