728x90

Java 설치 

다운로드 


Hadoop 다운로드 

  • hadoop.apache.org 접속
  • Download > Binary 클릭
  • hadoop download
  • 다운로드 후 압축 풀기

환경 변수 등록

  • 시스템 속성 > 환경 변수
  • 윈도우 환경 변수에 JAVA_HOME과 HADOOP_HOME 등록
  • Path에 %HADOOP_HOME%/bin과 %JAVA_HOME%/bin 등록
  • 환경 변수 등록시 디렉토리에 띄어쓰기가 있으면 안됩니다.
    • java의 경우에는 C:\Program Files 하위에 존재하기 때문에 환경 변수 등록시 변경을 해야 합니다.
    • 그래서 설정할 때 Program Files 대신 C:\Progra~1\Java\jdk1.8.0_xxx 형태로 등록해주어야 합니다.

설정 파일 수정

etc/hadoop/core-site.xml

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

etc/hadoop/hdfs-site.xml

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/hadoop-3.3.2/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/hadoop-3.3.2/dfs/data</value>
    </property>
</configuration>
* 참고
name dir과 data dir 생성
위에서 설정한 디렉토리와 동일한 위치에 생성

etc/hadoop/mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

etc/hadoop/yarn-site.xml

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value>
    </property>
</configuration>

Hadoop winutils 다운로드


 HDFS 실행

네임 노드 포맷

$ hdfs namenode -format

hdfs 시작

$ sbin/start-dfs.sh

 hdfs web ui 접속

http://localhost:9870

 yarn 실행

$ sbin/start-yarn.sh

resource manage web ui

http://localhost:8088/

예제 실행

$ hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.2.jar pi 16 10000
728x90
728x90
분산 파일 시스템

                             네트워크로 연결된 여러 머신의 스토리지를 관리하는 팡리 시스템 

 

일반적인 컴퓨터도 분산 파일 시스템을 가지고 있습니다. 

 

 

Google File system(GFS)

 

구글 파일 시스템(Google File System, GFS 또는 GoogleFS)은 구글에 의해 자기 회사 사용 목적으로 개발된 분산 파일 시스템이다.[일반 상용 하드웨어를 이용하여 대량의 서버를 연결하여 데이터에 대한 접근이 효율적이고 안정적이다. 새로운 버전의 구글 파일 시스템 코드이름은 콜로서스(Colossus)이다

 

구글 파일 시스템 - 위키백과, 우리 모두의 백과사전

 

ko.wikipedia.org

 


하둡에서는 HDFS 라는 분산 파일 시스템을 제공합니다. 

대표적인 시스템은 의 특징 : 

  • 범용 하드웨어를 사용하여 분산 파일 시스템 구성
  • 블록 단위 저장
  • 마스터/워커 구조
  • 내고장성(Fault-tolerance)제공
  • 확장성 제공

HDFS Block

하나의 파일을 여러 블록으로 저장

하둡 2에서는 기본 블록 사이즈가 128MB(하둡 1은 64MB)

실제 파일 크기가 블록 사이즈가 적은 경우 파일 크기만큼만 디스크 사용

 

 

해당 사이즈 만큼 블록사이즈로 쪼개진다. 

왜 HDFS Block 은 클까?

  • 일반적인 디스크 블록에 비해 큼(128MB)
  • 탐색 비용 최소화
  • 블록의 시작점을 탐색하는데 적게 걸림
  • 메타 데이터 크기 감소

Blcok 단위 처리 이점

  • 파일 하나의 크기가 실제 하나의 물리 디스크 사이즈보다 커질수 있음   - (1테라 바이트 인 경우 1테라보다큰 파일은 저장할수 없지만 분산 시스템에서 block 단위로 저장하게 되면 여러클러스트로 쪼개져서 저장하기 때문에 1테라보다 더 큰 데이터를 저장할수 있다. )
  • 스토리지 관리 단순화
  • 내고장성과 가용성을 지원하는 복제 기능지원적합 (즉 블록단위로 복사본을 두어서 장애처리할떄 사용가능_)

데이터 노드들이 워커 역할을 담당한다. Namenode는 메타 데이터 즉 어떤 정보가 저장되어있는지 나와있다. 

 

NameNode

메타데이터 관리

  • FsImage(파일 시스템 이미지): 네임스페이스를 포함한 데이터의 모든 정보
  • EditLog:데이터 노드에서 발생한 데이터 변환 내역

 

  • 데이터 노드 관리 

Secondary NameNode

  • Namenode의 Standby 역하링 아님
  • 체크포인트
  • FsImage와 Editlog를 주기적으로 병합
  • 주기적으로 Namenode 와  FsImage를 백업

체크포인트 과정을 살펴보자

에딘 로그에 롤링을 요청합니다.

롤링이랑 현재 로그를 새로운 이름으로 변경하고 기존의 이름으로 새로운 로그에 파일을 생성하는것

롤링을 요청한 후 에딘로그랑 fs이미지를 다운 받습니다. 그후 merge 하고  fsImage를 Namenode로 업로드 해줍니다. 

그후 fs이미지들을 NameNode에서 교체하는 작업을 하게 되고 이를 통해 에딘로그가 커지는것을 방지하고 네임노드가 재구동하는것을 빠르게 실행시킬수 있다. 또한 에딘로그가 커지면서 발생하는 디스크의 문제도 해결할수 있다. 

 

주기적으로 Namenode의 fsImage를 백업하고 난 이후 업데이터된 내용들은 반영이 되지 않아서 데이터가 유실이 될수 있다. 

DataNode

  • 실제 파일을 로컬 파일시스템에 HDFS 데이터를 저장
  • 하트비트를 통한 데이터 노드 동작 여부 전달
  • 저장하고 있는 블록의 목록을 주기적으로 네임노드에 보고

실제 HDFS 에서 파일 저장하는 과정을 보자. 

크기가 374MB이면 3개로 구성이 됩니다. 복제 개수가 2로 설정이 되어있다고 가정을 하고 

블록은 하나의 데이터노드에 저장되는것이 아닌 갯수에 맞게 각각 존재하게 된다. 

HDFS에서 기본 설정은 3입니다. 

이전에도 살펴 보았지만 하나의 DataNode가 장애가 발생하더라도 백업파일로 돌아가게 되어 문제가 없습니다. 

 

HDFS 읽기 연산 

실행되는 과정을 알아보자 

클라이언트에서 파일이 보관된 위치를 클라이언트에 반환을 하고  클라이언트는 DataNode들에게 데이터를 요구하고 읽게 됩니다. 

HDFS 쓰기 연산

파일을 쓰는 경우는 먼저 네임노드들에게 파일 정보 쓰기 요청을 하고 네임노드들에게 쓸 리스트들을 클라이언트에 주게된다.  클라이언트가 파일노드들에게 파일쓰기를 요청합니다. 

 

그리고 DataNode 간에 복제가 진행이 됩니다. 복제가 완료되면 에크 정보를 받게 되고 클라이언트가 모든 에크가 복제 되었다고 정보를 받으면 NameNode에게 완료 되었다고 알려줌. 

HDFS 추가 특징

블록캐싱 기능 제공 :

데이터노드에 저장된 데이터중에서 자주 있는 블록을 블록캐시로 데이터노드 메모리에 명시적으로  캐싱을 할수 있다.

파일 단위로도 캐싱이 가능하다 조인화 같은곳에서 읽기 성능을 향상 시킬수 있다. 

 

 

HDFS Federation 지원 

파일이 많아지기 시작하면 메모리 사용량이 증가한다 이러한 문제를 지원하기 위해서 버전2부터는 Federation 즉 네임노드를 등록하여 사용하게 되는것이고 각각의 디렉토리마다 네임노드를 실행해서 관리하게 합니다. 

그러면 메모리 문제를 해결할수 있습니다. 

 

고가용성(HA)지원

 네임노드의 문제가 발생하면 모든 작업이 중단되고 파일을 읽거나 쓰는것을 할수 없어서 버전2에서는 고가용성(active랑 스탠바이)을 지원하고 

메타 데이터 정보를 유지하고 있다가 Active가 오류가 있으면 스탠바이네임이 작동한다. 

 

728x90
728x90

클러스터(Cluster)란?

-여러 대의 컴퓨터들이 연결되어 하나의 시스템처럼 동작하는 컴퓨터들의 집합 

클러스터는 확장성을 가지고 있어서 work -node만 추가하면 확장을 하는 구조를 가지고 있습니다. 

Gateway 노드를 따로 두는데 설정파일등을 통해서 클라이언트들의 조건을 통제하것을 수행합니다. 

 

마스터/work Architecture 

철수가 사정상 프로젝트 C를 못하는상황이 생기면 해당 프로젝트를 올바르게 대처를 할수 없기에 

프로젝트 별로 담당자를 한명이 아닌 두명이 담당을 하면서 백업 식으로 일 처리가 돌아가게 됩니다.  

즉 철수가 없더라고 영희가 해당 프로젝트를 처리할수 있습니다. 

사람이 즉 노드가 되어 한 노드가 작동을 못하더라도 다른 노드가 해결을 할수 있습니다. 

 

정상적으로 동작을 하지 않아도 장애상황을 대응 하기 위해 다른 work에 파이션을 저장을 해놔서 큰 문제가 일어나지 않습니다. 

 

클러스터 규모 결정하기 

 

스토리지 용량으로 결정하기

  • 저장될 데이터 크기 예측
  • 복제 전략 결정
  • 저장 기간 고려
  • 필요한 노드 수 결정

예시

 

저장될 데이터 크기 예측

  • 하루에 저장되는 데이터의 크기는 1TB

복제 전략 결정

  • 복제 계수는 3

저장 기간 고려 

  • 3년

필요한 노드 수 결정

  • 서버 한대의 저장 용량 : 5TB*12
  • 70대

스토리지 용량으로 결정하기 - 추가 고려사항

  • 데이터 포맷
  • 데이터 압축 여부
  • 데이터 증가율의 변화

데이터 수집 속도로 결정하기 

  • 데이터 수집 속도 예측
  • 데이터 처리 속도 예측

데이터수집 속도로 결정하기 

  • 1테라비아트 데이터 분석
  • 5분이내에 결과를 저장
  • 쓰기 속도는 디스크당 초당 50MB
  • 디스크 70개가 병렬로 써야함
  • 서버당 디스크가 24개씩 있느 ㄴ경우
  • 약 3대의 서버가 필요

 

클러스터 하드웨어 결정

워크로드에 따른 하드웨어 선정

  • CPU 
  • Memore
  • I/O

AWS에서 EMR 클러스터를 구축할때 어떤 워크로드를 가지고 있냐에 따라 어떤 인스턴스 타입을 선택할지 결정하는것이 워크 로드에 따른 하드웨어 결정을 하는것과 비슷합니다. 


 Hadoop 구성요소 

하둡을 버전을 비교해볼때 크게 변화가 되었습니다.

 

 1.0은 2개의 컴포넌트만 존재하지만 2.0은 중간에 Yarn이 추가가 되어 다른 애플리케이션도 동작을 시킬수 있습니다 

예를 들면 아파치 스파크 flink 등 분산 애플리케이션을 동작을 시킬수 있습니다. 

 

버전 1의 타입 입니다. 

가장 큰 문제점은 namenode가 단일 장애 지점이라서 동기화의 시간차이가 있기때문에 Secondary namenode가 존재해도 일부 데이터가 유실될수 잇는 문제가 있다.

또한, 클러스터 전체 사용률이 굉장히 낮았습니다.

그리고 jobtracker 역시 클래스터 전체 리소스를 관리하기 때문에 부화가 많이 발생을 한다. 

MapReduce외에도 다른 작업을 실행할수 없는 문제점이 있다. 

 

하둡 버전 2.0

1.0과 달리 맵퍼와 리듀서의 슬롯이 별도로 존재하지 않고 둘 다 컨테이너 안에서 동작하여 컨테이너 자체도 따로 슬롯이 ㅅ는것이 아니라 전체 클러스터의 리소스 상황과 요처된 잡의 리소스 요구에 따라 컨테이너가 몇개 실행될지 결정됩니다. 

(jopTracker task tracker 대신에  Resource Manager와 node manager가 추가가 되었습니다.) 

2.0에서는 하둡1.0에서 4만개 이상의 테스크를 동시에 실행하지 못하는 문제를 Resource Manager와 Application Master의 분리로 해결하였습니다. 

 

Hadoop 3

  • Erasure Coding 지원
  • YARN Timeline Service v2 도입
  • Java 8
  • NameNode이중화 기능 강화 

2개이상의 NameNode기능을 제공합니다. 

 


 

728x90

'ML > Hadoop & Spark' 카테고리의 다른 글

Hadoop window 설치  (0) 2022.07.28
Hadoop - HDFS 분산 파일 시스템  (0) 2022.07.21
데이터파이프라인 오케스트레이션  (0) 2022.07.21
데이터 파이프라인 패턴  (0) 2022.07.20
데이터 파이프라인이란?  (0) 2022.07.20
728x90

오케스트레이션이란?
 
여러개의 컴퓨터시스템, 애플리케이션 또는 서비스를 조율하고 관리하는것 
복잡한 Task와 workflow를 쉽게 관리 할수 있도록 도와주는 역할

데이터 파이프라인 예)
구축해주면 한가지 job만 하느것이 아니라 여러가지의 job을 해결해준다. 
 
 

워크플로 관리 도구의 필요성
 

  •  스크립트의 한계
  •  워크플로가 복잡
  • Task의 의존 관계가 복잡
  • 실패 시 처리 어려움(결과를 매번 확인해야하며 실패하면 처음부터 다시해야한다.)

 
워크플로 관리도구 기능

  • 스케쥴링
  • Takst 의존관계 정의
  • 실행 결과 알림 및 보관
  • 실패시 재실행

DAG(Directed Acyclic Graph)
방향성(Directed)
간선에 방향이 존재
(그래프에서 노드와 간선으로 이루어져있다.)
비순환(Acyclic)
사이클이 존재하지 않음
 그래프의 한 정점에서 시작하여 다시 시작정점으로 이어지는 간선이 존재하지 않음
 
DAG의 대표적인 예로
게임에서 사용하는 스킬트리입니다. 
특정 스킬을 활성화 하기 위해서는 해당 스킬부터 차근차근 찍어줘야 사용할수잇다.
 

 
 
실제 task들의 의존관계이다. 
DAG의 의한 데이터 구조라고 표현이 되고 task의 의존관계를 dag으로 표현한다. 
 

 
airflow 에서 사용하는 워크플로 

Apach Oozie 도 있는데 Oozie에서만 제공하는 기능만 사용할수 있고, airflow 와 같이 추가적으로 해결을 못하고 코드가 길어지는 단점이 있지만
워크플로워를 누구나 다 동일하게 작성해서 협업이나 유지보수에서는 좋은 장점이다. 
 
실행 결과 알림 및 보관 

복구

실패 시 복구 방법

  • 재시도 -  일시적인 문제를 대응하기에는 좋은것이다. (재시도 횟수가 너무 많으면 task의 오류를 늦게 발견하게 된다.)2~3 회 정도 하는것을 추천하고 아니면 해당 task의 문제를 해결해야한다. 
  • backfill - 일정기간동안 워크플로우를 재실행하는것이다. 한번에 많은\이터를 처리할수 있다.

 

오픈소스 워크플로 관리 도구 비교 

 

 

728x90
728x90

hierarchical clustering 

계층적 군집화(Hierarchical Clustering)

  • 개체들을 가까운 집단부터 순차적/계층적으로 차근차근 묶어 나가는 방식
  • 유사한 개체들이 결합되는 dendogram 을 통해 시각화 가능
  • 사전에 군집의 개수를 정하지 않아도 수행가능
  • 모든 개체들 사이의 거리에 대한 유사도 행렬 계산
  • 거리가 인접한 관측치끼리 cluster형성
  • 유사도 행렬 update

 

학습 과정 

Hierarchical Clustering 를 수행하려면 모든 개체들 간 거리(distance) 유사도(similarity)가 이미 계산되어 있어야 합니다.

이표는 A와 D의 거리가 가까워서 cluestring 을 한다. 

AD군집과 가장 가까운 거리는 C라는것이라고 해서 묶어서 새로운 cluester로 할당을 하는것이다. 

마지막으로 adc를 b와 묶어서 표현을 한다. 

마지막으로 총 4개로 볼수있다. 

한 군집으로엮었으면 거리행렬을 바꾸어주어야합니다. 다시 말해 개체-개체 거리를 군집 개체 거리로 계산해야 한다는 것입니다. 

 ‘AD’와 ‘B’, ‘AD’와 ‘C’ 이렇게 거리를 구해야 한다는 말입니다. 그런데 군집-개체, 혹은 군집-군집 간 거리는 어떻게 계산해야 할까요? 여기엔 아래 그림처럼 여러가지 선택지가 존재합니다.

 

Cluestering 간의 거리 

 

데이터간의 거리로 하였는데 나중에는 

군집간의 거리를 구하는것이기때문에 이거를 얘기를 하고있다. 

 

최소점

최대점

모든데이터간의 거리를 평균 

군집간의 중앙점에 대한 거리

 

이 4가지 를 제일 많이 사용합니다

 

그리고 . 

 

728x90

'ML > 머신러닝' 카테고리의 다른 글

머신 러닝 - cost Function  (0) 2022.06.20
머신러닝 - logistic classificaction  (0) 2022.06.20
머신러닝 Minimize cost  (0) 2022.06.20
머신 러닝 - 기본 용어 및 개념  (0) 2022.06.16

+ Recent posts