본문 바로가기

프로그래밍

Apache Spark cannot access class sun.nio.ch.DirectBuffer 오류처리

반응형

Apache Spark 를 JDK 17 에서 사용하면

cannot access class sun.nio.ch.DirectBuffer 관련 오류를 볼수가 있다.

JDK 의 보안 업데이트로 인해 기본적으로 외부모듈에서의 DirectBuffer 접근이 막혀있기 때문이다. 

jvm 실행시 열어주는 것 외에는 코드로 처리할 방법은 없다.

설치작업시 이런 설정 하나하나 추가하는게 매우 번거로워, 해결방법을 찾아봤으나 아예 없으니 수고하실 필요 없겠다.

 

java -Dfile.encoding=UTF-8 -Xms1024m -Xmx2048m \
        --add-opens=java.base/sun.nio.ch=ALL-UNNAMED \
        -jar test.jar \

 

이와 같이 --add-open=java.base/sun.nio.ch=ALL-UNNAMED  설정을 추가하면 된다. 

 

chatGPT 에게 물어보아도 이런식으로 알려준다. 전부 테스트 해보고 검증한것이니, GPT보다 저를 믿으시길..

 

번 외로, java 에서 spark application 을 submit 하는 경우 실제로는 별도로 jvm 이 실행되는 형태인데, Spark 설정에 아래 옵션을 넣어주면 된다.

Spark 설정은 spark_home/conf/spark-defaults.conf

 

spark.driver.extraJavaOptions --add-opens=java.base/sun.nio.ch=ALL-UNNAMED
spark.executor.extraJavaOptions --add-opens=java.base/sun.nio.ch=ALL-UNNAMED

 

 

이렇게 하면 스파크 jdk17 환경에서 작동 이상무.

 

스파크 버전은 3.5.4 에서 테스트했다.

반응형