본문 바로가기
Setting

스파크(Spark) 설치 (with Google Cloud Platform)

by 나룽나룽 2023. 10. 17.

출처 : https://medium.com/codex/how-to-use-spark-hadoop-in-gcp-8620ed3e35bd

 

본 게시물은 구글 클라우드 플랫폼(GCP)를 사용해 Spark를 설치하는 방법을 작성한 글이다.

멀티캠퍼스 실습 때 진행하여 프로젝트 시작부터 진행하고자 한다.

 


1. GCP 가입

 

2. 프로젝트 시작

  • 가입을 마친 후 Google Cloud 옆 'My First Project' 버튼을 누르면
    새로운 프로젝트를 열 수 있는 창이 뜬다.
  • 아래의 화면처럼 새 프로젝트를 시작한다.

 

  • 프로젝트명을 입력하고 만들기를 클릭한다.

 

3. VM 시작하기

  • 다시 첫 화면으로 돌아가 메뉴 - Computer Engine 를 클릭한다.

 

  • Computer Engine API 하단의 사용버튼을 클릭해준다.

 

4. 인스턴스 만들기

  • 로딩이 끝나면 아래와 같이 인스턴스를 만들 수 있는 환경이 마련된다.
  • VM 인스턴스 옆의 '인스턴스 만들기'를 클릭한다.

 

  • 인스턴스의 세부사항을 정할 수 있다.
  • 필자는 아래와 같이 설정했다.
    • 이름 : mulcamp-fp
    • 리전 : 서울
    • 머신 구성 : E2로 유지

 

  • 부팅 디스크는 Ubuntu로 변경했다.

 

  • 방화벽은 HTTP, HTTPS 트래픽 허용으로 두었다.
  • 그외 설정은 기본 설정값을 유지하였다.
  • 설정이 완료되면 만들기 버튼을 클릭한다.

 

 

5. 네트워크 보안 설정하기

  • 프로젝트 배포를 진행하려면 병화벽을 열어줘야한다.
  • 만든 인스턴스의 우측의 점 세개를 클릭, '네트워크 세부정보 보기'를 클릭한다.

 

  • 메뉴의 방화벽 - 방화벽 규칙 만들기 를 클릭한다.

 

  • 방화벽 규칙은 아래와 같이 지정했다.(그외 설정은 모두 기본값)
    • 이름 : finalproject
    • 대상 : 네트워크의 모든 인스턴스
    • 소스 IPv4 범위 : 0.0.0.0/0
    • 프로토콜 및 포트 : 모두 허용

 

6. 개발환경 설치

  • 설치가 완료되면 왼쪽 메뉴바에서 Computer Engine을 클릭한다.
  • 인스턴스의 SSH 버튼을 클릭, 브라우저 창에서 열기를 클릭한다.

 

  • 그러면 아래와 같은 화면이 나온다.
  • 이곳 GCP를 통해서 이제 Spark를 위한 개발환경을 설정할 것이다.

 

7. miniconda 설치

  • 먼저 경로는 opt 경로로 이동한다.
$ cd ../../opt
/opt$ pwd

 

아나콘다 설치를 위해 아래의 코드를 복사해 입력한다.

mkdir -p ~/miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
rm -rf ~/miniconda3/miniconda.sh

 

  • 아나콘다 설치가 완료되면 아래의 명령어를 실행한다.
  • 이후 브라우저 창을 닫고 다시 연다.
~/miniconda3/bin/conda init bash
~/miniconda3/bin/conda init zsh

 

  • 다시 열 때 아래와 같이 (base)가 활성화 되면 miniconda가 정상적으로 설치된 것이다.

 

8. JAVA 설치

  • 우선 다시 cd ../../opt/ 경로로 이동한다.
  • 아래 2개의 명령문을 순차적으로 입력, JAVA를 설치한다.
(base) /opt$ sudo apt update
(base) /opt$ sudo apt install openjdk-8-jdk -y

 

  • JAVA 환경변수 설정을 위해 vi ~/.bashrc 명령어를 실행하여 파일을 연다.
  • 하단에 키보드 커서를 둔 채로 i 입력 (수정 키로 전환)  후 아래와 같이 코드를 추가한다.
# JAVA ENV SET
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
export CLASS_PATH=$JAVA_HOME/lib:$CLASS_PATH

 

  • 이후 esc - ':wq!' 로 편집한 내용을 저장한다.

  • vi 편집기를 나온 뒤에는 source ~/.bashrc 를 실행하여 업데이트 한다.

 

9. 스칼라 설치

  • 자바 설치와 마찬가지로 진행된다.
  • 아래의 명령문을 넣어 스칼라를 설치한다.
(base) /opt$ sudo apt-get install scala -y

 

  • vi 편집기를 열어 아까 수정한 코드 내용 하단에 이어 추가해준다.
# SCALA ENV SET
export SCALA_HOME=/usr/bin/scala
export PATH=$SCALA_HOME/bin:$PATH

 

  • vi 편집기를 나온 뒤에는 동일하게 source ~/.bashrc 를 실행하여 업데이트 한다.

 

10. 스파크 설치

  • 러닝스파크 교재에서 스파크 버전은 3.1.1 버전이기 때문에 해당 버전을 맞춰서 다운받는다.
(base) /opt$ sudo wget https://archive.apache.org/dist/spark/spark-3.1.1/spark-3.1.1-bin-hadoop2.7.tgz
(base) /opt$ sudo tar xvf spark-3.1.1-bin-hadoop2.7.tgz
(base) /opt$ sudo mkdir spark
(base) /opt$ sudo mv spark-3.1.1-bin-hadoop2.7/* /opt/spark/
(base) /opt$ cd spark
(base) /opt/spark$ ls
LICENSE  R          RELEASE  conf  examples  kubernetes  python  yarn
NOTICE   README.md  bin      data  jars      licenses    sbin

 

  • Spark 설치에 대한 환경변수를 설정한다. (이전 vi 편집기에서 수정한 내용에 이어서 입력)
  • your_id 부분은 각자 계정에서 '@' 이전의 글자로 각자 id로 바꾸어 넣는다.
# SPARK ENV SET
export SPARK_HOME=/opt/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
export PYSPARK_PYTHON=/home/your_id/miniconda3/bin/python

 

11. PySpark 설치

  • 환경변수 설정이 끝난 후, pyspark 버전에 맞춰서 설치를 한다.
(base) /opt$ pip install pyspark==3.1.1

 

12. PySpark 실행

  • PySpark를 실행한다.
(base) opt/spark$ cd $HOME
(base) $ ls
(base) $ pyspark
Python 3.11.4 (main, Jul  5 2023, 13:45:01) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
23/09/18 14:43:35 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /__ / .__/\_,_/_/ /_/\_\   version 3.1.1
      /_/

Using Python version 3.11.4 (main, Jul  5 2023 13:45:01)
Spark context Web UI available at http://mulcamp-gcp.asia-northeast3-a.c.mulcampfp.internal:4040
Spark context available as 'sc' (master = local[*], app id = local-1695048218211).
SparkSession available as 'spark'.
>>>

 

13. Jupyter Notebook 설치 및 설정

  • Jupyter Notebook 를 설치한다.
(base) $ conda install jupyter notebook

 

  • Jupyter 설정을 하기 위해 config 파일을 생성한다.
  • 생성 후 vi 편집기를 연다.
(base) $ jupyter notebook --generate-config
Writing default config to: /home/your_id/.jupyter/jupyter_notebook_config.py

(base) $ cd /home/your_id/
(base) $ vi ~/.jupyter/jupyter_notebook_config.py

 

  • vi 편집기를 열면 아래와 같은 코드를 찾아서 변경한다.
  • vi 편집기에서 특정 글자를 찾기 위해서는 '/' 를 입력 후 검색어를 입력하면 된다.
    • ex) /allow_root, /ip = 
  • 검색 후 맞는 문자열이 나오면 Enter 하고 i를 누르면 수정이 가능하다.
## Whether to allow the user to run the notebook as root.
#c.NotebookApp.allow_root = False
c.NotebookApp.allow_root = True

## The IP address the notebook server will listen on.
#c.NotebookApp.ip = 'localhost'
c.NotebookApp.ip = '0.0.0.0'

 

  • 터미널에 jupyter notebook 입력해 실행하면 포트번호와 토큰번호를 알 수 있다.
(base) $ jupyter notebook
  • 이를 확인한 후 인스턴스의 외부 IP주소를 복사해서 URL에 입력
  • 이어서 포트번호 ':8888'를 URL에 입력하면 아래의 화면처럼 접속이 가능하다.
    • 간혹 포트번호가 8888이 아닐 수 있으니 터미널에 나온 값을 잘 확인할 것!

14. 테스트 코드

  • 주피터 화면에서 New를 클릭해 새로운 python 노트북을 연 후 pyspark  버전을 확인해보자.
import pyspark
pyspark.__version__

 

  • 아래의 샘플 코드를 실행한다. 
from pyspark.sql import Row
from pyspark.sql.types import *
from pyspark.sql import SparkSession

spark = (SparkSession.builder.appName("Authors").getOrCreate())
spark

 

  • Spark UI도 확인해본다.

*인스턴스 중지

  • 테스트가 완료가 되었다면 인스턴스를 반드시 중지하여 비용이 나가지 않도록 한다.