Obecnie konfiguruję hadoop na serwerze z uruchomionymi CentO . Po uruchomieniu start-dfs.sh
lub stop-dfs.sh
pojawia się następujący błąd:
OSTRZEŻENIE util.NativeCodeLoader: Nie można załadować natywnej biblioteki hadoop dla Twojej platformy ... używając wbudowanych klas Java w stosownych przypadkach
Korzystam z Hadoop 2.2.0.
Wyszukiwanie online wywołało ten link: http://balanceandbreath.blogspot.ca/2013/01/utilnativecodeloader-unable-to-load.html
Jednak zawartość /native/
katalogu na Hadoop 2.x wydaje się być inna, więc nie jestem pewien, co robić.
Dodałem również te dwie zmienne środowiskowe w hadoop-env.sh
:
eksport HADOOP_OPTS = "$ HADOOP_OPTS -Djava.library.path = / usr / local / hadoop / lib /"
eksportuj HADOOP_COMMON_LIB_NATIVE_DIR = "/ usr / local / hadoop / lib / native /"
Jakieś pomysły?
Odpowiedzi:
Zakładam, że używasz Hadoop na 64-bitowym CentOS. Powodem, dla którego zobaczyłeś to ostrzeżenie, jest natywna biblioteka Hadoop, która
$HADOOP_HOME/lib/native/libhadoop.so.1.0.0
została skompilowana w wersji 32-bitowej.W każdym razie jest to tylko ostrzeżenie i nie wpłynie na funkcjonalność Hadoop.
Oto sposób, jeśli chcesz wyeliminować to ostrzeżenie, pobierz kod źródłowy Hadoop i ponownie skompiluj
libhadoop.so.1.0.0
system 64-bitowy, a następnie zastąp 32-bitowy.Kroki dotyczące sposobu ponownej kompilacji kodu źródłowego znajdują się tutaj dla Ubuntu:
Powodzenia.
źródło
hadoop-common-project/hadoop-common
ihadoop-hdfs-project/hadoop-hdfs
wystarczy.Wystarczy dołączyć słowo natywne do swojego w
HADOOP_OPTS
ten sposób:PS: Dziękuję Searene
źródło
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:
I wiem, że to 64-bit:
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?”:
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 ):
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:
Następnie uruchomiłem polecenie, które generuje oryginalne ostrzeżenie, takie jak stop-dfs.sh, i otrzymałem ten gadżet:
Odpowiedź znajduje się w tym fragmencie komunikatu debugowania (to samo, co poprzednia komenda ldd „próbowała” powiedzieć:
Jaką wersję GLIBC posiadam? Oto prosta sztuczka, aby dowiedzieć się:
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.
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.
źródło
Miałem ten sam problem. Rozwiązuje się to poprzez dodanie następujących wierszy
.bashrc
:źródło
W moim przypadku po skompilowaniu hadoopa na moim 64-bitowym systemie operacyjnym Linux, zastąpiłem bibliotekę natywną w
hadoop/lib
. Problem nadal występuje. Potem zorientowałem się, że hadoop wskazuje nahadoop/lib
niehadoop/lib/native
. Właśnie przeniosłem całą zawartość z rodzimej biblioteki do jej rodzica. I ostrzeżenie właśnie zniknęło.źródło
To również działałoby:
źródło
Po ciągłych badaniach, jak sugeruje Koti, udało mi się rozwiązać problem.
Twoje zdrowie
źródło
W przypadku OSX z Hadoop zainstalowanym przez Homebrew, wykonaj następujące kroki, zastępując ścieżkę i wersję Hadoop, gdzie to stosowne
następnie zaktualizuj hadoop-env.sh za pomocą
źródło
źródło
@zhutoulala - FWIW twoje linki działały dla mnie z Hadoop 2.4.0 z jednym wyjątkiem, że musiałem powiedzieć maven, żeby nie budował javadocs. Użyłem również łatki w pierwszym linku do wersji 2.4.0 i działała dobrze. Oto polecenie maven, które musiałem wydać
Po zbudowaniu tego i przeniesieniu bibliotek nie zapomnij zaktualizować hadoop-env.sh :)
Pomyślałem, że to może pomóc komuś, kto wpadł na te same blokady na drodze co ja
źródło
Przenieś skompilowane pliki biblioteki natywnej do
$HADOOP_HOME/lib
folderu.Następnie ustaw zmienne środowiskowe, edytując
.bashrc
plikUpewnij się, że Twoje skompilowane natywne pliki bibliotek znajdują się w
$HADOOP_HOME/lib
folderze.powinno działać.
źródło
źródło
Ta linia tutaj:
Z odpowiedzi KunBettera działało dla mnie. Wystarczy dołączyć go do pliku .bashrc i ponownie załadować zawartość .bashrc
źródło
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
i to zadziałało dla mnie.Ta linia tutaj:
Z odpowiedzi KunBettera wynika, gdzie są pieniądze
źródło
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
iexport LD_LIBRARY_PATH=$HADOOP_HOME/lib/native:$LD_LIBRARY_PATH
Miałem ten sam problem z JDK6, zmieniłem JDK na JDK8, problem rozwiązany. Spróbuj użyć JDK8 !!!
źródło
Oprócz zaakceptowanej odpowiedzi @zhutoulala, tutaj jest aktualizacja, aby działała z najnowszą stabilną wersją do tej pory (2.8) na platformach ARMHF (Raspberry Pi 3 model B). Najpierw mogę potwierdzić, że musisz ponownie skompilować biblioteki natywne do 64-bitowego ARM, inne odpowiedzi tutaj oparte na ustawianiu niektórych zmiennych środowiskowych nie będą działać. Jak wskazano w dokumentacji Hadoop, wstępnie wbudowane biblioteki natywne są 32-bitowe.
Kroki wysokiego poziomu podane w pierwszym linku ( http://www.ercoppa.org/posts/how-to-compile-apache-hadoop-on-ubuntu-linux.html ) są poprawne. Na tym adresie URL http://www.instructables.com/id/Native-Hadoop-260-Build-on-Pi/ można więcej szczegółowych informacji dotyczących Raspberry Pi, ale nie dla Hadoop w wersji 2.8.
Oto moje wskazania dotyczące Hadoop 2.8:
CMake metoda łatania plików musi zostać zmieniona. Co więcej, pliki do poprawienia nie są takie same. Niestety nie ma akceptowanej łaty na JIRA specyficznej dla 2.8. Pod tym adresem URL ( https://issues.apache.org/jira/browse/HADOOP-9320 ) musisz skopiować i wkleić proponowaną poprawkę Andreasa Muttschellera na swoim węźle nazw:
Gdy kompilacja się powiedzie:
I zamień zawartość katalogu lib / native swojej instalacji Hadoop na zawartość tego archiwum. Komunikat ostrzegawczy po uruchomieniu Hadoop powinien zniknąć.
źródło
Instalacja Hadoopa jest o wiele łatwiejsza, instalując darmową wersję Cloudera. Jest wyposażony w ładny interfejs GUI, który ułatwia dodawanie węzłów, nie ma kompilacji ani upychania się z zależnościami, jest wyposażony w takie rzeczy jak ul, świnia itp.
http://www.cloudera.com/content/support/en/downloads.html
Kroki to: 1) Pobierz 2) Uruchom 3) Przejdź do GUI sieci (1.2.3.4:7180) 4) Dodaj dodatkowe węzły w GUI sieci (NIE instaluj oprogramowania cloudera na innych węzłach, robi to za Ciebie) 5) W internetowym interfejsie GUI przejdź do strony głównej, kliknij opcję Hue i Hue Web UI. To daje dostęp do Hive, Pig, Sqoop itp.
źródło
Zweryfikowane rozwiązanie z wcześniejszych wpisów:
1) Sprawdziłem, czy
libhadoop.so.1.0.0
dostarczona z dystrybucją Hadoop została skompilowana dla mojej architektury maszyny, czyli x86_64:2) Dodane
-Djava.library.path=<path>
doHADOOP_OPT
whadoop-env.sh
:To rzeczywiście sprawiło, że irytujące ostrzeżenie zniknęło.
źródło
Po pierwsze: możesz zmodyfikować wersję glibc. CENTOS zapewnia bezpieczne oprogramowanie trójwymiarowo, co oznacza również, że wersja jest stara, taka jak glibc, protobuf ...
Możesz porównać wersję aktualnego glibc z potrzebnym glibc.
Po drugie: Jeśli wersja obecnego glibc jest stara, możesz zaktualizować glibc. DownLoad Glibc
Jeśli wersja bieżącego glibc jest odpowiednia, możesz dołączyć słowo natywne do swojego HADOOP_OPTS
źródło
Nie używam CentOS. Oto, co mam w Ubuntu 16.04.2, hadoop-2.7.3, jdk1.8.0_121. Uruchom start-dfs.sh lub stop-dfs.sh bez błędu:
Zamień / j01 / sys / jdk, / j01 / srv / hadoop na ścieżkę instalacji
Wykonałem również następujące czynności w przypadku jednorazowej instalacji na Ubuntu, co eliminuje konieczność wielokrotnego wprowadzania haseł podczas uruchamiania pliku start-dfs.sh:
Zastąp użytkownika swoją nazwą użytkownika
źródło
Zasadniczo nie jest to błąd, to ostrzeżenie w klastrze Hadoop. Tutaj tylko aktualizujemy zmienne środowiskowe.
źródło