В настоящее время я настраиваю hadoop на сервере под управлением CentOS. Когда я запускаю start-dfs.sh или stop-dfs.sh, я получаю следующую ошибку:
WARN util.NativeCodeLoader: не удается загрузить встроенную библиотеку hadoop для вашей платформы ... используя встроенные классы java, где это применимо
Я предполагаю, что вы используете 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 2.6 из tarball на 64-разрядную CentOS 6.6. Установка Hadoop действительно шла с готовой 64-разрядной встроенной библиотекой. Для моей установки это здесь:
/opt/hadoop/lib/native/libhadoop.so.1.0.0
И я знаю, что она 64-разрядная:
[hadoop@VMWHADTEST01native]$ ldd libhadoop.so.1.0.0 ./libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0) linux-vdso.so.1 => (0x00007fff43510000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f9be553a000) libc.so.6 => /lib64/libc.so.6 (0x00007f9be51a5000) /lib64/ld-linux-x86-64.so.2 (0x00007f9be5966000)
К сожалению, я по глупости пропустил ответ, который прямо бросился мне в глаза, когда я был сосредоточен на: "Эта библиотека 32 или 64-разрядная?":
`GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)
Итак, урок усвоен. В любом случае, остальное, по крайней мере, привело меня к тому, что я смог подавить предупреждение. Итак, я продолжил и сделал все, что рекомендовано в других ответах, чтобы указать путь к библиотеке, используя переменную окружения HADOOP_OPTS, но безрезультатно. Итак, я просмотрел исходный код. Модуль, генерирующий ошибку, выдает подсказку (util.NativeCodeLoader):
15/06/1818:59:23 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Итак, перейдите сюда, чтобы посмотреть, что это делает:
Ах, есть некоторое ведение журнала на уровне отладки - давайте включим это, чтобы посмотреть, получим ли мы дополнительную помощь. Это делается путем добавления следующей строки в файл $HADOOP_CONF_DIR / log4j.properties:
Затем я запустил команду, которая генерирует исходное предупреждение, например stop-dfs.sh, и получил это лакомство:
15/06/1819:05:19 DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: /opt/hadoop/lib/native/libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /opt/hadoop/lib/native/libhadoop.so.1.0.0)
И ответ показан в этом фрагменте сообщения отладки (то же самое, что "пыталась" сообщить мне предыдущая команда ldd:
`GLIBC_2.14' not found (required by opt/hadoop/lib/native/libhadoop.so.1.0.0)
Какая у меня версия GLIBC? Вот простой способ узнать:
Итак, не удается обновить мою ОС до версии 2.14. Единственное решение - создать собственные библиотеки из исходных текстов в моей ОС или подавить предупреждение и просто игнорировать его на данный момент. Я решил пока просто подавить раздражающее предупреждение (но в будущем планирую создавать из исходных текстов), используя те же параметры ведения журнала, которые мы использовали для получения сообщения debug, за исключением того, что теперь просто сделайте его уровнем ОШИБКИ.
Я надеюсь, это поможет другим увидеть, что большое преимущество программного обеспечения с открытым исходным кодом заключается в том, что вы можете разобраться во всем этом, выполнив несколько простых логических шагов.
Ответ 4
У меня была такая же проблема. Она решена путем добавления следующих строк в .bashrc: