Spark Installation with GCP (Sept. 2023)

Page content

개요

  • Spark를 구글 클라우드에 설치하도록 한다.
  • 프로젝트 시작부터 진행한다.

프로젝트 시작

  • 본 화면에서 새로운 프로젝트를 시작한다.
  • 프로젝트명 : mulcampFP

Untitled

VM 시작하기

  • VM 만들기를 클릭한다.

Untitled

  • 활성 결제 계정이 없으면 결제계정을 등록한다.

Untitled

  • 결제계정이 등록되면 다음과 같이 화면이 나오면 VM 설정이 가능하다.

Untitled

  • 결제계정까지 완료가 되었으면 다음과 같이 Compute Engine API를 사용 버튼을 클릭해준다.

Untitled

  • 이름은 mulcamp-gcp 지역은 서울로 했다.

Untitled

  • 비용에 따라 성능을 선택할 수 있다.

Untitled

  • 호스트 유지보수 시, VM 인스턴스는 마이그레이션을 권장한다.

Untitled

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

Untitled

  • 방화벽은 트래픽을 허용했다.
    • HTTP 트래픽 허용
    • HTTPS 트래픽 허용
  • 만들기 버튼을 클릭한다.

Untitled

네트워크 보안

  • 프로젝트 배포를 진행하려면 방화벽을 열어줘야 한다.
  • 네트워크 세부정보를 연다.

Untitled

  • 방화벽 > 방화벽 규칙 만들기를 순차적으로 클릭한다.

Untitled

  • 방화벽 규칙은 아래와 같이 순차적으로 지정한다.
    • 필자는 방화벽 이름을 finalproject로 명명했다.
  • 설정이 완료된 이후 만들기 버튼을 클릭한다.

Untitled

Untitled

개발환경 설치

  • 설치가 완료가 되면 왼쪽 메뉴에서 Compute Engine을 선택한다.

Untitled

  • SSH 버튼을 클릭 > 브라우저 창에서 열기를 선택한다.

Untitled

  • 아래와 같은 화면에서 개발환경을 설정할 것이다.

Untitled

miniconda 설치

  • 먼저 경로는 cd 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

Untitled

  • 다음 명령어를 실행 후, 브라우저 창을 다시 연다.
~/miniconda3/bin/conda init bash
~/miniconda3/bin/conda init zsh
  • 재 실행 시, 아래 그림과 같이 (base)가 활성화 되면 정상적으로 설치가 된 것이다.

Untitled

JAVA 설치

  • JAVA 설치는 다음과 같다.
(base) /opt$ sudo apt update
(base) /opt$ sudo apt install openjdk-8-jdk -y
  • JAVA 환경변수 설정을 위해 vi ~/.bashrc 명령어를 실행하여 파일을 열고 아래와 같이 코드를 추가한다.
# 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

Untitled

  • 코드를 수정한 이후에는 source ~/.bashrc 를 실행하여 업데이트 한다.

스칼라 설치

  • 이번에는 스칼라를 설치한다.
(base) /opt$ sudo apt-get install scala -y
  • 이번에도 환경설정을 추가한다.
# SCALA ENV SET
export SCALA_HOME=/usr/bin/scala
export PATH=$SCALA_HOME/bin:$PATH

Untitled

스파크 설치

  • Learning Spark 교재에서 Spark 버전은 3.1.1 버전이지만 Python 최신버전과 호환이 안될 수 있으므로 Spark 버전을 업데이트 해서 설치한다.
(base) /opt$ sudo wget -q https://dlcdn.apache.org/spark/spark-3.5.1/spark-3.5.1-bin-hadoop3.tgz
(base) /opt$ sudo tar -zxf spark-3.5.1-bin-hadoop3.tgz
(base) /opt$ sudo mkdir spark
(base) /opt$ sudo mv spark-3.5.1-bin-hadoop3/* /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 설치에 대한 환경변수를 설정한다.
# 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

PySpark 설치

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

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'.
>>>

Untitled

Jupyter Notebook 설치 및 설정

  • Jupyter Notebook 설정을 변경하도록 한다.
(base) $ conda install jupyter notebook

Untitled

  • 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 편집기에서 찾기는 / 이후 검색을 한다.
    • 검색 후, 맞는 문자열이 나오면 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을 실행한 후, 외부 IP주소:8888를 URL에 입력하면 접속이 가능하다.

Untitled

테스트 코드

  • 새로운 파일을 연 후, Sample Code를 실행한다.
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

Untitled

  • Spark UI도 확인해본다.

Untitled

인스턴스 중지

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

Untitled

비용확인

  • 테스트가 중지 된 이후에는 비용을 반드시 확인하는 습관을 갖도록 한다.

Untitled