본문 바로가기

환경설정

[GCP] GCP로 Spark 설치하기

본 내용은 [멀티캠퍼스] 데이터 분석&데이터 엔지니어링 취업캠프 28회차에서 실시한 수업 내용 중 일부입니다.

구글 클라우드를 사용해서 스파크를 설치했다. 

 

구글 클라우드 콘솔 접속

https://console.cloud.google.com/

 

프로젝트 클릭

 

새 프로젝트 클릭

 

프로젝트 이름 입력, 개인 계정을 이용할 경우 필자와 화면이 다를 수 있음(하지만 전반적인 과정은 큰 차이가 없음)

 

프로젝트가 잘 설정되어 있는지 확인

 

인스턴스 생성

메뉴 탭 -> Compute Engine -> VM 인스턴스

 

최초에는 설치 필요

 

인스턴스 만들기 클릭

 

이름 및 리전(지역) 설정

 

가장 기본인 E2 선택

 

e2 medium 선택

 

아래로 스크롤을 내려 부팅 디스크의 변경 클릭

 

운영체제: Ubuntu 선택 버전은 기본값을 사용

 

방화벽의 위 2가지 설정 체크

 

인스턴스 생성 확인

 

방화벽 설정

메뉴 탭 -> VPC 네트워크 -> 방화벽 혹은 화면의 다른 2가지 방법으로 접속

 

방화벽 규칙 만들기 클릭

 

이름 설정

 

대상을 다음과 같이 변경

 

0.0.0.0/0은 모든 ip를 허용한다는 의미이다.

프로토콜 및 포트 모두 적용 체크 후 만들기 클릭

 

새 방화벽 규칙 확인 가능

 

VM인스턴스 탭으로 이동 SSH 옆 더보기 클릭

 

개발환경 설치

브라우저 창에서 열기 클릭

 

 

 

miniconda 설치

  • ls: 현재 디렉토리에 있는 파일과 서브 디렉토리의 목록을 표시한다.
  • pwd: 현재 작업 중인 디렉토리의 경로를 표시한다.
  • cd: 다른 디렉토리로 이동하는 데 사용된다.
    • cd ..: 상위 디렉토리로 이동
    • cd ~: 홈 디렉토리로 이동
    • cd /path/to/directory: /path/to/directory로 이

opt 경로로 이동

cd ../../opt/

 

미니콘다 이동

https://docs.conda.io/projects/miniconda/en/latest/

 

리눅스 선택 후 나오는 코드 복사

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

 

붙여넣고 엔터 2번

 

다시 미니콘다로 돌아가서 아래 코드 복사

~/miniconda3/bin/conda init bash
~/miniconda3/bin/conda init zsh

 

붙여넣기

 

JAVA 설치

창을 나온뒤에 다시 접속

(base) 가 앞에 생겼다면 성공

 

차례로 아래 코드 입력

sudo apt update
sudo apt install openjdk-8-jdk -y

 

opt 경로로 이동

 

JAVA 환경변수 설정

아래 코드로 Vi 텍스트 편집기를 사용하여 bashrc파일을 연다.

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

 

입력을 다한후에는 esc키를 누르고 :wq!로 문서 밖으로 나온다.

 

아래 코드로 변경 내용 업데이트

source ~/.bashrc

 

스칼라 설치

아래 코드 입력

sudo apt-get install scala -y

 

스칼라 환경변수 설정

아래 코드로 bashrc파일 접속

vi ~/.bashrc

 

insert 키를 누른 후 아래 코드 붙여넣기

# SCALA ENV SET
export SCALA_HOME=/usr/bin/scala
export PATH=$SCALA_HOME/bin:$PATH

아까와 같은 방식으로 나온 후 아래 코드로 업데이트 하기

source ~/.bashrc

 

스파크 설치

opt 경로로 이동

추후에 사용할 교재와 버전을 맞추기 위해 3.1.1 버전 사용

아래 코드로 다운로드 진행

wget https://archive.apache.org/dist/spark/spark-3.1.1/spark-3.1.1-bin-hadoop2.7.tgz

 

sudo tar xvf spark-3.1.1-bin-hadoop2.7.tgz

 

아래 코드로 spark 디렉토리를 생성하고 spark-3.1.1-bin-hadoop2.7 밑의 모든 파일을 spark 디렉토리로 이동

sudo mkdir spark
sudo mv spark-3.1.1-bin-hadoop2.7/* /opt/spark/

 

아래 코드로 spark 디렉토리로 이동 후 파일 확인

cd spark
ls

 

아래 코드로 사용자ID 확인

cd $home
pwd

pwd 했을 때 home 뒤에 나오는 것이 사용자ID이다. 이를 따로 기록해두거나 기억하자.

 

스파크 환경변수 설정

bashrc 파일로 접속

vi ~/.bashrc

 

아래 코드의 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

 

변경 내용 업데이트

source ~/.bashrc

 

PySpark 설치

아래 코드 입력 위의 spark 버전과 일치시켜주는 것이 좋다.

pip install pyspark==3.1.1

 

PySpark 실행

cd $HOME
pyspark

 

Jupyter Notebook 설치 및 설정

아래 코드로 설치

conda install jupyter notebook

 

Jupyter 설정을 위해 아래 코드로 config 파일 생성

jupyter notebook --generate-config

 

아래 코드로 설정 파일에 접속

cd $HOME
vi ~/.jupyter/jupyter_notebook_config.py

 

파일안에서 / 누르기 ->  allow_root 입력 ->  enter 누르기 -> i 누르기 -> 주석을 없애고(행 앞의 # 제거) False를 True로 변경

 

/ 누르기 ->  .ip = 입력 ->  enter 누르기 -> i 누르기 -> 주석을 없애고(행 앞의 # 제거) localhost를 0.0.0.0으로 변경

 

이전과 동일한 방식으로 나오기

 

테스트

아래 코드로 jupyter notebook 실행

jupyter notebook

 

아래와 같이 빨간 박스 처진 토큰값을 따로 기록해두기

 

외부 ip를 복사한다.

 

주소창에 복사한 외부ip:8888을 입력

 

필자의 경우 이미 로그인 한적이 있어서 아래 화면과 같이 나온다.

처음 접속한다면 위에서는 토큰값으로 로그인할 수 있고 아래에서는 토큰값을 입력하고 변경하고 싶은 비밀번호를 설정하여 로그인할 수 있다.

 

주피터 노트북에 접속

 

새로운 파일을 만들어 테스트

사용한 코드는 아래와 같다.

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

 

2번째 코드를 실행했을 때 에러가 발생한다면 외부ip:4040 을 주소창에 입력하여 들어간 후 다시 실행하면 정상적으로 작동한다.

 

모든 실습이 끝나면 인스턴스를 반드시 중지해야 한다. (과다청구될 수 있다.)

정지가 아닌 중지임을 꼭 명심하자

 

청구되는 비용은 메뉴 탭의 결제에서 확인할 수 있다.