Відповідь залежить ... Я щойно встановив 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 pr 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
Я сподіваюся, що це допомагає іншим бачити, що велика перевага програмного забезпечення з відкритим кодом полягає в тому, що ви можете розібратися в цьому, якщо зробити кілька простих логічних кроків.