Hadoop 스터디&Mac OS 구축

sosimeow·2023년 10월 9일
0

Data Engineering

목록 보기
6/6
post-thumbnail

1. 하둡이란?

Hadoop 이란

빅데이터를 분할하여 저장하고 처리하기 위한 오픈소스 프레임워크.

구조화 데이터가 아닌 비구조화 데이터등을 분산으로 저장 (HDFS) 해서 분산 처리 작업(범용 컴퓨터 여러 대를 클러스터화하고, 클러스터에서 병렬로 동시에 처리하여 처리 속도를 높이는 것)을 한다.

  • 여러 컴퓨터로 구성된 클러스터를 이용하여 방대한 양의 데이터를 처리하는 분산 처리 프레임워크
  • 엔진 형태로 되어 있는 미들웨어 와 소프트웨어 개발 프레임워크로 구성
  • 즉시 응답해야하는 트랜잭션 처리 보다 데이터를 모아 처리 작업 완료 후 응답을 주는 방식
  • 시간 소요가 있는 방대한 양의 데이터 처리에 적합

하둡 = HDFS(저장) + (MAP+REDUCE)(처리)

  • 맵리듀스는 하나의 큰 데이터를 여러 개의 조각으로 나누어 처리하는 MAP 단계와 처리된 결과를 하나로 모아서 취합 후 결과를 도출해내는 REDUCE 단계로 구성



하둡의 구성 요소

하둡은 4개의 주요 모듈로 구성된다.

  • Hadoop Common

    • 하둡의 다른 모듈을 지원하기 위한 공통 컴포넌트 모듈
  • Hadoop HDFS

    • 분산저장을 처리하기 위한 모듈
    • 여러 개의 서버를 하나의 서버처럼 묶어서 데이터를 저장
  • Hadoop YARN

    • 병렬 처리를 위한 클러스터 자원관리 및 스케줄링 담당
  • Hadoop Mapreduce

    • 분산되어 저장된 데이터를 병렬 처리할 수 있게 해주는 분산 처리 모듈
  • Hadoop Ozone

    • 하둡을 위한 오브젝트 저장소



하둡의 장단점

  • 장점
    • 오픈소스로 라이선스에 대한 비용 부담이 적음
    • 시스템을 중단하지 않고, 장비의 추가가 용이 (Scale Out)
    • 일부 장비에 장애가 발생하더라도 전체 시스템 사용성에 영향이 적음 (Fault tolerance)
    • 저렴한 구축 비용과 비용대비 빠른 데이터 처리
    • 오프라인 배치 프로세싱에 최적화
  • 단점
    • HDFS 에 저장된 데이터를 변경 불가
    • 실시간 데이터 분석 같이 신속하게 처리해야하는 작업에는 부적합
    • 너무 많은 버전과 부실한 서포트
    • 설정의 어려움



HDFS (저장)

HDFS(Hadoop Distributed File System) 는 하둡이 처리(MAPREDUCE) 할 수 있는 파일 시스템으로, 범용 하드웨어에서 동작하고, 장애 복구성을 가지는 분산 파일 시스템을 목표로 한다.

HDFS 는 실시간 처리보다는 배치처리를 위해 설계되었다. 따라서 빠른 데이터 응답시간이 필요한 작업에는 적합하지 않고, 네임노드가 단일 실패 지점(SPOF)이 되기 때문에 네임노드 관리가 중요하다.

  • SPOF (single point of Failure) : 시스템 구성 요소 중에서, 동작하지 않으면 전체 시스템이 중단되는 요소

블록 단위 저장

HDFS 는 데이터를 블록 단위로 나눠서 저장한다. 블록사이즈 보다 작은 파일은 기존 파일의 사이즈로 저장하고, 블록 사이즈보다 큰 크기의 데이터 파일은 블록단위로 나누어 저장하기 때문에 단일 디스크의 데이터보다 큰 파일도 저장할 수 있다

블록 복제를 이용한 장애 복구

HDFS 는 장애 복구를 위해 각 블록을 복제하여 저장. 블록의 기본 복제 단위는 3으로 하나의 블록은 3개의 블록으로 복제되어 같은 Rack 의 서버와 다른 Rack 의 서버로 복제되어 저장된다.

이로 인해 1G 저장에 3G 의 저장소를 사용했지만, v3 부터는 이레이져 코딩 도입으로 패리티 블록(parity bits)을 이용하여 1.5G 디스크를 사용한다.

수정 제한을 통한 속도 개선

HDFS 는 데이터를 한 번 쓰고 여러 번 읽는 것을 목적으로 함. 따라서 파일 수정을 지원하지 않고, 이를 통해 데이터 읽는 속도를 향상시켰다.

데이터 지역성

mapreduce 는 HDFS 의 데이터 지역성을 이용해 처리 속도를 증가시킨다. 데이터를 이동시키지 않고, 데이터가 있는 곳에서 알고리즘을 처리하여 네트워크를 통해 대용량 데이터를 이동시키는 비용을 줄일 수 있다.



MAPREDUCE (처리)

구글에서 개발한 방대한 양의 데이터를 처리하는 프로그래밍 모델 (효과적인 병렬 및 분산 처리를 제공)

  • MAP 작업은 입력 데이터를 처리해 중간 데이터를 생성
  • REDUCE 작업은 SHUFFLE 된 중간 데이터를 병합해 출력 데이터(HDFS) 를 생성 :arrow_right: 병렬 및 분산 처리
  • MAPREDUCE 는 동시에 실행된다.

image
출처



Hive

하둡에서 동작하는 SQL 프로그램을 구현할 수 있는 Hive 는 하둡 기반의 데이터웨어하우스 인프라, RDB 에 익숙한 개발자에게 훌륭한 인터페이스 제공

  • SQL 과 같이 선언적으로 데이터를 처리 가능
  • HDFS 나 HBase 와 같은 빅데이터 원본을 HQL 언어를 이용해 분석
  • MapReduce 기반의 실행 부분과 데이터가 저장된 공간의 메타데이터 정보, 사용자나 응용프로그램에서 질의를 입력받아 실행시키는 실행 부분으로 구성됨.



2. Mac OS 위 구축

$ sw_vers
productVersion: 12.5
BuildVersion: 21G72
  • hadoop 3.2.1
  • java 1.8
$ brew install cask
$ brew install --cask homebrew/cask-versions/adoptopenjdk8
==> mysql
We've installed your MySQL database without a root password. To secure it run:
    mysql_secure_installation

MySQL is configured to only allow connections from localhost by default

To connect run:
    mysql -u root

To start mysql now and restart at login:
  brew services start mysql
$ brew install hadoop
$ brew services hadoop

$ brew info hadoop

Configure Hadoop

/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home

cd /opt/homebrew/Cellar/hadoop/3.3.4/libexec/etc/hadoop
vim hadoop-env.sh   

아래 2개 line 추가 (개행 띄우기 o, 문자 찾기/)

# 자바 환경변수 찾기
$ /usr/libexec/java_home
export HADOOP_OPTS=”-Djava.net.preferIPv4Stack=true -Djava.security.krb5.realm= -Djava.security.krb5.kdc=export JAVA_HOME="/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home"

$ vim core-site.xml
# 원래 core files configuration

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/Cellar/hadoop/hdfs/tmp</value>
        <description>A base for other temporary directories.</description>
    </property>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>
$ ssh localhost

$ ls -al ~/.ssh
# Lists the files in your .ssh directory, if they exist

last login time 이 위 사진처럼 뜨지 않으면 아래 command 실행

$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys

format NameNode

$ cd /usr/local/cellar/hadoop/3.2.4/libexec/bin
$ hdfs namecode -format

export HADOOP_OPTS 에서 오타나서 발생한 오류였다,,
오타 수정하고 다시 커맨드 날리면

$ ./start-all.sh

하둡 실행해주고

9870 포트로 local 접속하면 hadoop 서비스가 잘 올라가 있음을 웹으로 확인할 수 있다.

$ ./stop-all.sh

stop-all.sh 실행해서
namenode, datanode, secondary namenode, nodemanger, resourcemanger 모두 잘 종료했다고 출력되면 하둡 닫는 작업 까지 완료 ~!

참고

profile
데이터 엔지니어 ing

0개의 댓글