Apache Spark(아파치 스파크) 학습을 위한 도커 환경 셋업하기 (feat. Zeppelin)
이 글에서는 빠르게 아파치 스파크를 학습할 수 있도록 도커 기반의 스파크 환경을 구성하는 방법과 간단한 내부 구조에 대한 설명을 다룹니다.
- 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를 확인할 수 있습니다:
위와 같이 Spark의 Master Web UI를 확인할 수 있습니다.
Worker1, 2의 UI를 확인할 수 있습니다.
Interactive하게 실행을 할 수 있는 Zeppelin에 접속할 수 있습니다.
위의 구조에서 아래와 같이 4개의 컨테이너 각각에 master, worker, zeppelin이 실행되고 있습니다.
Spark 실행해보기
위의 Zeppelin UI에서 새로운 노트북을 만들고 스파크를 실행해 볼 수 있습니다.
먼저 아래와 같은 순서로 노트북을 실행해주고,
아래와 같이 spark를 넣고 Shift + Enter를 눌러 SparkSession이 존재하며 Spark - Zeppelin이 잘 연결이 되어 있는지 확인합니다:
이후에는 아래와 같이 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에서 작업이 실행된 것을 볼 수 있습니다:
Reference