Odpowiedź zależy ... Właśnie zainstalowałem Hadoop 2.6 z tarball na 64-bitowym CentOS 6.6. Rzeczywiście, instalacja Hadoop rzeczywiście zawierała 64-bitową bibliotekę natywną. Do mojej instalacji jest tutaj:
/opt/hadoop/lib/native/libhadoop.so.1.0.0
I wiem, że to 64-bit:
[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)
Niestety, głupio przeoczyłem odpowiedź, patrząc mi prosto w twarz, kiedy skupiłem się na: „Czy ta biblioteka ma 32 wersje na 64-bit?”:
`GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)
Tak, wyciągnięta lekcja. Zresztą reszta przynajmniej doprowadziła mnie do tego, że mogłem stłumić ostrzeżenie. Kontynuowałem więc i zrobiłem wszystko, co było zalecane w innych odpowiedziach, aby podać ścieżkę biblioteki przy użyciu zmiennej środowiskowej HADOOP_OPTS bezskutecznie. Spojrzałem na kod źródłowy. Moduł generujący błąd podaje podpowiedź ( 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
Przejdźmy tutaj, aby zobaczyć, co robi:
http://grepcode.com/file/repo1.maven.org/maven2/com.ning/metrics.action/0.2.6/org/apache/hadoop/util/NativeCodeLoader.java/
Ach, jest pewne rejestrowanie na poziomie debugowania - włączmy to, aby zobaczyć, czy otrzymamy dodatkową pomoc. Odbywa się to poprzez dodanie następującego wiersza do pliku $ HADOOP_CONF_DIR / log4j.properties:
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=DEBUG
Następnie uruchomiłem polecenie, które generuje oryginalne ostrzeżenie, takie jak stop-dfs.sh, i otrzymałem ten gadżet:
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)
Odpowiedź znajduje się w tym fragmencie komunikatu debugowania (to samo, co poprzednia komenda ldd „próbowała” powiedzieć:
`GLIBC_2.14' not found (required by opt/hadoop/lib/native/libhadoop.so.1.0.0)
Jaką wersję GLIBC posiadam? Oto prosta sztuczka, aby dowiedzieć się:
[hadoop@VMWHADTEST01 hadoop]$ ldd --version
ldd (GNU libc) 2.12
Nie mogę więc zaktualizować mojego systemu operacyjnego do wersji 2.14. Jedynym rozwiązaniem jest zbudowanie bibliotek natywnych ze źródeł w moim systemie operacyjnym lub zniesienie ostrzeżenia i zignorowanie go na razie. Zdecydowałem się po prostu powstrzymać irytujące ostrzeżenie (ale planuję budować ze źródeł w przyszłości) kup za pomocą tych samych opcji rejestrowania, których użyliśmy, aby uzyskać komunikat debugowania, z wyjątkiem teraz, po prostu ustaw go na poziomie BŁĘDU.
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR
Mam nadzieję, że dzięki temu inni zauważą, że dużą zaletą oprogramowania open source jest to, że można to rozgryźć, wykonując proste logiczne kroki.