하둡(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

하둡 등장배경

  1. The Google File System 논문 에서 분산파일 시스템에 관한 내용
  2. MapReduce: Simplified Data Processing on Large Cluster 에서 분산컴퓨팅 시스템 제시
  3. Nutch라는 오픈소스 검색엔진의 하부 프로젝트로 구체적인 시작
  4. 하둡의 등장:  2006년에 아파치 톱레벨 별개 프로젝트로 떨어져나옴

하둡이란?

1. 하둡은 커뮤디티 하드웨어를 활용한 대규모 데이터를 분산 저장하고 처리하는 오픈 소스 소프트웨어 플랫폼.

2. 다수의 노드로 구성된 클러스터 시스템이 마치 하나의 거대한 컴퓨터처럼 동작
3. Hadoop Distributed File System (HDFS)를 통해 데이터를 분산 저장하며, MapReduce를 사용하여 분산 컴퓨팅을 수행.
4. 비용 효율적인 하드웨어를 활용하여 안정적으로 데이터를 저장하고, 병렬 처리를 통해 대용량 데이터셋을 효과적처리.
5. 다양한 산업 분야에서 대용량 데이터 처리 및 분석에 활용

 

하둡의 발전

  • 하둡 1.0은 HDFS위에 MapReduce라는 분산컴퓨팅 시스템이 도는 구조
  • MapReduce 위에서 pig, hive, presto 등 다양한 컴퓨팅 언어들이 만들어짐

  • 하둡 2.0 :  하둡은 YARN이란 이름의 분산처리 시스템위에서 동작하는 애플리케이션이 됨
  • Spark은 YARN위에서 애플리케이션 레이어로 실행

 

HDFS-분산파일 시스템

  • 데이터를 블록단위로 나눠 저장(블록 크기는 128MB)
  • 이 블록들은 Fault tolerance를 보장하기 위해 각각 3군데에 중복으로 저장됨
    + Fault tolerance : 시스템이 하나 이상의 컴포넌트나 서비스의 장애 또는 실패에 대해 견딜 수 있는 능력
  • 하둡 2.0에서는 내임노드의 이중화가 지원되며, Active와 Standby 두 노드가 존재
    + Active에 문제가 생기면 Standby가 내임노트 역할을 함
  • 두 노드 사이에는 공유된 edit log가 존재하며, 이를 통해 지속적인 데이터 일관성을 유지
  • 또한, Secondary 내임노드도 여전히 존재하여 데이터의 신뢰성과 안정성을 제공

 

MapReduce : 분산 컴퓨팅 시스템

  • 하둡 1.0 버전에서는 하나의 잡 트래커(Job Tracker)와 다수의 태스크 트래커(Task Tracker)로 구성되어 있다.
  • 잡 트래커는 작업을 분할하고 다수의 태스크 트래커에게 할당. 각 태스크 트래커에서는 병렬로 작업을 처리.
  • 이 시점의 하둡은 MapReduce만을 지원하며, 제너럴한(일반적인) 시스템이 아니었습니다.
  • 다시 말해, 하둡 1.0은 주로 대용량 데이터 처리를 위한 특화된 환경으로 사용되었으며, 일반적인 용도의 다양한 작업을 수행하는 데에는 적합하지 않았습니다.

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

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

하둡과 spark로 흐름 요약

  1. 대용량 데이터 처리를 위한 오픈소스 기술인 하둡이 등장하면서 데이터 처리 방식이 혁신되었습니다.
  2. 하둡은 분산 파일 시스템과 분산 컴퓨팅 시스템으로 구성되어 있으며, 핵심 구성 요소로는 HDFS와 맵리듀스/YARN이 있습니다.
  3.  맵리듀스 프로그래밍은 제약이 많아 데이터 처리가 어려웠고, 이로 인해 SQL이 다시 주목받게 되었습니다.
    +맵리듀스의 제약 : 병렬 처리를 위해 데이터를 키-값 쌍으로 변환해야 한다. 이로 인해 복잡한 작업을 수행하기가 어려워지고, 비즈니스 로직을 표현하는 데에도 한계가 있다. 또한 맵리듀스는 반복적인 계산을 표현하기에는 적합하지 않아, 반복이 많은 작업에서 효율성이 떨어진다.

  4.  SQL은 데이터 처리를 보다 직관적으로 수행할 수 있도록 도와주는 장점을 가지고 있습니다.
  5.  최근에는 Spark가 대세로 떠오르고 있는데, 이는 대용량 데이터의 분산 컴퓨팅을 위한 기술로 평가받고 있습니다.
  6.  Spark는 Pandas와 Scikit Learn을 강화시킨 것으로 볼 수 있어, 강력한 성능을 자랑합니다.
  7. 뿐만 아니라, SQL 쿼리를 지원하며 스트림 데이터 처리와 그래프 처리도 가능합니다.
  8. Spark은 데이터 처리에 있어 다양한 작업에 효과적으로 대응할 수 있는 다재다능한 기술로 인정받고 있습니다.
  9. 이는 기존의 맵리듀스 프로그래밍의 한계를 극복하고 보다 효율적인 데이터 처리를 가능케 합니다.
  10. 따라서 Spark는 현대의 데이터 처리 환경에서 중요한 위치를 차지하고 있습니다.

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

하둡 설치 +맵리듀스(wordcount) 실습  (0) 2024.01.18
MapReduce(맵리듀스) 프로그래밍  (0) 2024.01.17
YARN  (0) 2024.01.16
하둡 기초  (0) 2024.01.15
빅데이터 기초  (0) 2024.01.15

+ Recent posts