Khắc phục cảnh báo NativeCodeLoader trong Hadoop trên macOS

Khi triển khai Hadoop 3.2.1 trên macOS Big Sur, hệ thống thường hiển thị cảnh báo:

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

Cảnh báo này chỉ ra việc không tải được thư viện native của Hadoop, buộc hệ thống sử dụng các lớp Java tích hợp. Thư viện native giúp tối ưu hiệu năng cho các thao tác đặc thù và hỗ trợ tính năng không có sẵn trong Java, như thuật toán nén. Dù không ảnh hưởng đến chức năng cơ bản, việc thiếu thư viện native có thể hạn chế một số tính năng nâng cao.

Dưới đây là các giải pháp hiệu quả:

1. Ẩn cảnh báo qua cấu hình log4j

Điều chỉnh mức ghi log để ẩn cảnh báo mà không giải quyết gốc rễ. Thêm dòng sau vào file log4j.properties trong thư mục cấu hình Hadoop:

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

Phương pháp này chỉ loại bỏ cảnh báo khỏi đầu ra, không khắc phục vấn đề thiếu thư viện native.

2. Thiết lập đường dẫn thư viện native

Thiết lập biến môi trường trong hadoop-env.sh:

export HADOOP_NATIVE_PATH=${HADOOP_HOME}/lib/native
export LD_LIBRARY_PATH=${HADOOP_NATIVE_PATH}:${LD_LIBRARY_PATH}

Tuy nhiên, trên macOS, thư viện native trong gói cài đặt thường không tương thích kiến trúc 64-bit, khiến cảnh báo vẫn tồn tại.

3. Tắt sử dụng thư viện native

Trong core-site.xml, cấu hình:

<configuration>
  <property>
    <name>hadoop.native.lib</name>
    <value>false</value>
    <description>Disable native library usage</description>
  </property>
</configuration>

Trên macOS Big Sur với Hadoop 3.2.1, cách này không loại bỏ được cảnh báo do hệ thống vẫn cố gắng tải thư viện native.

4. Thay thế thư viện native tương thích

Tải thư viện native dành cho macOS từ nguồn tin cậy, thay thế thư mục lib/native:

wget https://example.com/hadoop-native-macos-3.2.1.tar.gz
tar -xzf hadoop-native-macos-3.2.1.tar.gz -C ${HADOOP_HOME}/lib/
mv ${HADOOP_HOME}/lib/native-macos/* ${HADOOP_HOME}/lib/native/

Sau khi thay thế, cảnh báo biến mất mà không cần khởi động lại dịch vụ.

5. Biên dịch từ mã nguồn

Biên dịch thư viện native từ mã nguồn Hadoop để đảm bảo tương thích:

mvn clean package -Pnative -DskipTests
cp -r hadoop-dist/target/hadoop-3.2.1/lib/native/* ${HADOOP_HOME}/lib/native/

Phương pháp này tạo thư viện native phù hợp với hệ thống, loại bỏ hoàn toàn cảnh báo.

Thẻ: hadoop macos native-library log4j build-process

Đăng vào ngày 6 tháng 6 lúc 03:12