GNU/Linux >> Znalost Linux >  >> Linux

Hadoop Nelze načíst nativní knihovnu hadoop pro upozornění vaší platformy

Předpokládám, že používáte Hadoop na 64bitovém CentOS. Důvod, proč jste viděli toto varování, je nativní knihovna Hadoop $HADOOP_HOME/lib/native/libhadoop.so.1.0.0 byl ve skutečnosti zkompilován na 32 bit.

Každopádně je to jen varování a nebude mít vliv na funkce Hadoopu.

Zde je postup, pokud chcete toto varování odstranit, stáhněte si zdrojový kód Hadoop a znovu zkompilujte libhadoop.so.1.0.0 na 64bitovém systému, pak vyměňte 32bitový.

Kroky, jak překompilovat zdrojový kód, jsou uvedeny zde pro Ubuntu:

  • http://www.ercoppa.org/Linux-Compile-Hadoop-220-fix-Unable-to-load-native-hadoop-library.htm

Hodně štěstí.


Měl jsem stejný problém. Je to vyřešeno přidáním následujících řádků v .bashrc :

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

Odpověď závisí... Právě jsem nainstaloval Hadoop 2.6 z tarballu na 64bitový CentOS 6.6. Instalace Hadoop skutečně přišla s předpřipravenou 64bitovou nativní knihovnou. Pro moji instalaci je to zde:

/opt/hadoop/lib/native/libhadoop.so.1.0.0

A vím, že je 64bitový:

[[email protected] 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)

Bohužel jsem hloupě přehlédl odpověď přímo tam a zíral mi do tváře, když jsem se soustředil na:"Je tato knihovna 32 pr 64 bit?":

`GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)

Takže poučení. Každopádně zbytek mě alespoň vedl k tomu, že jsem mohl varování potlačit. Takže jsem pokračoval a udělal vše doporučené v ostatních odpovědích, abych bezvýsledně poskytl cestu ke knihovně pomocí proměnné prostředí HADOOP_OPTS. Tak jsem se podíval na zdrojový kód. Modul, který generuje chybu, vám sdělí nápovědu (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

Takže se sem podívejte, co to dělá:

http://grepcode.com/file/repo1.maven.org/maven2/com.ning/metrics.action/0.2.6/org/apache/hadoop/util/NativeCodeLoader.java/

Aha, existuje nějaké protokolování úrovně ladění - zapněte to a uvidíme, jestli nedostaneme další pomoc. To se provede přidáním následujícího řádku do souboru $HADOOP_CONF_DIR/log4j.properties:

log4j.logger.org.apache.hadoop.util.NativeCodeLoader=DEBUG

Pak jsem spustil příkaz, který generuje původní varování, jako je stop-dfs.sh, a dostal jsem tuto vychytávku:

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)

A odpověď je odhalena v tomto úryvku ladicí zprávy (totéž, co se mi „pokoušel“ říct předchozí příkaz ldd:

`GLIBC_2.14' not found (required by opt/hadoop/lib/native/libhadoop.so.1.0.0)

Jakou verzi GLIBC mám? Zde je jednoduchý trik, jak to zjistit:

[[email protected] hadoop]$ ldd --version
ldd (GNU libc) 2.12

Takže nemohu aktualizovat můj OS na 2.14. Jediným řešením je sestavit nativní knihovny ze zdrojů na mém OS nebo varování potlačit a zatím ho prostě ignorovat. Rozhodl jsem se zatím jen potlačit otravné varování (ale plánuji v budoucnu stavět ze zdrojů) koupit pomocí stejných možností protokolování, jaké jsme použili k získání ladicí zprávy, s výjimkou teď, jen na úrovni ERROR.

log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR

Doufám, že to pomůže ostatním pochopit, že velkou výhodou softwaru s otevřeným zdrojovým kódem je to, že na to můžete přijít, pokud uděláte několik jednoduchých logických kroků.


Stačí připojit slovo nativní na váš HADOOP_OPTS takhle:

export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native"

PS:Děkuji Searene


Linux
  1. Linux – Potřebují všechny programy C načíst knihovnu?

  2. Station – chytrá pracovní stanice pro všechny vaše aplikace

  3. Pochopení paměti RAM pro váš cloudový server

  1. Jak načíst modul SELinux pro Oracleasm

  2. Knihovna Python pro správu procesů v Linuxu

  3. Nelze načíst nativní podpůrnou knihovnu JNA Elasticsearch 6.x

  1. Napsat! – Aplikace pro psaní bez rozptylování pro vaši produktivitu

  2. Nelze načíst dynamickou knihovnu 'libnvinfer.so.6'

  3. Potřebuji psát manuálové stránky pro knihovnu C?