반응형

*이 글은 '스파크 완벽 가이드' 책을 기반으로 작성되었습니다.*
책에서 도커로 시작하는 방법이 나오지만, M1 맥북을 사용 중이라 amd 기반으로 작성된 도커파일과 호환이 되지 않아 arm 아키텍처용으로 다시 만들었다. dockerfile의 내용은 다음과 같다.
ubuntu: 22.04
spark: 2.3.2
zeppelin: 0.8.0
FROM ubuntu:22.04
# 환경 변수 설정
ENV Z_VERSION=0.8.0 \
LOG_TAG="[ZEPPELIN_0.8.0]" \
Z_HOME="/zeppelin" \
LANG="en_US.UTF-8" \
LC_ALL="en_US.UTF-8" \
JAVA_HOME="/usr/lib/jvm/java-8-openjdk-arm64" \
SPARK_VERSION="2.3.2" \
PATH="/opt/conda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# 시스템 설정 및 패키지 설치
RUN set -xe && \
echo '#!/bin/sh' > /usr/sbin/policy-rc.d && \
echo 'exit 101' >> /usr/sbin/policy-rc.d && \
chmod +x /usr/sbin/policy-rc.d && \
dpkg-divert --local --rename --add /sbin/initctl && \
cp -a /usr/sbin/policy-rc.d /sbin/initctl && \
sed -i 's/^exit.*/exit 0/' /sbin/initctl && \
echo 'force-unsafe-io' > /etc/dpkg/dpkg.cfg.d/docker-apt-speedup && \
echo 'DPkg::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' > /etc/apt/apt.conf.d/docker-clean && \
echo 'APT::Update::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' >> /etc/apt/apt.conf.d/docker-clean && \
echo 'Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";' >> /etc/apt/apt.conf.d/docker-clean && \
echo 'Acquire::Languages "none";' > /etc/apt/apt.conf.d/docker-no-languages && \
echo 'Acquire::GzipIndexes "true"; Acquire::CompressionTypes::Order:: "gz";' > /etc/apt/apt.conf.d/docker-gzip-indexes && \
echo 'Apt::AutoRemove::SuggestsImportant "false";' > /etc/apt/apt.conf.d/docker-autoremove-suggests && \
apt-get update && \
apt-get install -y locales software-properties-common build-essential wget curl grep sed dpkg && \
locale-gen $LANG && \
apt-get install -y openjdk-8-jdk-headless && \
apt-get install -y git && \
apt-get install -y tini && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
RUN wget -O /tmp/zeppelin-${Z_VERSION}-bin-all.tgz https://archive.apache.org/dist/zeppelin/zeppelin-${Z_VERSION}/zeppelin-${Z_VERSION}-bin-all.tgz && \
tar -zxvf /tmp/zeppelin-${Z_VERSION}-bin-all.tgz && \
rm -rf /tmp/zeppelin-${Z_VERSION}-bin-all.tgz && \
mv /zeppelin-${Z_VERSION}-bin-all ${Z_HOME} && \
wget https://archive.apache.org/dist/spark/spark-${SPARK_VERSION}/spark-${SPARK_VERSION}-bin-hadoop2.7.tgz && \
tar -xvzf spark-${SPARK_VERSION}-bin-hadoop2.7.tgz && \
rm -f spark-${SPARK_VERSION}-bin-hadoop2.7.tgz && \
mv /zeppelin/conf/zeppelin-env.sh.template /zeppelin/conf/zeppelin-env.sh && \
echo "SPARK_HOME=/spark-${SPARK_VERSION}-bin-hadoop2.7" >> /zeppelin/conf/zeppelin-env.sh
# 추가 설정 및 패키지 설치
# 여기에 필요한 추가 설정을 포함시키세요.
# 포트 노출
EXPOSE 8080
# Git 리포지토리 클론 및 설정
RUN git clone https://github.com/FVBros/Spark-The-Definitive-Guide.git && \
mv Spark-The-Definitive-Guide/data /
# 작업 디렉토리 설정
WORKDIR /zeppelin
# 시작 명령어 설정
ENTRYPOINT ["/usr/bin/tini", "--"]
CMD ["/zeppelin/bin/zeppelin.sh"]
볼륨을 편하게 사용하기 위해 학습은 도커 컴포즈로 진행할 예정이다. docker-compose.yml 파일의 내용은 다음과 같다.
version: "3"
services:
spark-practice:
image: gudev/spark_zeppelin_arm64:1.0.0
container_name: spark_zeppelin_arm64
ports:
- "8080:8080" # Zeppelin 포트를 호스트와 매핑
- "4040:4040" # Spark 웹 UI 포트를 호스트와 매핑
volumes:
- "./data:/data"
- "./notebooks:/zeppelin/notebook"
- "./logs:/zeppelin/logs"
- "./spark-warehouse:/spark-2.3.2-bin-hadoop2.7/spark-warehouse"
environment:
- ZEPPELIN_ADDR=0.0.0.0
restart: unless-stopped
data 디렉토리와 zeppelin의 노트북, zeppelin log, spark warehouse 디렉토리를 볼륨으로 동기화하였다.
https://github.com/g-hyeong/Spark-Definitive-Guide
반응형
'Data Engineering > Spark' 카테고리의 다른 글
[Spark] 조인 (0) | 2024.03.21 |
---|
반응형

*이 글은 '스파크 완벽 가이드' 책을 기반으로 작성되었습니다.*
책에서 도커로 시작하는 방법이 나오지만, M1 맥북을 사용 중이라 amd 기반으로 작성된 도커파일과 호환이 되지 않아 arm 아키텍처용으로 다시 만들었다. dockerfile의 내용은 다음과 같다.
ubuntu: 22.04
spark: 2.3.2
zeppelin: 0.8.0
FROM ubuntu:22.04 # 환경 변수 설정 ENV Z_VERSION=0.8.0 \ LOG_TAG="[ZEPPELIN_0.8.0]" \ Z_HOME="/zeppelin" \ LANG="en_US.UTF-8" \ LC_ALL="en_US.UTF-8" \ JAVA_HOME="/usr/lib/jvm/java-8-openjdk-arm64" \ SPARK_VERSION="2.3.2" \ PATH="/opt/conda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" # 시스템 설정 및 패키지 설치 RUN set -xe && \ echo '#!/bin/sh' > /usr/sbin/policy-rc.d && \ echo 'exit 101' >> /usr/sbin/policy-rc.d && \ chmod +x /usr/sbin/policy-rc.d && \ dpkg-divert --local --rename --add /sbin/initctl && \ cp -a /usr/sbin/policy-rc.d /sbin/initctl && \ sed -i 's/^exit.*/exit 0/' /sbin/initctl && \ echo 'force-unsafe-io' > /etc/dpkg/dpkg.cfg.d/docker-apt-speedup && \ echo 'DPkg::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' > /etc/apt/apt.conf.d/docker-clean && \ echo 'APT::Update::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' >> /etc/apt/apt.conf.d/docker-clean && \ echo 'Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";' >> /etc/apt/apt.conf.d/docker-clean && \ echo 'Acquire::Languages "none";' > /etc/apt/apt.conf.d/docker-no-languages && \ echo 'Acquire::GzipIndexes "true"; Acquire::CompressionTypes::Order:: "gz";' > /etc/apt/apt.conf.d/docker-gzip-indexes && \ echo 'Apt::AutoRemove::SuggestsImportant "false";' > /etc/apt/apt.conf.d/docker-autoremove-suggests && \ apt-get update && \ apt-get install -y locales software-properties-common build-essential wget curl grep sed dpkg && \ locale-gen $LANG && \ apt-get install -y openjdk-8-jdk-headless && \ apt-get install -y git && \ apt-get install -y tini && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* RUN wget -O /tmp/zeppelin-${Z_VERSION}-bin-all.tgz https://archive.apache.org/dist/zeppelin/zeppelin-${Z_VERSION}/zeppelin-${Z_VERSION}-bin-all.tgz && \ tar -zxvf /tmp/zeppelin-${Z_VERSION}-bin-all.tgz && \ rm -rf /tmp/zeppelin-${Z_VERSION}-bin-all.tgz && \ mv /zeppelin-${Z_VERSION}-bin-all ${Z_HOME} && \ wget https://archive.apache.org/dist/spark/spark-${SPARK_VERSION}/spark-${SPARK_VERSION}-bin-hadoop2.7.tgz && \ tar -xvzf spark-${SPARK_VERSION}-bin-hadoop2.7.tgz && \ rm -f spark-${SPARK_VERSION}-bin-hadoop2.7.tgz && \ mv /zeppelin/conf/zeppelin-env.sh.template /zeppelin/conf/zeppelin-env.sh && \ echo "SPARK_HOME=/spark-${SPARK_VERSION}-bin-hadoop2.7" >> /zeppelin/conf/zeppelin-env.sh # 추가 설정 및 패키지 설치 # 여기에 필요한 추가 설정을 포함시키세요. # 포트 노출 EXPOSE 8080 # Git 리포지토리 클론 및 설정 RUN git clone https://github.com/FVBros/Spark-The-Definitive-Guide.git && \ mv Spark-The-Definitive-Guide/data / # 작업 디렉토리 설정 WORKDIR /zeppelin # 시작 명령어 설정 ENTRYPOINT ["/usr/bin/tini", "--"] CMD ["/zeppelin/bin/zeppelin.sh"]
볼륨을 편하게 사용하기 위해 학습은 도커 컴포즈로 진행할 예정이다. docker-compose.yml 파일의 내용은 다음과 같다.
version: "3" services: spark-practice: image: gudev/spark_zeppelin_arm64:1.0.0 container_name: spark_zeppelin_arm64 ports: - "8080:8080" # Zeppelin 포트를 호스트와 매핑 - "4040:4040" # Spark 웹 UI 포트를 호스트와 매핑 volumes: - "./data:/data" - "./notebooks:/zeppelin/notebook" - "./logs:/zeppelin/logs" - "./spark-warehouse:/spark-2.3.2-bin-hadoop2.7/spark-warehouse" environment: - ZEPPELIN_ADDR=0.0.0.0 restart: unless-stopped
data 디렉토리와 zeppelin의 노트북, zeppelin log, spark warehouse 디렉토리를 볼륨으로 동기화하였다.
https://github.com/g-hyeong/Spark-Definitive-Guide
반응형
'Data Engineering > Spark' 카테고리의 다른 글
[Spark] 조인 (0) | 2024.03.21 |
---|