하둡(Hadoop)은 대용량 데이터를 처리하기 위한 오픈 소스 분산 컴퓨팅 프레임워크입니다. 아래는 간단한 가이드라인을 제공하여 Ubuntu 리눅스 서버에 Hadoop 3.0을 의사분산 모드로 설치하는 방법입니다. 주어진 정보를 기반으로 설치를 진행해보세요.
(더 자세한건 : https://github.com/apache/hadoop)

**준비 사항:**
1) AWS 계정 및 EC2 인스턴스 (t2.medium) 보유.
2) Ubuntu 서버에 자바 8 설치.

1. 우분투 어카운트에 로그인( AWS 계정 및 EC2 인스턴스 계정)


2. Ubuntu 서버에 자바 8 설치:**

 

  • ```bash
    sudo apt update
    sudo apt install openjdk-8-jdk-headless
    #유저추가
    sudo adduser hdoop
    su - hdoopssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    # 생성된 공개 키를 authorized_keys 파일에 추가합니다.
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    # authorized_keys 파일에 대한 권한을 설정하여 소유자에게 읽기 및 쓰기 권한만 부여
    chmod 0600 ~/.ssh/authorized_keys
    ```
    # pw 없게 로그인 되게 설정
    # RSA 알고리즘을 사용하여 SSH 키를 생성하고, -P 옵션을 이용하여 암호를 빈 문자열(암호없음)로 설정합니다.



3. Hadoop 다운로드 및 설치:**

 

4. Hadoop 환경 설정:*

 

  • # 로그인시마다 실행되는 파일 설정추가
    vi .bashrc

v

  • # 방금 설정한 설정 적용
    source .bashrc

  • # 마스터 환경설정 파일 접속후 설정 변경
    vi $HADOOP_HOME/etc/hadoop/hadoop-env.sh

 

  • # 내임노드 관련 정보가 들어가는 파일, 수정
    vi $HADOOP_HOME/etc/hadoop/core-site.xml
    <configuration>
      <!-- 임시 디렉터리 설정 -->
      <property>
        <!-- 하둡이 사용하는 임시 디렉터리의 이름을 지정합니다. -->
        <name>hadoop.tmp.dir</name>
        <!-- 임시 디렉터리의 경로를 지정합니다. -->
        <value>/home/hdoop/tmpdata</value>
      </property>

      <!-- 하둡 분산 파일 시스템 (HDFS) 설정 -->
      <property>
        <!-- HDFS의 기본 이름을 지정합니다. -->
        <name>fs.default.name</name>
        <!-- 기본 HDFS 인스턴스의 주소 및 포트를 지정합니다. -->
        <value>hdfs://127.0.0.1:9000</value>
      </property>
    </configuration>
  • # Hadoop의 추가적인 설정을 정의, replication 요소를 1로 추가, 설정추가
    vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml
    <!-- Hadoop Configuration File -->
    <configuration>
      <!-- Hadoop NameNode 데이터 디렉터리 설정 -->
      <property>
        <!-- NameNode가 사용하는 데이터 디렉터리의 이름을 지정합니다. -->
        <name>dfs.data.dir</name>
        <!-- NameNode 데이터 디렉터리의 경로를 지정합니다. -->
        <value>/home/hdoop/dfsdata/namenode</value>
      </property>

      <!-- Hadoop DataNode 데이터 디렉터리 설정 -->
      <property>
        <!-- DataNode가 사용하는 데이터 디렉터리의 이름을 지정합니다. -->
        <name>dfs.data.dir</name>
        <!-- DataNode 데이터 디렉터리의 경로를 지정합니다. -->
        <value>/home/hdoop/dfsdata/datanode</value>
      </property>

      <!-- HDFS 복제 팩터(Replication Factor) 설정 -->
      <property>
        <!-- 파일의 복제본 수를 지정합니다. -->
        <name>dfs.replication</name>
        <!-- 파일의 단일 복제본을 사용하도록 설정합니다. -->
        <value>1</value>
      </property>
    </configuration>


  • # Hadoop MapReduce 프레임워크에서 사용할 프레임워크의 yarn을 지정
    vi $HADOOP_HOME/etc/hadoop/mapred-site.xml
    <!-- Hadoop Configuration File -->
    <configuration>
      <!-- MapReduce 프레임워크 설정 -->
      <property>
        <!-- 사용할 MapReduce 프레임워크의 이름을 지정합니다. -->
        <name>mapreduce.framework.name</name>
        <!-- YARN (Yet Another Resource Negotiator)을 사용하도록 설정합니다. -->
        <value>yarn</value>
      </property>
    </configuration>

  • # YARN(Yet Another Resource Negotiator)의 여러 설정을 정의
    vi $HADOOP_HOME/etc/hadoop/yarn-site.xml
    <configuration>
      <!-- YARN 노드 매니저의 보조 서비스 설정 -->
      <property>
        <!-- 노드 매니저가 사용할 보조 서비스의 이름을 지정합니다. -->
        <name>yarn.nodemanager.aux-services</name>
        <!-- 맵리듀스 셔플을 사용하도록 설정합니다. -->
        <value>mapreduce_shuffle</value>
      </property>

      <!-- 맵리듀스 셔플 보조 서비스 클래스 설정 -->
      <property>
        <!-- 맵리듀스 셔플 보조 서비스의 클래스를 지정합니다. -->
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <!-- 맵리듀스 셔플 핸들러 클래스를 설정합니다. -->
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
      </property>

      <!-- YARN 리소스 매니저 호스트 설정 -->
      <property>
        <!-- YARN 리소스 매니저의 호스트 이름을 지정합니다. -->
        <name>yarn.resourcemanager.hostname</name>
        <!-- 로컬 호스트를 사용하도록 설정합니다. -->
        <value>localhost</value>
      </property>

      <!-- YARN ACL 활성화 설정 -->
      <property>
        <!-- YARN ACL을 활성화 또는 비활성화합니다. -->
        <name>yarn.acl.enable</name>
        <!-- ACL을 비활성화하도록 설정합니다. -->
        <value>0</value>
      </property>

      <!-- 노드 매니저 환경 변수 화이트리스트 설정 -->
      <property>
        <!-- 노드 매니저가 허용하는 환경 변수의 화이트리스트를 지정합니다. -->
        <name>yarn.nodemanager.env-whitelist</name>
        <!-- 허용된 환경 변수 목록을 지정합니다. -->
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PERPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
      </property>

    </configuration>

5. hdfs실행, yarn 실행

  • # 초기화
    hdfs namenode -format

  • # 디렉토리 이동
    cd hadoop-3.3.4/sbin/

  • #HDFS를 시작
    ./start-dfs.sh

  • #yarn을 시작
    ./start-yarn.sh

  • #exit 로 우분투로 나와서, Ubuntu 또는 Debian 기반 시스템에서 OpenJDK 8의 headless(그래픽 사용자 인터페이스 없음) 버전 설치, (GUI) 기능이 없는 환경에서 Java 애플리케이션을 실행하는 데 사용됨
    exit
    sudo apt install openjdk-8-jdk-headless

  • #하둡 계정으로 다시 접근 
    su - hdoop

  • #어떤 자바 프로그램이 돌고 있는지 봄
    jps


6. 하둡 실행

  • ```bash
    # Hadoop 포맷
    bin/hdfs namenode -format

    # Hadoop 시작
    sbin/start-dfs.sh
    ```

    웹 브라우저에서 `http://localhost:9870`으로 접속하여 Hadoop 관리자 페이지 확인.

 

7. 맵리듀스 실행 실습

  • #하둡 폴더로 이동
    cd hadoop-3.3.4/

    #유저 생성
    bin/hdfs dfs dfs -mkdir /user

    # /hdoop 폴더 제작
    bin/hdfs dfs dfs -mkdir /user/hdoop

    # input폴더 만듦
    bin/hdfs dfs dfs -mkdir input

    # words.txt 제작후 분석할 내용 입력
    vi words.txt
    the brave yellow lion the lion ate the cow now the lion is happy

  • 로컬 파일 시스템에 있는 words.txt 파일을 Hadoop 분산 파일 시스템 (HDFS)의 input 디렉토리로 복사
    bin/hdfs dfs -put words.txt input

  • Hadoop 클러스터에서 WordCount 예제가 실행되어 입력 데이터에서 각 단어의 출현 빈도를 계산하고 output에 저장
    bin/hadoop jar shqre/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar wordcount input output 
    + bin/hadoop: Hadoop 명령어를 실행 / jar: JAR 파일을 실행 / 실행할 JAR 파일의 경로/ 실행할 Java 클래스인 wordcount / 입력 데이터가 위치한 HDFS의 경로/  출력 결과를 저장할 HDFS의 경로
  • bin/hdfs dfs -ls output
    출력물 리스트 보기

  • #출력물에서 하나 선택
    bin/hdfs dfs -cat output/part-r-00000

 

'하둡,spark' 카테고리의 다른 글

spark 기초  (0) 2024.01.18
맵리듀스(MapReduce) 문제점  (0) 2024.01.18
MapReduce(맵리듀스) 프로그래밍  (0) 2024.01.17
YARN  (0) 2024.01.16
하둡 기초  (0) 2024.01.15

하둡 2.0(yarn 1.0) : 분산 컴퓨팅 시스템 

  • 분산 컴퓨팅 시스템은 여러 대의 컴퓨터를 활용하여 데이터 처리 또는 계산 작업을 수행하는 시스템을 의미
  • 하둡 2.0은 분산 컴퓨팅을 지원하는 프레임워크 중 하나로, 그 중요한 기능 중 하나가 YARN(Yet Another Resource Negotiator)이라 불리는 리소스 매니저

하둡 2.0의 구성요소

  1. 리소스 매니저 (Resource Manager): 하둡 2.0에서 중요한 역할을 하는 부분 중 하나입니다. 리소스 매니저는 전체 클러스터에서 사용 가능한 자원을 효율적으로 관리하고, 각각의 작업이 필요로 하는 자원을 할당합니다. 이는 Job Scheduler와 Application Manager로 구성되어 있습니다.

    1) Job Scheduler: 작업을 관리하고 스케줄링하는 역할을 합니다. 여러 작업 중에서 어떤 작업을 언제 실행할지를 결정하며, 리소스 매니저에게 자원을 요청하여 작업을 수행합니다.
    2) Application Manager: 어플리케이션의 생명 주기를 관리합니다. 어플리케이션 실행, 종료, 실패 등의 이벤트를 처리하고 어플리케이션 상태를 유지합니다.

  2. 노드 매니저 (Node Manager): 각 컴퓨터 노드에서 실행되며, 노드의 자원 사용 및 상태를 리소스 매니저에게 보고합니다. 리소스 매니저가 할당한 자원을 기반으로 작업을 수행하는 역할을 합니다.

  3. 컨테이너: 리소스를 격리된 환경에서 실행하기 위한 메커니즘입니다. 앱 마스터와 태스크를 실행하는 데 사용됩니다.
    1) 앱 마스터 (Application Master): 각 어플리케이션마다 할당된 리소스를 관리하는 역할을 합니다. 어플리케이션의 실행 계획을 작성하고, 노드 매니저에게 자원을 할당받아 태스크를 실행합니다.
    2) 태스크: 실제로 수행되어야 하는 작업 단위입니다. 어플리케이션의 로직을 실행하는 부분이며, 컨테이너 내에서 실행됩니다.


YARN의 동작

  1.  **어플리케이션 및 환경 정보 전달:**
       - 사용자가 실행하려는 코드와 관련된 환경 정보를 Resource Manager(RM)에게 전달합니다.
       - RM은 이 정보를 기반으로 실행에 필요한 자원을 할당하게 됩니다.

  2. **파일 복사:**
       - 실행에 필요한 파일들은 HDFS에 해당하는 어플리케이션 ID의 폴더에 미리 복사됩니다.
       - 이는 분산 파일 시스템인 HDFS에 저장된 데이터를 활용하여 데이터의 안정성과 고가용성을 보장합니다.

  3.  **컨테이너 할당:**
       - RM은 NM(Node Manager)으로부터 컨테이너를 받아옵니다.
       - Application Master(AM)은 각각의 어플리케이션에 대해 할당된 프로그램 마스터에 해당합니다.

  4. **AM이 리소스 요구:**
       - AM은 실행에 필요한 리소스를 RM에게 요구합니다.
       - RM은 data locality를 고려하여 리소스(컨테이너)를 할당합니다.
  5. **리소스 할당 및 파일 복사:**
       - 할당된 리소스는 실행에 필요한 파일들과 함께 해당 노드의 HDFS로 복사됩니다.
       - 이때 data locality를 고려하여 데이터를 가지고 있는 노드에 할당되어 I/O 성능을 최적화합니다.
  6.  **컨테이너 내에서 코드 실행:**
       - AM은 할당받은 리소스(컨테이너)를 NM을 통해 실행합니다.
       - 컨테이너 내에서 코드가 실행되며, 복사된 파일들이 활용됩니다.
  7. **태스크 상태 보고:**
       - 각 태스크는 주기적으로 AM에게 상태를 보고합니다(heartbeat).
       - 만약 태스크가 실패하거나 보고가 오랜 시간 없으면, 해당 태스크를 다른 컨테이너로 재실행할 수 있습니다.

하둡 3.0의 특징

  1.  **YARN 2.0의 도입:**
       - 하둡 3.0에서는 YARN (Yet Another Resource Negotiator) 버전이 업그레이드되었습니다. YARN은 분산 컴퓨팅을 위한 자원 관리 시스템으로, 하둡 클러스터에서 다양한 작업들을 효율적으로 실행할 수 있게 합니다.
       - YARN 2.0에서는 프로그램들을 논리적인 그룹으로 나누어서 자원 관리가 가능한데, 이를 '플로우(Flow)'라고 부릅니다. 이로써 데이터 수집과 데이터 서빙 프로세스 등을 분리하여 관리할 수 있게 되었습니다.

  2. **타임라인 서버와 HBase 사용:**
       - YARN 2.1부터는 타임라인 서버에서 HBase를 기본 스토리지로 사용합니다. 타임라인 서버는 YARN 애플리케이션의 실행 이력 정보를 수집하고 검색할 수 있는 기능을 제공합니다.
       - 이를 통해 클러스터에서 실행되는 애플리케이션들에 대한 이력과 메트릭 데이터를 효과적으로 저장하고 조회할 수 있습니다.

  3. **다양한 파일 시스템 지원:**
       - 하둡 3.0에서는 Hadoop Distributed File System (HDFS)의 내임노드가 다수의 스탠바이 내임노드를 지원합니다. 이것은 내임노드의 고가용성을 향상시키고, 클러스터의 안정성을 높입니다.
       - 또한, HDFS뿐만 아니라 다양한 파일 시스템을 지원합니다. S3, Azure Storage 외에도 Azure Data Lake Storage 등을 통합적으로 지원하여 유연성을 제공합니다.

'하둡,spark' 카테고리의 다른 글

하둡 설치 +맵리듀스(wordcount) 실습  (0) 2024.01.18
MapReduce(맵리듀스) 프로그래밍  (0) 2024.01.17
하둡 기초  (0) 2024.01.15
빅데이터 기초  (0) 2024.01.15
하둡의 등장과, spark로의 흐름  (0) 2024.01.15

+ Recent posts