adp _ 2과목 정리

ilysm96·2023년 5월 15일
0

1. 분산데이터 저장기술

분산 파일 시스템

분산 데이터 저장 기술

  • 분산 파일시스템, 클러스터, 데이터베이스, NOSQL로 구분

GFS (구글 파일 시스템)

  • 마스터, 청크 구조 (청크서버는 주기적으로 하트비트를 마스터에게 전달)
  • 청크는 마스터에 의해 생성/삭제되며 유일한 식별자에 의해 구분
  • chunk의 기본크기 64MB
  • 트리구조가 아닌 해시 테이블 구조 (효율적인 메모리 처리)
  • 마스터 : 단일 마스터 구조, 청크 위치 정보등 모든 메타 데이터를 메모리 상 관리, chunk 복제
  • 청크 서버 : 청크 저장 관리하며 클라이언트로부터 입출력 요청 처리, 하트비트 보냄

GFS 설계의 가정

  • 저가형 서버 환경으로 서버의 고정이 빈번히 발생
  • 대부분의 파일은 대용량이라고 가정
  • 파일 쓰기 연산은 순차적으로 이루어지고 갱신은 드물게 이루어진다.
  • 낮은 응답시간보다 높은 처리율이 중요하다.
  • 작업 부하는 주로 연속적으로 많은 데이터를 읽는 연산이거나 임의 영역에서 적은 데이터 읽을 때 발생

HDFS

  • 네임 노드 : 마스터, 모든 메타 데이터 관리, 하트비트 받음
  • 데이터 노드 : 슬레이브 입출력 요청 받음, 128MB, 블록 단위로 나누어 여러 데이터 노드에 3중 분산 복제 저장

HDFS 설계 가정

  • 한번 쓰이면 변경X
  • 순차적 스트리밍 방식, 배치 작업
  • 낮은 데이터 접근 지연시간 보단 높은 데이터 처리량

파일 저장 방식

  1. 클라이언트가 네임노드에게 파일 생성 정보 전송
  2. 블록을 보관한 노드 목록 요청
  3. 네임노드가 블록보관 노드 목록 제공
  4. 클라이언트가 데이터 노드 주소 받고 첫 번째 데이터 노드에 데이터 전송
  5. 첫 번째 데이터 노드는 전송받은 데이터 저장 후 두 번째 데이터 노드로 전달
  6. 두 번째 저장 후 세 번째 전달
  7. 다 저장되면 클라이언트에게 완료 신호
  8. 모든 블록 저장 완료시 네임 노드는 데이터노드 주소를 메타 데이터로 저장

파일 읽기 방식

  1. 클라이언트가 네임노드에게 정보요청
  2. 네임노드는 모든 블록, 데이터 노드위치를 클라이언트에게 반환
  3. 클라이언트가 위치 이용해 데이터 노드로 직접 데이터 읽음

러스터 (리눅스+클러스터)

  • MGS, MGT : 메타 데이터 관리
  • OSS, OST : 객체기반 데이터 저장 (정크, 블록기반 아님)
  • 스트라이핑 방식 (작은 데이터 단위로 분할 후 복수 디스크 장치에 분산, 복제 시 입출력 성능이 떨어지므로 복제X)

러스터 특징

  • POSIX 지원
  • GFS, HDFS의 경우 한번 쓰면 수정 불가, 그러나 러스터는 가능
  • 파일을 열어서 READ시 LOCK을 걸어 다른 프로그램 접근 불가, 즉 트레픽 최소화, 클라이언트와 메타 데이터 서버간 네트워크 트레픽 최소화 (인텐트 기반 잠금 프로토콜)
  • write back cache : 데이터를 캐시에만 저장, 밀려나는 경우 하위 저장소에 저장

데이터 베이스 클러스터

  • 하나의 DB를 여러개의 서버상에 구축하는 것

데이터 베이스 파티션

  • 데이터 베이스를 여러 부분으로 분할하는 것
  • 장점: 병렬처리(빠른 데이터 검색 및 일처리), 고가용성(특정 파티션 장애 발생해도 서비스 중단x), 성능향상(선형적인 증가)

데이터 베이스 클러스터 – 공유

  • 오라클 RAC
  • 각 인스턴스는 모든 데이터에 접근 가능, 데이터 공유 위해 SAN, 네트워크 모든 노드가 데이터 수정가능하므로 동기화 위한 별도 커뮤니케이션 필요
  • 장점: 높은 폴트 톨러럴스 (하나만 있어도 서비스 가능)
  • 단점 : 클러스터 커지면 병목 현상

데이터 베이스 클러스터 – 무공유

  • 대부분의 클러스터
  • 노드 완전 분리 상태, 각 소유권을 갖으며 소유권을 갖는 인덱스가 처리, 한 노드가 데이터 처리 요청을 받으면 처리할 데이터 갖고 있는 노드에 신호를 보냄
  • 장점: 노드 확장 제한 없음
  • 단점: 각 노드 장애 발생대비 폴트 톨러런스 구성 해야 함.

오라클 RAC

  • 공유 클러스터, 특정 데이터 소유개념 x
  • 장점 : 가용성, 확장성, 비용절감
  • 도입비용 때문에 확장성보다는 고가용성 데이터에 쓰임, 파티션 강요x but 성능 향상 위해 종종 파티션

IBM BC2ICE

  • 무공유 클러스터 (Cpu 메모리 디스크를 파티션 별로 독립 운영)
  • 사용자 증가시 어플리케이션 수정 없이 기존 시스템에 노드 추가 후 재분배
  • 장애 발생 대비 페일 오버 (DB 최신 버전 백업, 1차 장애 발생 시 대체 시스템)

SQL server

  • 페일 오버 메커니즘, active-standby 기법
  • 단점 : 질의 수행 시 모든 노드 액세스 노드, 노드가 많아질 때 추가/삭제 발생 시 파티션 새로 구성.

MY SQL

  • 무공유 클러스터
  • 관리 노드 : 클러스터 관리 노드
  • 데이터 노드 : 데이터 저장 노드
  • MY SQL 노드 : 접근 지원 노드

NOSQL (빅테이블, HBase, 아마존 simple DB, 마이크로 소프트 SSDS)

빅테이블

  • 테이블 내 모든 데이터는 Row-key 사전적 순서
  • 하나의 데이터의 키 값 정렬 기준은 Row-key + column Key + TimeStamp
  • Column-Family내에 저장되는 데이터는 column-key의 사전적 순서
  • Row는 n개의 column-Family(column-key, value, timestamp 형태)
  • 패일오버
    - 장애 발생 시 마스터는 Tablet을 다른 노드로 할당 (빅 테이블의 SPOF = 마스터), Chubby가 마스터 모니터링 장애 발생 시 다른 가용 노드가 마스터 역할, Chubby는 폴트 톨러런스로 절대 장애 없음

HBase

  • HDFS 기반 칼럼 기반 분산 데이터 베이스
  • 관계형 구조 x, SQL 지원 x
  • 수평적, 확장성, 큰 테이블에 적합
  • 로우키 인덱싱, zookeeper 이용 고가용성

아마존 simple DB

  • Client ↔ Simple DB ↔ EC2 instance
  • 한번에 하나의 도메인에서만 쿼리 수행
  • 1:N 관계 모델 두개 도메인의 경우 데이터 조회시 쿼리 여러번 필요
  • Domain : RDB의 테이블 개념
  • item : RDB의 레코드 개념
  • attrubute: RDB의 컬럼 개념, 미리 정하지 않아도 됨, 여러 벨류 값 가능

마이크로 소프트 SSDS

  • 컨테이너 : 테이블, 여러 종류의 엔티티 저장 가능
  • 엔티티 : 레코드, 여러개의 property 가능, name-value 형태
  • 쿼리는 하나의 컨테이너 대상

2장

MAP REDUCE : 분산 병렬 컴퓨팅, 대용량 데이터를 병렬로 처리
MAP TASK 하나가 1개 블록(64MB) 대상 연산 수행
ex) 320 MB -> 5개의 MAP TASK 생성

구글 MAP REDUCE

MAP

I like the book. → (I 1,.... book 1)
this is the book. That book is on the desk. → (This 1, book 2)

Reduce

(book 3, is 2 ....)

처리 방식

큰 파일 →(split) 64 or 128MB →(MAP) 로컬 파일 시스템 →(reduce) Out put

폴트 톨러런스 : 특정 MAP이나 reduce가 죽으면 해당 처리 데이터안 다른 워커에게 전해줌

하둡 MAP Reduce

  • 네임노드
  • 데이터 노드
  • 잡 트래커 : 잡 작업관리 하는 마스터, 클러스터에 1개의 잡 트래커
  • 테스크 트레커 : 작업 수행하는 워커 데몬 각 노드에 1개의 테스크 트래커, 잡 트래커에 하트비트를 보냄

처리 방식

스플릿(대용량 파일 분리) → 맵(key-value 생성) → 컴바인(데이터 크기 축소) → 파티션(키 기준 분할 저장) → 셔플(리듀스에 할당) → 정렬(키 기준 정렬) → 리듀스

정렬 작업 시 데이터 커질수록 시간 선형적 증가
하둡의 성능은 클러스터 구성 서버 숫자 늘리는 것x, 플렛폼 자체 선형 확장성 필요

병렬 쿼리 시스템

  • 직접 코딩하지 않고 MAP Reduce를 구현

구글 sawzall

  • Map reduce를 추상화한 최초 스크립트 병렬 처리 언어

아파치 pig (야후)

  • SQL과 유사
  • MAP REDUCE는 무공유 구조라 JOIN을 매우 복잡하게처리 BUT pig는 간단하게 처리

아파치 하이브 (페이스북)

  • 맵 리듀스의 모든 기능 지원
  • DDL, DML, Query (하이브 언어 모델) JOIN이나 GROUP BY
  • RDBMS 처럼 테이블 이용 쿼리, 비정형화 데이터는 적합하지 않음
  • 기본 데이터 베이스 : Embedded Derby

하둡 에코 시스템

  • 하이브: SQL 질의기술 (HiveQL)을 이용하여 하둡에 저장된 데이터 쉽게처리 분석

  • 임팔라: HiveQL을 사용하여 질의 결과 실시간 조회

  • 타조: 실시간 SQL 질의

  • 피그: 데이터 집합 분석 플랫폼, 맵 리듀스 사용위해 피그라틴 사용

  • zookeeper : 서버관리

  • Oozie : 맵 리듀스, 워크플로우 관리

  • Mahout : 기계학습 알고리즘

  • Hbase : 분산 데이터 베이스

  • HDFS : 분산 데이터 저장 및 처리 (분산 파일 시스템), 네임노드 데이터 노드

  • Mapreduce : 분산 데이터 처리, Map: key-value형태, reduce: Map 데이터처리

  • Yarn : 리소스 관리

  • Spark : 인메모리 처리

  • 척와, 플럼, 스크라이브 : 비정형 데이터 수집 데이터를 HDFS에 저장

  • 스쿱, 히호 : 정형 데이터 수집

profile
안녕하세요 반갑습니다!

0개의 댓글