Spark Installation on M1 Mac

Page content

사전준비

  • M1 Mac에서 스파크를 설치하는 과정을 소개 하려고 한다.
  • 필자의 Python 버전은 아래와 같다.
$ python --version
Python 3.8.7

자바 설치

Screen Shot 2022-01-05 at 12.57.39 AM.png

  • 그 다음 자바 설치를 확정한다.
$ java --showversion
  • 만약 에러가 아래와 같은 에러가 발생한다면, 시스템 환경설정 - Java - 업데이트 항목을 순차적으로 클릭한다.
$ java --showversion
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

Screen Shot 2022-01-05 at 12.20.33 AM.png

Screen Shot 2022-01-05 at 12.21.35 AM.png

Spark 설치

Screen Shot 2022-01-05 at 12.03.41 AM.png

$ cp spark-3.2.0-bin-hadoop3.2.tgz ~/
  • 그리고 압축을 푼다.
$ tar -xzf spark-3.2.0-bin-hadoop3.2.tgz

환경변수 설정

  • 환경 변수 설정 시 중요한 건 해당 파일을 찾는 것이다. 따라서, 미리 사전에 폴더를 확인하는 것이 좋다.
    • 기타 다른 블로그를 활용하여 적용할 때도 마찬가지다.
  • vi 에디터를 활용해서 파일을 열고 입력 한 후, 저장한다.
  • 필자는 여러 이유로 3개의 자바를 활용 중이다.
JavaVirtualMachines yourname$ ls
jdk-11.0.1.jdk		jdk1.8.0_301.jdk	zulu-8.jdk
  • 여기에서 필자는 M1 Java인 zulu-8.jdk를 환경변수로 설정할 것이다.
  • 마찬가지로 spark 환경변수도 해당 파일을 잡는 것이 중요하다.
# export JAVA_HOME_11=$(/usr/libexec/java_home -v11)
export JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home
export PATH=${PATH}:$JAVA_HOME/bin

## SPARK 버전 맞게 써주기
export SPARK_HOME=/spark/spark-3.2.0-bin-hadoop3.2
export PATH=$SPARK_HOME/bin:$PATH
export PYSPARK_PYTHON=python3

파일 수정

export SPARK_LOCAL_IP="127.0.0.1"
  • spark-conf 폴더 내부에 있는 log4j.properties.template 파일에서 아래와 같이 수정했다.
# Set everything to be logged to the console
# log4j.rootCategory=INFO, console
log4j.rootCategory=ERROR, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n

테스트

  • 이제 Terminal을 열고 PySpark를 실행한다. Spark 로고가 출력된다면 정상적으로 설치가 완료가 된 것이다.
$ pyspark
Python 3.8.7 (v3.8.7:6503f05dd5, Dec 21 2020, 12:45:15) 
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /__ / .__/\_,_/_/ /_/\_\   version 3.2.0
      /_/

Using Python version 3.8.7 (v3.8.7:6503f05dd5, Dec 21 2020 12:45:15)
Spark context Web UI available at http://localhost:4040
Spark context available as 'sc' (master = local[*], app id = local-1641389478631).
SparkSession available as 'spark'.
>>>
  • 이번에는 rdd 파일을 열고 다음 코드를 테스트 해본다.
from pyspark import SparkContext

def main():
    sc = SparkContext("local", "count app")
    words = sc.parallelize (
    ["scala",
    "java",
    "hadoop",
    "spark",
    "akka",
    "spark vs hadoop",
    "pyspark",
    "pyspark and spark"]
    )
    counts = words.count()
    print("Number of elements in RDD -> %i" % (counts))

if __name__ == "__main__":
    main()
  • 이제 터미널에서 파일을 실행한다.
  • 정상적으로 실행 되었다면, 설정은 끝났다고 보면 된다.
$ python3 pyspark-rdd.py 
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Number of elements in RDD -> 8