본문 바로가기 대메뉴 바로가기

테크니컬 스토리

아이티마야의 새로운 기술 뉴스를 만나보세요.
Hadoop이란?
등록일
2025.05.15
첨부파일

제목 : Hadoop이란?

부제 : Docker Swarm으로 Hadoop HDFS를 설치해 보자.

Hadoop이란

  • 대규모 데이터를 분산 처리하는 데 사용되는 오픈 소스 프레임워크입니다.
  • Hadoop은 Apache Software Foundation에서 개발하고 관리하며, 여러 컴퓨터에서병렬로 데이터를 처리하여 높은 신뢰성과 확장성을 제공합니다.

HDFS[Hadoop Distributed File System]란

프레임워크의 핵심 컴포넌트 중 하나로, 대용량 데이터를 분산 저장하는 분산 파일 시스템입니다. HDFS는 다음과 같은 특징을 가지고 있습니다:

  1. 1.분산 파일 시스템:
    HDFS는 대용량 데이터를 여러 노드에 분산하여 저장하는 분산 파일 시스템입니다. 이는 데이터를 여러 노드에 나누어 저장하고, 병렬로 처리함으로써 높은 확장성과 성능을 제공합니다.
  2. 2.장애 허용성:
    HDFS는 데이터를 여러 노드에 복제하여 저장하므로, 하나의 노드가 고장나더라도 다른 노드에 데이터가 여분으로 저장되어 데이터의 손실을 방지합니다. 기본적으로 HDFS는 데이터를 세 개의 복제로 저장합니다.
  3. 3.높은 처리량:
    HDFS는 데이터를 분산 저장하고 처리할 수 있도록 설계되어 있어, 대용량 데이터에 대한 높은 처리량을 제공합니다. 이는 데이터를 여러 노드에서 병렬로 처리함으로써 가능합니다.
  4. 4.확장성:
    HDFS는 데이터 양이 증가하면 클러스터의 노드 수를 간편하게 추가하여 확장할 수 있습니다. 즉, 데이터 양이 늘어나면 클러스터의 크기도 확장할 수 있어 대규모 데이터에 대응할 수 있습니다.
  5. 5.데이터 일관성:
    HDFS는 데이터의 일관성을 유지하기 위해 쓰기와 읽기 작업에 대한 일관성 모델을 제공합니다. 데이터는 일관성 모델을 통해 클러스터 전체에 걸쳐 일관적으로 유지됩니다.

HDFS는 주로 대규모 데이터 분석 및 처리를 위해 사용되며, Apache Hadoop 생태계에서 많은 다른 도구들과 통합되어 데이터 처리 및 분석 작업을 수행합니다.

Docker Hadoop Install


      저의 구성 환경 입니다. [node1, node2 동일]

      OS:[VM]Ubuntu20.04 CLI 
      CPU:8core 
      DISK:50GB 
      DISK1:100GB
      MEMORY:16GB
  

Hadoop 클러스터 구성 가이드

  1. 1.Docker 설치: :
    Docker를 이용하여 구성하기 때문에, 필수로 설치해야 합니다.
  2. 2.SSH 설정:
    모든 머신에서 SSH 키 교환을 통해 비밀번호 없이 서로 통신할 수 있도록 설정합니다. 이전에 생성한 SSH 키를 사용하거나 새로운 키를 생성합니다.
  3. 3.Hadoop 설정 파일 수정:
    $HADOOP_HOME/etc/hadoop/ 디렉토리에 있는 다음 파일들을 각 머신에 복사하고 수정합니다.
    core-site.xml: Hadoop 클러스터의 공통 구성을 지정합니다.
    hdfs-site.xml: HDFS(분산 파일 시스템) 설정을 지정합니다.
    mapred-site.xml: MapReduce 작업을 구성합니다.
    yarn-site.xml: YARN(클러스터 리소스 관리) 설정을 지정합니다.
  1. 1.ssh 키 교환 및 Docker 설치 [모든 노드에 설치해 줍니다.]
          
              SSH 키교환
              # ssh-keygen -t rsa
              # ssh-copy-id -i ~/.ssh/id_rsa ID@IP
    
              docker 설치
              # sudo apt update
              # sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
              # curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
              # sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
              # sudo apt update
              # apt-cache policy docker-ce
              # sudo apt install docker-ce
              # curl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
              # sudo apt install docker-compose
    
              docker 상태를 확인해 줍니다.
              # sudo systemctl status docker
    
              docker-compose 확인
              # docker-compose -v
            
  2. 2.Hadoop 저장소를 다운로드 해줍니다.[Node1 만]
    GitHub에서 big-data-europe Hadoop Docker 저장소를 복제합니다.
    
            # git clone https://github.com/big-data-europe/docker-hadoop.git
            # cd docker-hadoop
          
  3. 3.Hadoop Docker 컨테이너 구성합니다. [Node1 만]
    docker-compose.yml 파일을 열어서 클러스터 구성을 조정합니다. 다음 명령어를 사용하여 편집합니다.
    
            # sudo vi  docker-compose.yml
    
            [파일 내의 services 섹션을 수정하여 클러스터 노드 수 및 다른 구성을 조정합니다. 예를 들어, namenode, datanode1, datanode2 등의 서비스를 확인하고 필요한 경우 수정합니다. ]
    
            [아래는 예시로, datanode, datanode1로 2개의 datanode로 구성해 두었습니다.]
    
            namenode:
                image: bde2020/hadoop-namenode:2.0.0-hadoop3.2.1-java8
                container_name: namenode
                restart: always
                ports:
                  - 9870:9870
                  - 9000:9000
                volumes:
                  - hadoop_namenode:/hadoop/dfs/name
                environment:
                  - CLUSTER_NAME=test
                env_file:
                  - ./hadoop.env
    
              datanode:
                image: bde2020/hadoop-datanode:2.0.0-hadoop3.2.1-java8
                container_name: datanode
                restart: always
                volumes:
                  - hadoop_datanode:/hadoop/dfs/data
                environment:
                  SERVICE_PRECONDITION: "namenode:9870"
                env_file:
                  - ./hadoop.env
    
              datanode1:
                image: bde2020/hadoop-datanode:2.0.0-hadoop3.2.1-java8
                container_name: datanode
                restart: always
                volumes:
                  - hadoop_datanode:/hadoop/dfs/data
                environment:
                  SERVICE_PRECONDITION: "namenode:9870"
                env_file:
                  - ./hadoop.env
              
  4. 4.HDFS에 사용하실 저장 공간을 아래와 같이 Docker에 지정해 줍니다. [node1, node2]
    
            # vi /etc/docker/daemon.json
            {
                "data-root": "<신규_생성한_디렉터리>"
            }
    
            저같은 경우, 100GB를 /data로 마운트 해두었으므로 아래와 같이 설정 하였습니다.
            {
                "data-root": "/data"
            }
    
            # sudo systemctl daemon-reload
            # sudo systemctl start docker.service
    
            아래는 저장소가 바뀌었는지 확인하는 명령어 입니다.
            # sudo docker info | grep -i "docker root dir"
            WARNING: No swap limit support
             Docker Root Dir: /data
           
  5. 5.Docker 컴포즈 실행
    터미널에서 Docker Compose를 사용하여 클러스터를 실행합니다.
    
            # cd docker-hadoop
            # sudo docker stack deploy -c docker-compose.yml hadoop
            

    이 명령은 백그라운드에서 컨테이너를 실행합니다.

  6. 6.Docker stack 확인 방법
    
              # sudo docker stack ps hadoop
              ID             NAME                        IMAGE                                                    NODE      DESIRED STATE   CURRENT STATE            ERROR                              PORTS
              xw8rpi0bib1r   hadoop_datanode1.1          bde2020/hadoop-datanode:2.0.0-hadoop3.2.1-java8          node2     Running         Running 20 minutes ago                                      
              olexn28o81nl   hadoop_datanode.1           bde2020/hadoop-datanode:2.0.0-hadoop3.2.1-java8          node1     Running         Running 20 minutes ago                                      
              eevd107ae5vn   hadoop_historyserver.1      bde2020/hadoop-historyserver:2.0.0-hadoop3.2.1-java8     node1     Running         Running 19 minutes ago                                      
              z936zksvot9t   hadoop_namenode.1           bde2020/hadoop-namenode:2.0.0-hadoop3.2.1-java8          node2     Running         Running 20 minutes ago                                      
              hhs73be43q09   hadoop_nodemanager1.1       bde2020/hadoop-nodemanager:2.0.0-hadoop3.2.1-java8       node2     Running         Running 19 minutes ago                                      
              7myf76ile88o   hadoop_resourcemanager.1    bde2020/hadoop-resourcemanager:2.0.0-hadoop3.2.1-java8   node1     Running
              
  7. 7.HDFS test방법
    
            우선, 해당 namenode 컨테이너로 접속해 줍니다.
            # sudo docker exec -ti [container ID] /bin/bash
    
            아래는 예시 입니다.
            # sudo docker exec -ti d20bda7bbb41 /bin/bash
    
    
            TEST 방법 [HDFS에 간단한 텍스트 파일을 업로드해보기]
    
            # hdfs dfs -mkdir /test     [HDFS에 디렉토리를 생성]
            # echo "Hello, HDFS!" > hello.txt    [HDFS에 간단한 텍스트 파일을 업로드]
            # hdfs dfs -copyFromLocal hello.txt /test/
            # hdfs dfs -ls /test/        [업로드한 파일이 HDFS에 올바르게 저장되었는지 확인]
            # hdfs dfs -copyToLocal /test/hello.txt .    [HDFS에서 파일을 다운로드하여 내용을 확인]
            # cat hello.txt
          

아래 이미지처럼, 웹 인터페이스에서도, 해당 텍스트 파일을 찾아볼 수 있습니다.

웹 인터페이스 확인 방법


    http://localhost:9870
  

아래 이미지처럼 2개의 노드가 묶인 것을 확인할 수 있습니다.

PLEASE WAIT WHILE LOADING...