Câu trả lời phụ thuộc ... Tôi vừa cài đặt Hadoop 2.6 từ tarball trên 64-bit CentOS 6.6. Bản cài đặt Hadoop thực sự đi kèm với một thư viện gốc 64 bit dựng sẵn. Đối với cài đặt của tôi, nó ở đây:
/opt/hadoop/lib/native/libhadoop.so.1.0.0
Và tôi biết nó là 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)
Thật không may, tôi ngu ngốc bỏ qua câu trả lời ngay khi nhìn chằm chằm vào mặt tôi khi tôi đang tập trung vào "Thư viện này có phải là 32 pr 64 bit không?":
`GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)
Vì vậy, bài học kinh nghiệm. Dù sao, phần còn lại ít nhất khiến tôi có thể đàn áp cảnh báo. Vì vậy, tôi tiếp tục và làm mọi thứ được đề xuất trong các câu trả lời khác để cung cấp đường dẫn thư viện bằng cách sử dụng biến môi trường HADOOP_OPTS không có kết quả. Vì vậy, tôi nhìn vào mã nguồn. Mô-đun tạo ra lỗi cho bạn biết gợi ý ( produc.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
Vì vậy, tắt ở đây để xem những gì nó làm:
http://grepcode.com/file/repo1.maven.org/maven2/com.ning/metrics.action/0.2.6/org/apache/hadoop/util/NativeCodeLoader.java/
À, có một số ghi nhật ký mức gỡ lỗi - hãy bật nó lên xem chúng tôi có nhận thêm trợ giúp không. Điều này được thực hiện bằng cách thêm dòng sau vào tệp $ HADOOP_CONF_DIR / log4j.properIES:
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=DEBUG
Sau đó, tôi đã chạy một lệnh tạo cảnh báo ban đầu, như stop-dfs.sh và nhận được lời chào này:
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)
Và câu trả lời được tiết lộ trong đoạn trích thông báo gỡ lỗi này (điều tương tự mà lệnh ldd trước đó 'đã cố' nói với tôi:
`GLIBC_2.14' not found (required by opt/hadoop/lib/native/libhadoop.so.1.0.0)
Tôi có phiên bản GLIBC nào? Đây là mẹo đơn giản để tìm hiểu:
[hadoop@VMWHADTEST01 hadoop]$ ldd --version
ldd (GNU libc) 2.12
Vì vậy, không thể cập nhật HĐH của tôi lên 2.14. Giải pháp duy nhất là xây dựng các thư viện riêng từ các nguồn trên HĐH của tôi hoặc loại bỏ cảnh báo và bỏ qua nó ngay bây giờ. Bây giờ tôi đã chọn loại bỏ cảnh báo gây phiền nhiễu (nhưng có kế hoạch xây dựng từ các nguồn trong tương lai) mua bằng cách sử dụng các tùy chọn ghi nhật ký tương tự mà chúng tôi đã sử dụng để nhận thông báo gỡ lỗi, ngoại trừ bây giờ, chỉ cần làm cho nó ở mức LRI.
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR
Tôi hy vọng điều này giúp những người khác thấy rằng một lợi ích lớn của phần mềm nguồn mở là bạn có thể tìm ra công cụ này nếu bạn thực hiện một số bước logic đơn giản.