spark-submit 명령어를 실행시켰을 때 아래와 같은 에러가 발생했 습니다.
py4j.protocol.Py4JJavaError: An error occurred while calling o121.start.
: java.lang.IllegalStateException: RpcEnv has been stopped
이 에러는 Spark Streaming job을 실행할 때 발생할 수 있는 에러로 Spark Streaming job이 동작하는 동안 RPC (Remote Procedure Call) 환경이 멈춘 경우 발생합니다.
이 에러를 해결하려면 Spark job이 제대로 종료되지 않아서 이전 실행 중에 생성된 RPC 환경이 아직 실행 중인 경우도 있을 수 있어서 이전 Spark job을 종료하고 다시 실행해 보았지만 같은 에러가 발생했습니다.
이 문제를 해결하기 위해서는 Spark job 실행 환경의 설정을 확인하고 문제가 되는 환경을 수정했습니다.
저의 경우에는 spark 환경설정이 제대로 안되어 있다보니 spark master를 7070포트로 잡을때 연결이 안되다보니 다시 spark 환경 설정을 실행하였습니다.
먼저 spark가 설치된 위치를 찾습니다.
brew info apache-spark
/opt/homebrew/Cellar/apache-spark/3.4.0 위치에 spark가 설치된것을 확인할 수 있습니다.
또는 which spark-submit 명령어를 통해서 찾을 수 있습니다.
which spark-submit 명령어를 실행한 결과로 /opt/homebrew/bin/spark-submit이 나온다면 /opt/homebrew/Cellar/apache-spark/3.4.0/libexec를 환경 변수로 설정해줍니다.
spark-env.sh 파일에서 SPARK_HOME 환경 변수를 설정하거나 명령어를 통해 설정해줍니다.
vi /opt/homebrew/Cellar/apache-spark/3.4.0/libexec/conf/spark-env.sh
echo $SPARK_HOME 명령어를 실행해서 SPARK_HOME 환경 변수가 정확히 설정되었는지 확인하고 잘못 설정되어 다시 설정해 줍니다.
export SPARK_HOME=/opt/homebrew/Cellar/apache-spark/3.4.0/libexec 명령어를 실행해서 SPARK_HOME 환경 변수를 설정합니다.
spark-submit --version 명령어를 실행해서 Spark 버전이 올바르게 출력되는지 확인합니다
spark PATH를 등록해줍니다.
source ~/.bashrc 명령어를 실행하여 변경된 환경 변수를 적용합니다. 이렇게 하면 나중에 새로운 Spark 버전을 설치하거나 다른 컴퓨터에서도 SPARK_HOME 환경 변수를 변경하지 않아도 spark-submit을 실행할 수 있습니다.
export PATH=$SPARK_HOME/bin:$PATH
source ~/.bashrc
그 후 다시 spark-submit 명령을 실행하면 잘 되는 것을 확인할 수 있습니다.
다른 에러가 발생해서 다음 포스팅에서 해결을 하겠습니다.