24년 11월 기준 Mac 환경에서 pyspark 설치 및 환경 설정한 부분을 정리합니다.
1. Homebrew를 통해 설치하는 것이 가장 용이한 것 같습니다.
2. Java 버전은 Spark 버전과 맞춰 설치하면 됩니다.
3. 모든 설치 과정은 다른 블로그에도 자세히 나와 있습니다.
본 글은 Pyspark 실행 시 발생하는 아래 에러에 대해서 기록합니다.
에러 메세지 : Service 'sparkDriver' could not bind on a random free port
1. Homebrew
homebrew를 통해서 필요한 것들을 모두 다운로드 하겠습니다.
homebrew를 먼저 설치합니다.
Homebrew
The Missing Package Manager for macOS (or Linux).
brew.sh
2. Java 설치
java 설치가 필요합니다. homebrew를 통해서 java를 설치합니다.
아래 명령어를 통해 설치가능한 버전을 확인할 수 있습니다.
brew search jdk
==> Formulae
openjdk openjdk@11 ✔ openjdk@17 ✔ openjdk@21 openjdk@8 jd mdk cdk
==> Casks
adoptopenjdk graalvm-jdk@21 microsoft-openjdk@17 oracle-jdk@17 semeru-jdk-open@11
gama-jdk jdk-mission-control microsoft-openjdk@21 oracle-jdk@21 semeru-jdk-open@17
graalvm-jdk microsoft-openjdk oracle-jdk sapmachine-jdk semeru-jdk-open@21
graalvm-jdk@17 microsoft-openjdk@11 oracle-jdk-javadoc semeru-jdk-open semeru-jdk-open@8
저는 openjdk@11 버전을 사용할 예정입니다.
brew install --cask adoptopenjdk11
자바가 설치된 곳을 확인합니다.
/usr/libexec/java_home -V
Matching Java Virtual Machines (1):
11.0.25 (x86_64) "Eclipse Adoptium" - "OpenJDK 11.0.25"
/Library/Java/JavaVirtualMachines/temurin-11.jdk/Contents/Home # 경로
자바 경로를 설정해줍니다.
아래 코드를 이용해 vi 편집기를 열어줍니다.
vi ~/.bash_profile
아래와 같이 입력해줍니다.
I를 통해 입력모드로 들어간 후 입력을 마치면 shife + ; 를 통해서 입력모드를 마칩니다.
이후 esc를 눌러 나가기 모드를 켜주고 wq!를 입력해서 저장 후 나갑니다.
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME
export PATH
source 명령어를 통해서 설정변수를 저장해줍니다.
source .bash_profile
자바 버전을 확인하며 잘 설치가 됐는지 확인하며 마무리합니다.
java --version
openjdk 11.0.25 2024-10-15
OpenJDK Runtime Environment Temurin-11.0.25+9 (build 11.0.25+9)
OpenJDK 64-Bit Server VM Temurin-11.0.25+9 (build 11.0.25+9, mixed mode)
3. Spark 설치
마찬가지로 homebrew를 통해서 간단히 설치합니다.
brew install apache-spark
저는 스파크도 경로 지정을 해주었습니다.
필수인지는 모르겠습니다.
위의 자바와 동일하게 vi를 열어 밑에 추가해줍니다.
vi ~/.bash_profile
export SPARK_HOME=/usr/local/Cellar/apache-spark/3.5.3/libexec
export PATH=$PATH:$SPARK_HOME
추가로 pyspark를 설치한 후 실행하려 하는데 에러가 발생했습니다.
Hostname 관련 문제로 에러 메세지는 다음과 같습니다.
Service 'sparkDriver' could not bind on a random free port.
해결방법
에러 메세지를 구글링해보면 유사한 해결방법이 있는데 저는 /etc/ 경로에 있는 hosts 파일에 접근하여 hostname을 입력해주었습니다.
다른 방법은 spark를 다시 실행하면 다시 에러가 발생했습니다.
private 파일이기 때문에 sudo 명령어를 통해 접근이 필요합니다.
다음 명령어를 통해서 파일에 접근합니다.
mac 비밀번호 입력이 필요합니다.
sudo nano /private/etc/hosts
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 DOYEONui-MacBookPro.local # 여기에 넣어주기
255.255.255.255 broadcasthost
::1 localhost
hostname은 터미널에서 바로 알 수 있습니다.
# 기본 터미널 입력창
doyeonpyun@DOYEONui-MacBookPro ~ %
# DOYEONui-MacBookPro << 이 부분이 hostname
해결 후 pyspark를 실행하면 정상적으로 작동합니다.
Ref.
01. [Blog] 자바 환경변수 설정 https://gymdev.tistory.com/72
02. [Blog] Spark Error https://sky-develop.tistory.com/45
03. [Blog] Hostname 변경 https://likedev.tistory.com/entry/MAC%EB%A7%A5%EB%B6%81%EC%97%90%EC%84%9C-hosts-%ED%8C%8C%EC%9D%BC-%EC%88%98%EC%A0%95-%EB%B0%A9%EB%B2%95