hadoop, zookeeper docker compose

4e5ung·2021년 10월 14일
0

docker compose

docker 구성

https://velog.io/@4e5ung/Hadoop-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0-%EA%B5%AC%EC%84%B1

전체 구성과 동일 docker-compose 형태로 재정의

docker-compose

hadoop, zookeeper, ssh, 사용자 계정 등 기본 설치는 진행 이후 해당 이미지를 토대로 docker-compose 형태 생성, 총 5개의 docker-compose 필요

  • docker-compose.yml
networks:
  hadoop_network:
    external:
      name: hadoop_network

services:
  hadoop:
    container_name: hadoop_nn0
    build:
      context: hadoop/
    volumes:
      - type: bind
        source: ./hadoop/hadoop_config/workers
        target: /home/hduser/hadoop-3.3.1/etc/hadoop/workers
      - type: bind
        source: ./hadoop/hadoop_config/hdfs-site.xml
        target: /home/hduser/hadoop-3.3.1/etc/hadoop/hdfs-site.xml
      - type: bind
        source: ./hadoop/hadoop_config/hadoop-env.sh
        target: /home/hduser/hadoop-3.3.1/etc/hadoop/hadoop-env.sh
      - type: bind
        source: ./hadoop/hadoop_config/yarn-site.xml
        target: /home/hduser/hadoop-3.3.1/etc/hadoop/yarn-site.xml
      - type: bind
        source: ./hadoop/hadoop_config/core-site.xml
        target: /home/hduser/hadoop-3.3.1/etc/hadoop/core-site.xml
      - type: bind
        source: ./hadoop/zookeeper_config/myid
        target: /home/zookeeper/data/myid
      - type: bind
        source: ./hadoop/zookeeper_config/zoo.cfg
        target: /home/zookeeper/zookeeper-3.4.6/conf/zoo.cfg
      - type: bind
        source: /etc/localtime
        target: /etc/localtime
      - type: bind
        source: ./hadoop/sshd_config
        target: /etc/ssh/sshd_config
      - type: bind
        source: ./hadoop/startStep1.sh
        target: /home/startStep1.sh
      - type: bind
        source: ./hadoop/startStep2.sh
        target: /home/startStep2.sh
      - type: bind
        source: ./hadoop/startStep3.sh
        target: /home/startStep3.sh
      - type: bind
        source: ./hadoop/startStep4.sh
        target: /home/startStep4.sh
        #      - type: volume
        #  source: hadoop
        # target: /home
    working_dir: /home
    extra_hosts:
      - "test-nn1:172.19.0.3"
      - "test-jn0:172.19.0.4"
      - "test-dn0:172.19.0.5"
      - "test-dn1:172.19.0.6"
    hostname: test-nn0
    ports:
      - "51970:51070"
      - "58920:58020"   
            # - "51070:51070"
        #- "51022:22"
    networks:
      - hadoop_network
    stdin_open: true
    tty: true 
  • container_name: 컨테이너 이름 설정 (Dockerfile 빌드가 우선 순위라 build 이후 compose를 통해 container name 이 설정 됨)

  • type: 형태로 바인드 해서 로컬과 도커 파일 연동

  • volume 의 경우 docker 자체 volume 으로 바인드 이후 해당 파일을 덮어쓰게 됨
    (Dockerfile 빌드 -> dockercompose 바인드 이후 볼륨마운트-> Dockerfile 에 entry,cmd 실행)

  • extra_hosts: 도커 호스트 설정

  • networks: 임의의 네트워크 설정(모든 도커를 하나의네트워크 안에 포함시키기 위해(단일pc))

  • startStep: 최대 4개로 구성되며
    (entrypoint.sh : docker compose 이후 최초 실행되면서 ssh 서비스 실행 및 zookeeper 실행)
    step1: ssh 키 복사 (모든 docker-compose에서 실행되어야함)
    step2: journalnode 실행 (3개의 journalnode에서 실행)
    step3: namenode 실행(2개의 namenode에서 실행, activate, standby 순으로)
    step4: 전체 hadoop 서비스 종료 이후 재실행( activate namenode 에서 실행)

Dockerfile

  • Dockerfile
FROM hadoop_image:latest


USER hduser
RUN rm -f /home/hduser/.ssh/id_rsa /home/hduser/.ssh/id_rsa.pub /home/hduser/.ssh/authorized_keys
RUN ssh-keygen -q -N "" -C "hduser@test-nn0" -t rsa -f /home/hduser/.ssh/id_rsa
RUN cp /home/hduser/.ssh/id_rsa.pub /home/hduser/.ssh/authorized_keys

USER root
COPY ./entrypoint.sh /home
RUN chmod 755 /home/entrypoint.sh

ENTRYPOINT ["sh", "/home/entrypoint.sh"]
  • FROM: 기존에 만들어 놓은 도커 이미지
  • USER: 계정 변경
  • RUN: 명령어 실행(SSH 키 생성 - 임의로 comment 를 입력하여 복사 이후 해당 호스트 구분)
  • ENTRYPOINT : ENTRYPOINT 및 CMD 명령어는 1개만 호출됨, entrypoint.sh 를 임의로 만들어서 실행 함으로써 2가지 이상의 서비스를 실행(ssh, zookeeper 실행)

github : https://github.com/4e5ung/hadoop_docker_compose

0개의 댓글