신규 노드에서만 Ozone DataNode 가 다음 오류로 실패했다.
java.lang.UnsatisfiedLinkError: failed to load the required native library
at ...ratis.thirdparty.io.netty.handler.ssl.OpenSsl.ensureAvailability(OpenSsl.java:573)
/tmp/liborg_apache_ratis_thirdparty_netty_tcnative_linux_x86_64_...so: failed to map segment from shared object
Ratis gRPC 서버가 netty-tcnative(OpenSSL 네이티브) 를 로드할 때 JAR 안의 .so 를 java.io.tmpdir 에 풀어 실행 메모리에 매핑하는데, /tmp 가 noexec 로 마운트돼 있으면 "파일은 있는데 실행이 안 되는" 이 메시지가 난다.
mount | grep -E '\s/tmp\s'
findmnt /tmp
cp /bin/true /tmp/exectest && /tmp/exectest && echo OK
rm -f /tmp/exectest
/tmp 마운트 옵션은 보안 정책상 건드리기 어려우므로 Ozone 이 쓰는 디렉터리만 바꾼다. 실행 계정은 ps -ef | grep HddsDatanodeService 로 확인한다.
mkdir -p /var/lib/hadoop-ozone/tmp
chown hdfs:hadoop /var/lib/hadoop-ozone/tmp
chmod 750 /var/lib/hadoop-ozone/tmp
findmnt -T /var/lib/hadoop-ozone/tmp
Cloudera Manager 의 Ozone → Configuration → Ozone DataNode Java Configuration Options 에 기존 값 뒤에 다음을 덧붙이고 Ozone DataNode 역할만 재시작한다.
-Dio.netty.native.workdir=/var/lib/hadoop-ozone/tmp -Djava.io.tmpdir=/var/lib/hadoop-ozone/tmp
io.netty.native.workdir 이 핵심이고 java.io.tmpdir 은 다른 라이브러리의 같은 문제를 막는 보조 설정이다. 다른 원인으로는 신규 노드의 libssl / libcrypto 누락·버전 불일치(RHEL 9 는 OpenSSL 3 이 기본이라 compat-openssl11 이 필요할 수 있다), GLIBC_2.xx not found(OS 마이너 버전 차이) 가 있으며, hdds.grpc.tls.enabled=false 로 TLS 를 끄는 것은 원인 해결이 아니라 회피다.