ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Hadoop] Docker 로 구축하는 Hadoop Cluster
    Hadoop 2024. 6. 8. 13:08
    728x90
    반응형

    - 목차

     

    들어가며.

    이번 글에서는 Docker와 Dockerfile을 사용해 간단히 Hadoop 클러스터를 구축하는 방법을 소개합니다.

    대규모 데이터 분석을 위해 널리 사용되는 Hadoop 은 일반적으로 복잡한 설치 과정이 필요하지만,

    Docker를 사용하면 이 과정을 손쉽게 자동화하고 간소화할 수 있습니다.

    이 글에서는 Dockerfile 을 작성해 필요한 Hadoop 이미지와 컨테이너를 생성하고,

    이를 바탕으로 최소한의 리소스로 구성된 단일 노드 또는 다중 노드 클러스터를 구축하는 과정을 다룹니다.

     

     

    도커 파일 작성하기.

    Hadoop 클러스터를 구축하기 위한 Dockerfile을 작성하는 방법을 알아보겠습니다.

    이번 설정에서는 Ubuntu를 기본 이미지로 사용하고, Hadoop 설치와 HDFS 설정을 통해 네임노드와 데이터노드 역할을 수행할 수 있는 컨테이너 환경을 구축하겠습니다.

     

    dockerfile.

    먼저, Hadoop을 설치할 기본 이미지 환경을 설정합니다.

    Ubuntu 20.04를 기반으로 하며, 필요한 Java와 Hadoop을 설치하고 환경 변수를 설정합니다.

    Hadoop 3.3.5 버전을 사용할 예정입니다.

     

    참고로 COPY 명령어를 통해 설정 파일을 Hadoop 디렉토리의 설정 폴더에 복사해야 합니다.

    이를 통해 HDFS에서 사용하는 기본 파일 시스템과 복제 계수, 데이터 저장 위치 등의 설정이 Docker 컨테이너 내에서 적용됩니다.

    core-site.xml과 hdfs-site.xml 파일에 대한 자세한 설명은 아래에서 확인하실 수 있습니다.

    
    FROM ubuntu:20.04
    
    ENV HADOOP_VERSION=3.3.5
    ENV HADOOP_HOME=/usr/local/hadoop
    ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
    ENV PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    
    RUN apt-get update && \
        apt-get install -y openjdk-8-jdk curl rsync && \
        apt-get clean
    
    RUN curl -O https://downloads.apache.org/hadoop/common/hadoop-$HADOOP_VERSION/hadoop-$HADOOP_VERSION.tar.gz && \
        tar -xzvf hadoop-$HADOOP_VERSION.tar.gz && \
        mv hadoop-$HADOOP_VERSION /usr/local/hadoop && \
        rm hadoop-$HADOOP_VERSION.tar.gz
    
    COPY core-site.xml $HADOOP_HOME/etc/hadoop/core-site.xml
    COPY hdfs-site.xml $HADOOP_HOME/etc/hadoop/hdfs-site.xml
    
    EXPOSE 9870 9864 8088 9000
    
    CMD ["/bin/bash"]

     

    core-site.xml

    <configuration>
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://namenode:9000</value>
        </property>
    </configuration>

     

    hdfs-site.xml

    <configuration>
        <property>
            <name>dfs.replication</name>
            <value>1</value>
        </property>
        <property>
            <name>dfs.namenode.name.dir</name>
            <value>file:///usr/local/hadoop/hdfs/namenode</value>
        </property>
        <property>
            <name>dfs.datanode.data.dir</name>
            <value>file:///usr/local/hadoop/hdfs/datanode</value>
        </property>
    </configuration>

     

     

    Docker Image 생성하기.

    저의 경우에는 아래와 같은 구조로 dockerfile, core-site.xml, hdfs-site.xml 파일을 생성하였습니다.

    ├── hadoop
    │   ├── core-site.xml
    │   ├── docker-compose.yaml
    │   ├── dockerfile
    │   ├── hdfs-site.xml

     

    그래서 현재 디렉토리 위치에서 -f 옵션을 통해 dockerfile 의 Location 을 명시하였고, 작업 콘텍스트 위치를 hadoop/ 으로 설정하였습니다.

    docker build --platform linux/amd64 -t westlife0615/hadoop-base:0.0.1 \
    -f hadoop/dockerfile hadoop/

     

    도커 빌드를 하게되면 수 분이 소요됩니다.

    제가 만든 Docker 이미지를 Docker Hub에 등록해 두었으니, 필요하시면 자유롭게 사용하셔도 좋습니다.

     

    https://hub.docker.com/r/westlife0615/hadoop-base

     

    https://hub.docker.com/r/westlife0615/hadoop-base

     

    hub.docker.com

     

     

    Hadoop Cluster 실행하기.

    Docker Compose를 통해 여러 개의 컨테이너를 하나의 Hadoop 클러스터로 연결할 차례입니다.

    Docker Compose를 사용하면, 네임노드와 데이터노드가 포함된 복수의 컨테이너를 손쉽게 관리하고 실행할 수 있습니다.

    이번 섹션에서는 준비된 docker-compose.yaml 파일을 바탕으로 클러스터를 구성하고 실행하는 방법을 설명합니다.

     

    docker-compose.yaml

    1개의 네임노드 서비스와 3개의 데이터노드 서비스를 실행합니다.

    version: '3'
    services:
      namenode:
        image: westlife0615/hadoop-base:0.0.1
        platform: linux/amd64
        container_name: namenode
        hostname: namenode
        ports:
          - "9870:9870"
          - "9000:9000"
        command: "/bin/bash -c 'hdfs namenode -format && hdfs namenode'"
      datanode-1:
        image: westlife0615/hadoop-base:0.0.1
        platform: linux/amd64
        container_name: datanode-1
        hostname: datanode-1
        ports:
          - "9861:9864"
          - "9001:9000"
        command: ["hdfs", "datanode"]
      datanode-2:
        image: westlife0615/hadoop-base:0.0.1
        platform: linux/amd64
        container_name: datanode-2
        hostname: datanode-2
        ports:
          - "9862:9864"
          - "9002:9000"
        command: ["hdfs", "datanode"]
      datanode-3:
        image: westlife0615/hadoop-base:0.0.1
        platform: linux/amd64
        container_name: datanode-3
        hostname: datanode-3
        ports:
          - "9863:9864"
          - "9003:9000"
        command: ["hdfs", "datanode"]

     

     

    이제 docker-compose 를 실행합니다.

    저는 docker-compose.yaml 파일을 현재 디렉토리를 기준으로 hadoop/docker-compose.yaml 의 위치에 생성하였습니다.

     

    docker-compose -p hadoop-cluster -f hadoop/docker-compose.yaml up -d

     

    아래 캡처 이미지는 Docker Desktop에서 확인한 내용을 제가 직접 캡처한 것입니다.

     

     

     

    그리고 http://localhost:9870 URL 을 접속하여 네임노드의 상태를 Web UI 를 통해서 확인할 수 있습니다.

     

     

     

     

     

    반응형
Designed by Tistory.