Hadoop при ошибке сборки/установки Windows

Я пытаюсь установить Apache Hadoop 2.7.1 в Windows x64 (8.1 и Server 2012 R2), но мне не попадаю в цель:

    [INFO] Apache Hadoop Common ............................... FAILURE [ 37.925 s]

Я думаю, что в последние дни я выполнял шаги всех руководств, таких как HadoopOnWindows или это один. Я сделал все предварительные условия, но, как я погуглил, для моей проблемы важны следующие:

  • Укажите путь к MSBuild.exe, например: C:\Windows\Microsoft.NET\Framework64\v4.0.30319; в пути
  • Укажите путь к CMake.
  • Установите Microsoft SDK 7.1 и запустите его с Microsoft SDK 7.1 CMD
  • Пытался собрать: hadoop-common\src\main\winutils\libwinutils.sln и hadoop-common\src\main\winutils\winutils.sln с Visual Studio 2013, но сборка не удалась из-за ошибок компиляции. Visual Studio 2010 даже не хочет их открывать. Я не знаю, как исправить ошибки компиляции (в случае, если это проблема)

Другие люди, похожая проблема
Вот некоторые из похожих тем, за которыми я следую: один, два, три, четыре. В основном я пробовал все предложения, но он все еще ломается.

Ошибка

    [INFO] BUILD FAILURE
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 01:11 min
    [INFO] Finished at: 2015-07-08T15:18:29+02:00
    [INFO] Final Memory: 69M/269M
    [INFO] ------------------------------------------------------------------------
    [ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.3.1:exec (c
    ompile-ms-winutils) on project hadoop-common: Command execution failed. Process
    exited with an error: 1 (Exit value: 1) -> [Help 1]
    [ERROR]
    [ERROR] To see the full stack trace of the errors, re-run Maven with the -e swit
    ch.
    [ERROR] Re-run Maven using the -X switch to enable full debug logging.
    [ERROR]
    [ERROR] For more information about the errors and possible solutions, please rea
    d the following articles:
    [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionE
    xception
    [ERROR]
    [ERROR] After correcting the problems, you can resume the build with the command

    [ERROR]   mvn <goals> -rf :hadoop-common

Помощь
Я понятия не имею, что делать дальше, кажется, я уже все перепробовал. Пожалуйста, помогите мне решить эту ошибку и продолжить установку Hadoop в Windows.

ОБНОВЛЕНИЕ 1 При более внимательном рассмотрении стека ошибок я увидел, что файл Microsoft.Cpp.props не найден. Более того, отсутствовала вся папка Program Files (x86)/MSBuild. Таким образом, я установил Visual Studio 2010, и это решило эту проблему.

Конечно, возникает новая проблема. Я могу собрать libwinutils, но не winutils. Я получаю много ошибок LNK2001:

Error   48  error LNK1120: 18 unresolved externals  C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\x64\Release\winutils.exe  winutils
Error   36  error LNK2001: unresolved external symbol BuildServiceSecurityDescriptor    C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\service.obj   winutils
Error   32  error LNK2001: unresolved external symbol ChownImpl C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\service.obj   winutils
Error   40  error LNK2001: unresolved external symbol CreateEnvironmentBlock    C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\task.obj  winutils
Error   44  error LNK2001: unresolved external symbol CreateLogonTokenForUser   C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\task.obj  winutils
Error   41  error LNK2001: unresolved external symbol DestroyEnvironmentBlock   C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\task.obj  winutils
Error   37  error LNK2001: unresolved external symbol EnableImpersonatePrivileges   C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\service.obj   winutils
Error   34  error LNK2001: unresolved external symbol GetSecureJobObjectName    C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\service.obj   winutils
Error   38  error LNK2001: unresolved external symbol KillTask  C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\service.obj   winutils
Error   43  error LNK2001: unresolved external symbol LoadUserProfileForLogon   C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\task.obj  winutils
Error   35  error LNK2001: unresolved external symbol LogDebugMessage   C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\service.obj   winutils
Error   46  error LNK2001: unresolved external symbol LookupKerberosAuthenticationPackageId C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\task.obj  winutils
Error   31  error LNK2001: unresolved external symbol MIDL_user_allocate    C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\hadoopwinutilsvc_s.obj    winutils
Error   30  error LNK2001: unresolved external symbol MIDL_user_free    C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\hadoopwinutilsvc_s.obj    winutils
Error   47  error LNK2001: unresolved external symbol RegisterWithLsa   C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\task.obj  winutils
Error   33  error LNK2001: unresolved external symbol SplitStringIgnoreSpaceW   C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\service.obj   winutils
Error   42  error LNK2001: unresolved external symbol UnloadProfileForLogon C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\task.obj  winutils
Error   45  error LNK2001: unresolved external symbol UnregisterWithLsa C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\task.obj  winutils
Error   39  error LNK2001: unresolved external symbol wsceConfigRelativePath    C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\service.obj   winutils

ОБНОВЛЕНИЕ 2 Ответ от @tiho решил проблему, упомянутую выше (и я очень благодарен, так как это заняло у меня уже 4 дня). Теперь свежая новая проблема, у цели:

[INFO] Apache Hadoop KMS .................................. FAILURE [  1.531 s]

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.7:run (dist) on project hadoop-kms: An Ant BuildException has occured: java.net.UnknownHostException: archive.apache.org
[ERROR] around Ant part ...<get dest="downloads/apache-tomcat-6.0.41.tar.gz" skipexisting="true" verbose="true" src="http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.41/bin/apache tomcat-6.0.41.tar.gz"/>... @ 5:182 in C:\hadoop-2.7.1-src\hadoop-common project\hadoop-kms\target\antrun\build-main.xml: Unknown host archive.apache.org.

Я нашел хромое решение проблемы выше. Скачал вручную, добавил в папки:

C:\hadoop-2.7.1-src\hadoop-common-project\hadoop-kms\downloads
C:\hadoop-2.7.1-src\hadoop-hdfs- project\hadoop-hdfs-httpfs\downloads
и удалены из файлов:
C:\hadoop-2.7.1-src\hadoop-common-project\hadoop-kms\target \antrun\build-main.xml
C:\hadoop-2.7.1-src\hadoop-hdfs-project\hadoop-hdfs-httpfs\target\antrun\build-main.xml
следующие строки кода:

<mkdir dir="downloads"/>
  <get dest="downloads/apache-tomcat-6.0.41.tar.gz" skipexisting="true" verbose="true" src="http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.41/bin/apache-tomcat-6.0.41.tar.gz"/>

Обратите внимание, что я также использую прокси, я установил прокси в settings.xml и установил PATH в MAVEN_OPTS, как это предлагается в том же ответе от @tiho. Это проблема? помимо предложенных там вариантов, я также добавил пароль и имя пользователя в файл MAVEN_OPTS.

Обратите внимание, что у меня есть доступ: http://archive.apache.org/dist/tomcat/tomca%20t-6/v6.0.41/bin/apache-tomcat-6.0.41.tar.gz с помощью моего браузера.

Но мне все еще любопытно, как правильно решить проблему, потому что эта проблема продолжает появляться, и мне нужно снова сделать то же самое.

Обновление 3 Как говорится, самый счастливый момент этой недели:

[INFO] ------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------
[INFO] Total time: 21:05 min
[INFO] Finished at: 2015-07-10T11:33:17+02:00
[INFO] Final Memory: 228M/672M
[INFO] ------------------------------------------------

person Cristian Ciobotea    schedule 08.07.2015    source источник
comment
Вы пробовали спросить на serverfault.com?   -  person 0x416e746f6e    schedule 08.07.2015
comment
Неа. зачем мне спрашивать там и должен ли я копировать этот пост там?   -  person Cristian Ciobotea    schedule 08.07.2015
comment
Не уверен. Но если вы не получите ответа здесь, возможно, там вы сможете получить помощь.   -  person 0x416e746f6e    schedule 09.07.2015


Ответы (4)


Мне понадобился целый день, чтобы собрать его... У Microsoft, очевидно, много проблем с обратной совместимостью. Было бы полезно, если бы Hadoop перешел на более новую цепочку инструментов.

Вот ключевые шаги, которые мне пришлось выполнить (помимо тех, что упомянуты в документе). Это использует компилятор Windows SDK, а не VS 2010 (предполагается, что это возможно с VS 2010, но я не пробовал):

  1. Удалите Visual Studio 2013 (я бы порекомендовал удалить любую Visual Studio >= 2010) — это нужно, чтобы избавиться от ошибки MSBUILD : Configuration error MSB4146: Cannot evaluate the property expression "$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V120\'))"
  2. Удалите распространяемый Visual Studio C++ 2010 (x64 + x86), чтобы избежать ошибки при установке Windows SDK 7.1
  3. Полностью удалите .NET Framework 4.5, чтобы избежать сбоя при преобразовании в COFF: файл недействителен или поврежден
  4. Перезагрузить
  5. Установите .NET Framework 4.0
  6. Установите Windows SDK 7.1

Я добавил в свой PATH (в оболочке Windows SDK) папку bin моей установки Git (для инструментов GNU), папку bin CMake и папку, содержащую protoc.exe. Кроме того (но большинству людей это не нужно), мне пришлось настроить Maven для использования моего HTTP-прокси, сначала отредактировав settings.xml, как указано в документации Maven, а также определив переменную среды MAVEN_OPTS=-Dmy.proxy.host -Dhttp.proxyPort=my.proxy.port, иначе в какой-то момент был тайм-аут. во время сборки.

Обратите внимание, что я заметил большое количество предупреждений во время сборки: я подозреваю, что некоторые из них были вызваны использованием Java SDK 1.8 вместо 1.7. Однако после того, как я, наконец, увидел BUILD SUCCESS, мне не хотелось снова пробовать с 1.7.

person tiho    schedule 10.07.2015
comment
Привет, Тихо, спасибо за подробное объяснение. К сожалению, я столкнулся с неразрешенным внешним символом, описанным выше. Я следовал инструкциям, опубликованным, но все еще не повезло. Visual Studio 2010, java 1.8, 32-разрядная версия Windows 10, Hadoop 2.6 Я не могу собрать winutils и другую библиотеку с помощью VS. Это должно быть проблемой с настройкой моих систем. Я не думаю, что мне нужно исправлять какой-либо исходный код, это может быть проблема с неправильной конфигурацией. Любой комментарий будет высоко оценен. С уважением, Пол - person Playing With BI; 27.02.2016
comment
@PlayingWithBI Боюсь, я не могу сказать больше, чем то, что я написал выше, я действительно не пробовал никаких альтернативных настроек. Но я вижу, что вы упоминаете VS 2010, в то время как я лично удалил его и вместо этого использовал компилятор Windows SDK. Может быть, вы тоже могли бы попробовать? - person tiho; 01.03.2016

Мне удалось создать его с помощью версии сообщества Visual Studio 2015.

Вот как я его построил:

Моя среда

Вот мой список покупок:

  • Windows 10
  • JDK 1.8.0_51
  • Мавен 3.3.3
  • Findbugs 1.3.9 (я этим не пользовался)
  • ProtocolBuffer 2.5.0 (здесь я не выбирал самую последнюю и лучшую версию — она должна быть 2.5.0)
  • CMake 3.3.0
  • Visual Studio 2015 Community Edition
  • GnuWin32 0.6.3 - немного болезненная установка, но cygwin тоже.
  • zlib 1.2.8
  • интернет-соединение

Переменные системной среды Windows

  • JAVA_HOME = "C:\Program Files\Java\jdk1.8.0_51"
  • MAVEN_HOME = c:\apache-maven-3.3.3

(убедитесь, что вы указываете выше на свою версию JDK и установку maven)

Я добавил следующее к переменной Path в моей системной среде Windows:

;%MAVEN_HOME%\bin;C:\Windows\Microsoft.NET\Framework64\v4.0.30319;c:\zlib

Странный путь «C:\Windows\Microsoft.NET\Framework64\v4.0.30319» — это расположение MSBuild.exe, которое требуется в процессе сборки.

Буферы Protoc 2.5.0

О нет, еще одна сборка только для Unix/Linux? Я скачал пакет Google с именем protoc-2.5.0-win32.zip. Затем извлек бинарный файл (protoc.exe) в c:\windows\system32 - просто ленивый способ поместить его по пути.

Я не уверен на 100% в эффекте наличия компонента win32 для этой сборки win64. Но: «Hadoop 0.23+ требует, чтобы JAR буферов протокола (protobufs.jar) находился в пути к классам как клиентов, так и серверов; собственные двоичные файлы необходимы для компиляции этой и более поздних версий Hadoop». - http://wiki.apache.org/hadoop/ProtocolBuffers.

Итак, я понимаю, что исполняемый файл win32 используется только во время процесса сборки (эквивалент jar должен быть упакован в сборку).

Если он каким-либо образом используется для компиляции нативного кода, мы могли оставить некоторые указатели не по порядку. Я вернусь к этому, когда смогу.

Настройка исходных кодов Hadoop

Ну, это было необходимо, чтобы позволить сборке выполняться. Это не должно влиять на качество самой сборки, но давайте иметь в виду, что в результате получился неофициальный, неподдерживаемый хауоп, предназначенный для среды разработки, на свой страх и риск.

Миграция проектов VS

В Visual Studio 2015 необходимо открыть следующие файлы:

\hadoop-common-project\hadoop-common\src\main\winutils\winutils.vcxproj \hadoop-common-project\hadoop-common\src\main\native\native.vcxproj

Visual Studio будет жаловаться на их старую версию. Все, что вам нужно сделать, это сохранить все и закрыть.

Включение генерации проекта cmake VS 2015 для hdfs

В строке 441 файла \hadoop-hdfs-project\hadoop-hdfs\pom.xml измените значение else следующим образом:

‹condition property="generator" value="Visual Studio 10" else="Visual Studio 14 2015 Win64"›

(значение "значение" относится к win32 - вы можете отредактировать его при сборке для win32).

Создание

Вы должны попытаться найти в Windows «Командную строку разработки для VS2015». Мне все еще интересно, что в этом такого особенного, но дело в том, что это будет работать только с этим.

Дополнительные переменные среды Это следует сделать в командной строке:

установить платформу = x64

установите ZLIB_HOME=C:\zlib\include (в отличие от официальных инструкций, это должно указывать на включаемую папку).

Наконец-то построил

Перейдите в исходную папку Hadoop и введите:

mvn package -Pdist,native-win -DskipTests -Dtar

Что дальше?

Следуйте официальной документации, чтобы настроить и запустить свой экземпляр Hadoop.

Я постараюсь сохранить ссылку на бинарники в своем блоге:

http://kplitzkahran.blogspot.co.uk/2015/08/hadoop-271-for-windows-10-binary-build.html

person Romeu Flores    schedule 14.08.2015
comment
Действительно полезный ответ! Я успешно построил hadoop на VS2015 + Windows 10 с помощью этого ответа. - person Haibara Ai; 16.02.2016
comment
В файле пакета Hadoop 3.0.1 "\hadoop-hdfs-project\hadoop-hdfs\pom.xml" нет свойства для установки версии Visual Studio. Любая идея в этом? - person Dinesh Kumar P; 06.04.2018

Я успешно собрал Hadoop 3.0.2 с помощью Visual Studio 2017 в Windows 10.

Вот как выглядят мои настройки:

  1. Windows 10
  2. Версия сообщества Visual Studio 2017
  3. Мавен 3.5.0
  4. JDK 1.8.0_144
  5. Cmake 3.10.0-rc1
  6. Буфер протокола 2.5.0
  7. Сигвин

Сначала я открываю эти два файла решения в VS 2017 и сохраняю.

hadoop-3.0.2-src\hadoop-common-project\hadoop-common\src\main\winutils\winutils.sln

а также

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

Это перенесет эти два проекта из VS 2010 в VS 2017.

Во-вторых, мне нужно изменить строку 141 файла pom, расположенного по адресу

D:\hadoop-3.0.2-src\hadoop-hdfs-project\hadoop-hdfs-native-client\pom.xml

to

<condition property="generator" value="Visual Studio 10" else="Visual Studio 15 2017 Win64">

Это обеспечит использование VS 2017 в процессе сборки.

Я также столкнулся с проблемой, когда MSBuild жалуется, что команда длинная, а затем перестает работать, я думаю, что это связано с расположением репозитория Maven по умолчанию. Чтобы исправить это, я добавил следующую строку

<localRepository>D:/maven_repo</localRepository>

подать

apache-maven-3.5.0\conf\settings.xml

чтобы переместить репозиторий Maven в новое место (в данном случае D:/maven_repo).

Наконец, я открыл x64 Native Tools Command Prompt for VS 2017, cd в исходной папке hadoop и ввел следующую команду:

mvn clean package -Pdist,native-win -DskipTests -Dtar -Dmaven.repo.local=D:\maven_repo

Я трачу более 10 часов на устранение всех проблем, надеюсь, мое решение поможет и другим.

person ascetic652    schedule 21.07.2018

Я хотел бы поделиться своим опытом сборки Hadoop 3.1.2 на Windows 8.1. Я потратил много времени на исправление ошибок сборки, но все, что мне было нужно, это раздел «Building on Windows» в файле Building.txt в корневой папке исходников Hadoop.

Я использовал «Командную строку x64 Native Tools для VS 2017».

Итак, вот мои шаги

1. Read '\hadoop-3.1.2-src\Building.txt', section 'Building on Windows'.

На самом деле этого может быть достаточно, чтобы понять, что вам нужно делать, но в VS 2017 процесс немного отличается.

2. Put sources into short path to avoid 'the command line is too long' error.

Я использовал папку d:\hdp\

3. As it's stated in Building.txt, set up environment using '\hadoop-3.1.2-src\dev-support\win-paths-eg.cmd'.

Когда вы используете Native Tools, вам не нужна команда CALL в конце файла .cmd, поэтому закомментируйте ее:

@REM CALL "%MSVS%\VC\vcvarsall.bat" %VCVARSPLAT%

Мои настройки выглядят так:

SET Platform=x64
SET VCVARSPLAT=amd64

@REM ******************
@REM Forcibly move the Maven local repo
@REM (use short path to avoid 'the command line is too long' error)

SET MAVEN_OPTS=-Dmaven.repo.local=D:\.m2

@REM *******************************************
@REM
@REM Locations of your bits and pieces
@REM
@REM NOTE: cmake is assumed to already be on the
@REM command path
@REM (it's true when you use Native Tools Command Prompt)

SET MAVEN_HOME=%MAVEN_HOME%
SET JAVA_HOME=%JAVA_HOME%
@REM SET MSVS=C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional
SET PROTO_BIN=D:\tools\protoc-2.5.0-win32
SET GIT_HOME=C:\Program Files (x86)\Git
set ZLIB_HOME=D:\tools\zlib-1.2.11

SET PATH=%JAVA_HOME%\bin;%MAVEN_HOME%\bin;%PROTO_BIN%;%GIT_HOME%\bin;%PATH%

@REM CALL "%MSVS%\VC\vcvarsall.bat" %VCVARSPLAT%

Конечно, вам нужно, чтобы Java, Maven, ProtoBuf, Git и ZLib были установлены по указанным выше путям.

4. Run "x64 Native Tools Command Prompt for VS 2017"

Из «Командной строки x64 Native Tools для VS 2017» перейдите в исходную папку Hadoop, запустите «win-paths-eg.cmd» и начните сборку с помощью Maven:

d:
cd D:\hdp
D:\hdp\dev-support\win-paths-eg.cmd
mvn package -Pdist,native-win -DskipTests -Dtar
5. Wait ~30-40 minutes.

Вот и все, народ!

person ganisimov    schedule 10.10.2019