Ответ зависит ... Я только что установил Hadoop 2.6 из tarball на 64-битный CentOS 6.6. Установка Hadoop действительно шла с предустановленной 64-битной нативной библиотекой. Для моей установки это здесь:
/opt/hadoop/lib/native/libhadoop.so.1.0.0
И я знаю, что это 64-битный:
[hadoop@VMWHADTEST01 native]$ 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/18 18:59:23 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Итак, чтобы посмотреть, что он делает:
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:
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=DEBUG
Затем я запустил команду, которая генерирует исходное предупреждение, например stop-dfs.sh, и получил это:
15/06/18 19: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 у меня есть? Вот простой трюк, чтобы узнать:
[hadoop@VMWHADTEST01 hadoop]$ ldd --version
ldd (GNU libc) 2.12
Итак, я не могу обновить мою ОС до 2.14. Единственное решение состоит в том, чтобы создать собственные библиотеки из источников в моей ОС или отключить предупреждение и просто проигнорировать его. Я решил пока просто отключить раздражающее предупреждение (но планирую строить из источников в будущем) покупать, используя те же опции ведения журнала, которые мы использовали для получения отладочного сообщения, за исключением того, что теперь просто сделайте его уровнем ОШИБКА.
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR
Я надеюсь, что это поможет другим понять, что большое преимущество программного обеспечения с открытым исходным кодом состоит в том, что вы можете разобраться в этом, если предпримете несколько простых логических шагов.