docker-compose로 Spark, Hadoop 클러스터를 띄우자. - 생성하지 않은 도커 볼륨이 생기는 이유

생성하지 않은 도커 볼륨이 생기는 이유

위처럼 docker-compose.yml 파일에서 정의하지 않은 도커 볼륨이 생긴다.

  • 심지어 아래 항목을 로컬에서 먼저 만들어줘도 그렇다!
  hadoop-master-data:
  hadoop-slave1-data:
  hadoop-slave2-data:

파일 수정 이후, 볼륨을 초기화하며 최초 상황에서부터 시작하기를 기대했는데, 아니나 다를까 네임노드가 초기화되지 않았다.

  • 의도대로라면 볼륨을 삭제하고 다시 연결하면 네임노드가 포맷되어야 한다!

위의 문제와 연관지어 생각해보니, 현재 컨테이너에 연결되어 있는 볼륨이 hadoop-master-date가 아닌,

spark-analysis_hadoop-master-data 임을 깨달았다.

claude는 이렇게 말한다

즉, 현재 docker-compose.yml 파일이 있는 디렉토리명(spark-analysis)가 볼륨앞에 붙어 새로 생성되는 것이다. 심지어 로컬에서 미리 만들었던 hadoop-master-date 는 도커 컴포즈의 기본 동작방식을 따르지 않으니 컨테이너에 연결되지 못하고, spark-analysis_hadoop-master-data 라는 볼륨이 새로 만들어지는 것이다.

즉, 다음의 간단한 스크립트도 변경해야한다.

## 기존
#!/usr/bin/env bash

docker volume rm hadoop-master-data hadoop-slave1-data hadoop-slave2-data
docker volume create hadoop-master-data
docker volume create hadoop-slave1-data
docker volume create hadoop-slave2-data

## 수정이후
#!/usr/bin/env bash

pwd=$PWD
docker volume rm "$(basename $pwd)_hadoop-master-data" \\
"$(basename $pwd)_hadoop-slave1-data" \\
"$(basename $pwd)_hadoop-slave2-data"
docker volume create "$(basename $pwd)_hadoop-master-data"
docker volume create "$(basename $pwd)_hadoop-slave1-data"
docker volume create "$(basename $pwd)_hadoop-slave2-data"

+그리고 이렇게 연결이 될 경우, 도커 컴포즈를 실행하면 다음과 같은 warning이 뜬다.

컴포즈 파일에 다음과 같이 **exteranl: true**로 설정하고, 이름도 바꿔주자.

version: "3.8"
services:
  hadoop-master:
    image: jnamu/spark-analysis-node:latest
    container_name: hadoop-master
    hostname: hadoop-master
    ports:
      - "8888:8888" # Jupyter Notebook
      - "8080:8080" # Spark Master UI
      - "4040:4040" # Spark Job UI
      - "7077:7077"
      - "7777:7777"
      - "9870:9870" # HDFS NameNode Web UI
      - "8020:8020" # HDFS NameNode HDFS API
      - "8088:8088" # YARN ResourceManager Web
      - "9000:9000" # fs.DefaultFS
    volumes:
      - spark-analysis_hadoop-master-data:/opt/hadoop/data

  hadoop-worker-1:
    image: jnamu/spark-analysis-node:latest
    container_name: hadoop-worker-1
    hostname: hadoop-worker-1
    depends_on:
      - hadoop-master
    ports:
      - "8081:8081" # Spark Worker UI
      - "9864:9864" # HDFS DataNode Web UI
      - "8042:8042" # YARN NodeManager Web UI
    volumes:
      - spark-analysis_hadoop-slave1-data:/opt/hadoop/data

  hadoop-worker-2:
    image: jnamu/spark-analysis-node:latest
    container_name: hadoop-worker-2
    hostname: hadoop-worker-2
    depends_on:
      - hadoop-master
    ports:
      - "8082:8081" # Spark Worker UI
      - "9865:9864" # HDFS DataNode Web UI
      - "8043:8042" # YARN NodeManager Web UI
    volumes:
      - spark-analysis_hadoop-slave2-data:/opt/hadoop/data

volumes:
  spark-analysis_hadoop-master-data:
    external: true
  spark-analysis_hadoop-slave1-data:
    external: true
  spark-analysis_hadoop-slave2-data:
    external: true

댓글