В настоящее время я настраиваю hadoop на сервере под управлением CentOs . Когда я запускаю start-dfs.sh
или stop-dfs.sh
, я получаю следующую ошибку:
WARN util.NativeCodeLoader: невозможно загрузить библиотеку native-hadoop для вашей платформы ... с использованием встроенных классов java, где это применимо
Я использую Hadoop 2.2.0.
При поиске в Интернете появилась ссылка: http://balanceandbreath.blogspot.ca/2013/01/utilnativecodeloader-unable-to-load.html.
Тем не менее, содержимое /native/
каталога в hadoop 2.x кажется другим, поэтому я не уверен, что делать.
Я также добавил эти две переменные окружения в hadoop-env.sh
:
export HADOOP_OPTS = "$ HADOOP_OPTS -Djava.library.path = / usr / local / hadoop / lib /"
export HADOOP_COMMON_LIB_NATIVE_DIR = "/ usr / local / hadoop / lib / native /"
Любые идеи?
Ответы:
Я предполагаю, что вы используете Hadoop на 64-битной CentOS. Причина, по которой вы увидели это предупреждение, заключается в том, что нативная библиотека Hadoop
$HADOOP_HOME/lib/native/libhadoop.so.1.0.0
была скомпилирована в 32-битной версии .В любом случае, это всего лишь предупреждение, и оно не повлияет на функциональность Hadoop.
Вот способ, если вы действительно хотите устранить это предупреждение, скачать исходный код Hadoop и перекомпилировать
libhadoop.so.1.0.0
в 64-битной системе, а затем заменить 32-битную.Шаги о том, как перекомпилировать исходный код, включены здесь для Ubuntu:
Удачи.
источник
hadoop-common-project/hadoop-common
и этогоhadoop-hdfs-project/hadoop-hdfs
достаточно.Просто добавьте слово родной к вашему
HADOOP_OPTS
так:PS: спасибо Searene
источник
Ответ зависит ... Я только что установил Hadoop 2.6 из tarball на 64-битный CentOS 6.6. Установка Hadoop действительно шла с предустановленной 64-битной нативной библиотекой. Для моей установки это здесь:
И я знаю, что это 64-битный:
К сожалению, я тупо проигнорировал ответ, тут же уставившись мне в лицо, когда я сосредоточился на том, «Является ли эта библиотека 32 или 64-битной?»:
Итак, урок усвоен. Во всяком случае, остальные, по крайней мере, привели меня к тому, что я смог подавить предупреждение. Поэтому я продолжил и сделал все, что было рекомендовано в других ответах, чтобы указать путь к библиотеке, используя переменную среды HADOOP_OPTS, но безрезультатно. Поэтому я посмотрел на исходный код. Модуль, который генерирует ошибку, сообщает вам подсказку ( util.NativeCodeLoader ):
Итак, чтобы посмотреть, что он делает:
http://grepcode.com/file/repo1.maven.org/maven2/com.ning/metrics.action/0.2.6/org/apache/hadoop/util/NativeCodeLoader.java/
Ах, есть некоторая регистрация уровня отладки - давайте обратимся к этому, посмотрим, получим ли мы дополнительную помощь. Это делается путем добавления следующей строки в файл $ HADOOP_CONF_DIR / log4j.properties:
Затем я запустил команду, которая генерирует исходное предупреждение, например stop-dfs.sh, и получил это:
И ответ раскрывается в этом фрагменте сообщения отладки (то же самое, что предыдущая команда ldd «пыталась» сказать мне:
Какая версия GLIBC у меня есть? Вот простой трюк, чтобы узнать:
Итак, я не могу обновить мою ОС до 2.14. Единственное решение состоит в том, чтобы создать собственные библиотеки из источников в моей ОС или отключить предупреждение и просто проигнорировать его. Я решил пока просто отключить раздражающее предупреждение (но планирую строить из источников в будущем) покупать, используя те же опции ведения журнала, которые мы использовали для получения отладочного сообщения, за исключением того, что теперь просто сделайте его уровнем ОШИБКА.
Я надеюсь, что это поможет другим понять, что большое преимущество программного обеспечения с открытым исходным кодом состоит в том, что вы можете разобраться в этом, если предпримете несколько простых логических шагов.
источник
Я была такая же проблема. Это решается добавлением следующих строк
.bashrc
:источник
В моем случае после сборки hadoop на моей 64-битной ОС Linux mint я заменил встроенную библиотеку в
hadoop/lib
. Тем не менее проблема сохраняется. Тогда я разобрался с хэдупом, указывающимhadoop/lib
не наhadoop/lib/native
. Поэтому я просто переместил весь контент из нативной библиотеки в ее родительский. И предупреждение просто исчезло.источник
Это также будет работать:
источник
После продолжительного исследования, предложенного Коти, проблема была решена.
ура
источник
Для тех, кто работает в OSX с Hadoop, установленным через Homebrew, выполните следующие действия, заменив путь и версию Hadoop, где это необходимо.
затем обновите hadoop-env.sh
источник
источник
@zhutoulala - FWIW, ваши ссылки работали для меня с Hadoop 2.4.0, за одним исключением, я должен был сказать maven, чтобы он не создавал javadocs. Я также использовал патч в первой ссылке для 2.4.0, и он работал нормально. Вот команда Maven, которую я должен был выпустить
После сборки и перемещения библиотек не забудьте обновить hadoop-env.sh :)
Подумал, что это может помочь кому-то, кто столкнулся с теми же препятствиями, что и я
источник
Переместите ваши скомпилированные файлы нативной библиотеки в
$HADOOP_HOME/lib
папку.Затем установите переменные среды, отредактировав
.bashrc
файлУбедитесь, что ваши файлы скомпилированной нативной библиотеки находятся в
$HADOOP_HOME/lib
папке.он должен работать.
источник
источник
Эта строка прямо здесь:
Из ответа KunBetter, работал на меня. Просто добавьте его в файл .bashrc и перезагрузите содержимое .bashrc
источник
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
и это сработало.Эта строка прямо здесь:
От KunBetter ответ, где деньги
источник
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
иexport LD_LIBRARY_PATH=$HADOOP_HOME/lib/native:$LD_LIBRARY_PATH
У меня была та же проблема с JDK6, я изменил JDK на JDK8, проблема решена. Попробуйте использовать JDK8 !!!
источник
В дополнение к принятому ответу @zhutoulala, есть обновление, позволяющее ему работать с последней стабильной версией (2.8) на платформах ARMHF (Raspberry Pi 3 модель B). Сначала я могу подтвердить, что вы должны перекомпилировать нативные библиотеки в 64-битную ARM, другие ответы, основанные на установке некоторых переменных среды, не будут работать. Как указано в документации Hadoop, встроенные библиотеки являются 32-битными.
Шаги высокого уровня, указанные в первой ссылке ( http://www.ercoppa.org/posts/how-to-compile-apache-hadoop-on-ubuntu-linux.html ), являются правильными. По этому адресу http://www.instructables.com/id/Native-Hadoop-260-Build-on-Pi/ вы получите более подробную информацию, относящуюся к Raspberry Pi, но не для Hadoop версии 2.8.
Вот мои показания для Hadoop 2.8:
Метод исправления файла CMake должен быть изменен. Более того, файлы для исправления не совпадают. К сожалению, на JIRA не принято никакого патча, специфичного для 2.8. По этому URL-адресу ( https://issues.apache.org/jira/browse/HADOOP-9320 ) вы должны скопировать и вставить предложенный Андреасом Мутчеллером патч в ваш namenode:
После успешной сборки:
И замените содержимое каталога lib / native вашей установки Hadoop содержимым этого архива. Предупреждающее сообщение при запуске Hadoop должно исчезнуть.
источник
Для установки Hadoop гораздо проще установить бесплатную версию от Cloudera. Он поставляется с приятным графическим интерфейсом, который упрощает добавление узлов, не требует компиляции или заполнения зависимостей, он поставляется с такими вещами, как куст, свинья и т. Д.
http://www.cloudera.com/content/support/en/downloads.html
Шаги: 1) Скачать 2) Запустить его 3) Перейти в веб-интерфейс (1.2.3.4:7180) 4) Добавить дополнительные узлы в веб-интерфейс (НЕ устанавливайте программное обеспечение Cloudera на других узлах, оно делает все за вас) 5) В веб-интерфейсе перейдите на главную страницу, нажмите Hue и Hue Web UI. Это дает вам доступ к Hive, Pig, Sqoop и т. Д.
источник
Проверенное средство от предыдущих сообщений:
1) Проверено, что
libhadoop.so.1.0.0
поставляемый с дистрибутивом Hadoop скомпилирован для моей архитектуры машины, а именно x86_64:2) Добавлена
-Djava.library.path=<path>
кHADOOP_OPT
вhadoop-env.sh
:Это действительно заставило исчезнуть надоедливое предупреждение.
источник
Во-первых: вы можете изменить версию glibc. CentOS предоставляет безопасные программы традиционно, это также означает, что версия старая, такая как glibc, protobuf ...
Вы можете сравнить версию текущего glibc с необходимым glibc.
Во-вторых: если версия текущего glibc старая, вы можете обновить glibc. DownLoad Glibc
Если версия текущего идентификатора glibc верна, вы можете добавить слово native к вашему HADOOP_OPTS.
источник
Я не использую CentOS. Вот что у меня есть в Ubuntu 16.04.2, hadoop-2.7.3, jdk1.8.0_121. Запустите start-dfs.sh или stop-dfs.sh без ошибок:
Замените / j01 / sys / jdk, / j01 / srv / hadoop на ваш путь установки
Я также выполнил следующие действия для однократной установки в Ubuntu, что устраняет необходимость многократного ввода паролей при запуске start-dfs.sh:
Замените пользователя вашим именем пользователя
источник
По сути, это не ошибка, это предупреждение в кластере Hadoop. Вот только мы обновляем переменные среды.
источник