Spark Installation with GCP (Sept. 2023)
Page content
개요
- Spark를 구글 클라우드에 설치하도록 한다.
- 프로젝트 시작부터 진행한다.
프로젝트 시작
- 본 화면에서 새로운 프로젝트를 시작한다.
- 프로젝트명 : mulcampFP
VM 시작하기
- VM 만들기를 클릭한다.
- 활성 결제 계정이 없으면 결제계정을 등록한다.
- 결제계정이 등록되면 다음과 같이 화면이 나오면 VM 설정이 가능하다.
- 결제계정까지 완료가 되었으면 다음과 같이 Compute Engine API를 사용 버튼을 클릭해준다.
- 이름은 mulcamp-gcp 지역은 서울로 했다.
- 비용에 따라 성능을 선택할 수 있다.
- 호스트 유지보수 시, VM 인스턴스는 마이그레이션을 권장한다.
- 부팅 디스크는 Ubuntu로 변경했다.
- 방화벽은 트래픽을 허용했다.
- HTTP 트래픽 허용
- HTTPS 트래픽 허용
- 만들기 버튼을 클릭한다.
네트워크 보안
- 프로젝트 배포를 진행하려면 방화벽을 열어줘야 한다.
- 네트워크 세부정보를 연다.
- 방화벽 > 방화벽 규칙 만들기를 순차적으로 클릭한다.
- 방화벽 규칙은 아래와 같이 순차적으로 지정한다.
- 필자는 방화벽 이름을 finalproject로 명명했다.
- 설정이 완료된 이후 만들기 버튼을 클릭한다.
개발환경 설치
- 설치가 완료가 되면 왼쪽 메뉴에서 Compute Engine을 선택한다.
- SSH 버튼을 클릭 > 브라우저 창에서 열기를 선택한다.
- 아래와 같은 화면에서 개발환경을 설정할 것이다.
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
- 다음 명령어를 실행 후, 브라우저 창을 다시 연다.
~/miniconda3/bin/conda init bash
~/miniconda3/bin/conda init zsh
- 재 실행 시, 아래 그림과 같이 (base)가 활성화 되면 정상적으로 설치가 된 것이다.
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
- 코드를 수정한 이후에는
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
스파크 설치
- 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'.
>>>
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 편집기에서 찾기는
/
이후 검색을 한다. - 검색 후, 맞는 문자열이 나오면
Enter
+i
를 누르면 수정이 가능하다.
- vi 편집기에서 찾기는
## 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에 입력하면 접속이 가능하다.
테스트 코드
- 새로운 파일을 연 후, 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
- Spark UI도 확인해본다.
인스턴스 중지
- 이제 테스트가 완료가 되었다면 인스턴스를 반드시 중지하도록 한다.
비용확인
- 테스트가 중지 된 이후에는 비용을 반드시 확인하는 습관을 갖도록 한다.