Saya menganggap Anda menjalankan Hadoop di CentOS 64bit. Alasan Anda melihat peringatan itu adalah pustaka Hadoop asli $HADOOP_HOME/lib/native/libhadoop.so.1.0.0
sebenarnya dikompilasi pada 32 bit.
Bagaimanapun, ini hanya peringatan, dan tidak akan memengaruhi fungsi Hadoop.
Berikut caranya jika Anda ingin menghilangkan peringatan ini, unduh kode sumber Hadoop dan kompilasi ulang libhadoop.so.1.0.0
pada sistem 64bit, lalu ganti yang 32bit.
Langkah-langkah tentang cara mengkompilasi ulang kode sumber disertakan di sini untuk Ubuntu:
- http://www.ercoppa.org/Linux-Compile-Hadoop-220-fix-Unable-to-load-native-hadoop-library.htm
Semoga berhasil.
Saya memiliki masalah yang sama. Itu dipecahkan dengan menambahkan baris berikut di .bashrc
:
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
Jawabannya tergantung... Saya baru saja menginstal Hadoop 2.6 dari tarball di 64-bit CentOS 6.6. Penginstalan Hadoop memang dilengkapi dengan pustaka bawaan 64-bit bawaan. Untuk pemasangan saya, ada di sini:
/opt/hadoop/lib/native/libhadoop.so.1.0.0
Dan saya tahu ini 64-bit:
[[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)
Sayangnya, saya dengan bodohnya mengabaikan jawaban yang ada di depan saya saat saya fokus pada, "Apakah perpustakaan ini 32 pr 64 bit?":
`GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)
Jadi, pelajaran yang dipelajari. Bagaimanapun, sisanya setidaknya membuatku bisa menekan peringatan itu. Jadi saya melanjutkan dan melakukan semua yang direkomendasikan di jawaban lain untuk menyediakan jalur perpustakaan menggunakan variabel lingkungan HADOOP_OPTS tetapi tidak berhasil. Jadi saya melihat kode sumbernya. Modul yang menghasilkan kesalahan memberi tahu Anda petunjuk (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
Jadi, pergi ke sini untuk melihat fungsinya:
http://grepcode.com/file/repo1.maven.org/maven2/com.ning/metrics.action/0.2.6/org/Apache/hadoop/util/NativeCodeLoader.Java/
Ah, ada beberapa logging level debug - mari kita aktifkan untuk melihat apakah kita mendapatkan bantuan tambahan. Ini dilakukan dengan menambahkan baris berikut ke file $HADOOP_CONF_DIR/log4j.properties:
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=DEBUG
Lalu saya menjalankan perintah yang menghasilkan peringatan asli, seperti stop-dfs.sh, dan mendapatkan goodie ini:
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)
Dan jawabannya terungkap dalam cuplikan pesan debug ini (hal yang sama dengan perintah ldd sebelumnya 'mencoba' untuk memberi tahu saya:
`GLIBC_2.14' not found (required by opt/hadoop/lib/native/libhadoop.so.1.0.0)
Versi GLIBC apa yang saya miliki? Berikut trik sederhana untuk mengetahuinya:
[[email protected] hadoop]$ ldd --version
ldd (GNU libc) 2.12
Jadi, tidak dapat memperbarui OS saya ke 2.14. Satu-satunya solusi adalah membangun perpustakaan asli dari sumber di OS saya atau menekan peringatan dan abaikan saja untuk saat ini. Saya memilih untuk hanya menekan peringatan yang mengganggu untuk saat ini (tetapi berencana untuk membangun dari sumber di masa mendatang) membeli menggunakan opsi logging yang sama dengan yang kami gunakan untuk mendapatkan pesan debug, kecuali sekarang, buat saja level ERROR.
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR
Saya harap ini membantu orang lain melihat bahwa manfaat besar perangkat lunak sumber terbuka adalah Anda dapat mengetahui hal ini jika Anda melakukan beberapa langkah logis sederhana.
Cukup tambahkan kata native ke HADOOP_OPTS
Anda seperti ini:
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native"
PS:Terima kasih Searene