[SPARK] Python, Scala Kernel이 모두 있는 Jupyter Lab Docker 이미지 만들기

NewNewDaddy·2024년 2월 11일
0

SPARK

목록 보기
11/16
post-thumbnail

🔹 0. INTRO

  • 데이터 엔지니어링을 하면서 Pyspark만 사용을 했었는데 성능이나 다른 Hadoop Ecosystem들과의 효율적인 통합 등의 이유로 Scala를 조금씩 배워가며 사용해보고 있다.
  • Jupyter Lab과 같은 인터프리터 방식이 데이터의 형상을 중간중간 확인하며 진행하기에 편하기 때문에 많이 쓰이게 되는데 커널에서 Python과 Scala 모두를 지원해주면 좋겠다는 생각이 들었다. almond.sh 라는 곳에서 scala를 위한 Jupyter Lab 환경을 만들어주는 Docker Image를 찾을 수 있었지만 python 커널도 함께 사용하려면 Docker Image에 대한 커스텀 작업이 필요해보였다.
  • 다행히 scala 커널을 어렵지 않게 만드는 방법을 구글링을 통해 찾을 수 있었고 python spark 커널의 경우 Docker Image를 다양하게 만들어본 경험이 있기 때문에 둘을 엮으면 두 언어를 모두 지원해주는 Juypter Lab Docker Image를 만들 수 있겠다는 생각이 들었다.

🔹 1. Dockerfile

  • Ubuntu 20.04를 Base Image로 하여 위에 Python, Jupyter Lab, Java, Spark, Scala Kernel 패키지들을 설치한다.
  • 나의 Docker Hub Repo에 Push를 해야하기 때문에 hyunsoolee0506/scalaspark:3.5.0로 이미지 이름을 생성한다.
# base image
FROM ubuntu:20.04
WORKDIR /workspace

# User setting
USER root

# Install python
RUN apt-get update && \
    apt-get install -y python3 python3-pip && \
    rm -rf /var/lib/apt/lists/* 
RUN apt-get update && apt-get install wget -y

# Ignore interactive action while building docker images
ARG DEBIAN_FRONTEND=noninteractive

# Install spark relative packages
RUN apt-get install openjdk-11-jdk -y
RUN pip3 install findspark && pip3 install pyspark==3.5.0
RUN wget https://dlcdn.apache.org/spark/spark-3.5.0/spark-3.5.0-bin-hadoop3.tgz && tar -xvzf spark-3.5.0-bin-hadoop3.tgz && rm -rf spark-3.5.0-bin-hadoop3.tgz

# Install scala kernel
RUN pip3 install jupyterlab && pip3 install spylon-kernel && python3 -m spylon_kernel install

# ENV setting
ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
ENV SPARK_HOME=/workspace/spark-3.5.0-bin-hadoop3

# Jupyter workspace
WORKDIR /workspace/spark

# Expose port
EXPOSE 8888

# Initial command
CMD ["jupyter", "lab", "--ip=0.0.0.0", "--port=8888", "--no-browser", "--allow-root"]

docker build -t hyunsoolee0506/scalaspark:3.5.0 .

🔹 2. 작동

docker run -d -p 8888:8888 -v [로컬경로]:/workspace/spark hyunsoolee0506/scalaspark:3.5.0

  • 위에서 생성한 이미지를 사용하여 docker run을 해주면 아래와 같이 python과 scala kernel을 모두 생성하여 작업할 수 있는 Jupyter Lab 환경이 만들어진다.

🔹 3. 참고자료

profile
데이터 엔지니어의 작업공간 / #PYTHON #SPARK #AWS #NCLOUD

0개의 댓글