Data

Apache Spark(아파치 스파크) 학습을 위한 도커 환경 셋업하기 (feat. Zeppelin)

Kaden Sungbin Cho 2021. 6. 20. 22:08
반응형

이 글에서는 빠르게 아파치 스파크를 학습할 수 있도록 도커 기반의 스파크 환경을 구성하는 방법과 간단한 내부 구조에 대한 설명을 다룹니다.

 

  • docker-compose up
  • Spark 실행해보기

 


docker-compose up

먼저 아래 코드를 실행하여 docker-compose up을 실행합니다:

git clone https://github.com/kadensungbincho/de-hands-on.git
cd de-hands-on/docker-apache-spark-zeppelin
docker-compose up -d --build

... 
Starting spark-master ... done
Starting spark-worker-2 ... done
Starting spark-worker-1 ... done
Starting spark-zeppelin ... done

아래와 같이 4개의 컨네이너가 생성된 것을 확인할 수 있습니다:

docker container ls

CONTAINER ID   IMAGE                                  COMMAND                  CREATED        STATUS         PORTS                                                                                            NAMES
568179a8dab7   bde2020/spark-worker:3.0.2-hadoop3.2   "/bin/bash /worker.sh"   21 hours ago   Up 2 minutes   0.0.0.0:8082->8081/tcp, :::8082->8081/tcp                                                        spark-worker-2
ee145f03c7f2   bde2020/spark-worker:3.0.2-hadoop3.2   "/bin/bash /worker.sh"   21 hours ago   Up 2 minutes   0.0.0.0:8081->8081/tcp, :::8081->8081/tcp                                                        spark-worker-1
7962cefe77ce   spark-zeppelin                         "/bin/sh -c '$ZEPPEL…"   21 hours ago   Up 2 minutes   8081/tcp, 0.0.0.0:8888->8080/tcp                                                                 spark-zeppelin
2596f54bbbc6   bde2020/spark-master:3.0.2-hadoop3.2   "/bin/bash /master.sh"   21 hours ago   Up 3 minutes   0.0.0.0:7077->7077/tcp, :::7077->7077/tcp, 6066/tcp, 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   spark-maste

 

 

이어서 브라우저에서 아래와 같은 주소로 각 Web UI를 확인할 수 있습니다:

 

Image from Author

위와 같이 Spark의 Master Web UI를 확인할 수 있습니다.

 

Worker1, 2의 UI를 확인할 수 있습니다.

Image from Author

Interactive하게 실행을 할 수 있는 Zeppelin에 접속할 수 있습니다.

Image from Author

위의 구조에서 아래와 같이 4개의 컨테이너 각각에 master, worker, zeppelin이 실행되고 있습니다.

Image from Author

 

 

Spark 실행해보기

위의 Zeppelin UI에서 새로운 노트북을 만들고 스파크를 실행해 볼 수 있습니다.

 

먼저 아래와 같은 순서로 노트북을 실행해주고,

Image from Author

 

아래와 같이 spark를 넣고 Shift + Enter를 눌러 SparkSession이 존재하며 Spark - Zeppelin이 잘 연결이 되어 있는지 확인합니다:

Image from Author

이후에는 아래와 같이 pyspark code를 실행해 볼 수 있습니다:

%pyspark
from pyspark.sql.types import StructType,StructField, StringType, IntegerType, ArrayType
# https://github.com/spark-examples/pyspark-examples/blob/master/pyspark-filter.py

arrayStructureData = [
        (("James","","Smith"),["Java","Scala","C++"],"OH","M"),
        (("Anna","Rose",""),["Spark","Java","C++"],"NY","F"),
        (("Julia","","Williams"),["CSharp","VB"],"OH","F"),
        (("Maria","Anne","Jones"),["CSharp","VB"],"NY","M"),
        (("Jen","Mary","Brown"),["CSharp","VB"],"NY","M"),
        (("Mike","Mary","Williams"),["Python","VB"],"OH","M")
        ]
        
arrayStructureSchema = StructType([
        StructField('name', StructType([
             StructField('firstname', StringType(), True),
             StructField('middlename', StringType(), True),
             StructField('lastname', StringType(), True)
             ])),
         StructField('languages', ArrayType(StringType()), True),
         StructField('state', StringType(), True),
         StructField('gender', StringType(), True)
         ])


df = spark.createDataFrame(data = arrayStructureData, schema = arrayStructureSchema)
df.printSchema() 
df.show()

이후 http://127.0.0.1:8080를 확인해보면 다음과 같이 Spark Web UI에서 작업이 실행된 것을 볼 수 있습니다:

Image from Author

 

 

Reference

[1] https://github.com/big-data-europe/docker-spark

반응형