1. 분산데이터 저장기술
분산 파일 시스템
분산 데이터 저장 기술
- 분산 파일시스템, 클러스터, 데이터베이스, NOSQL로 구분
GFS (구글 파일 시스템)
- 마스터, 청크 구조 (청크서버는 주기적으로 하트비트를 마스터에게 전달)
- 청크는 마스터에 의해 생성/삭제되며 유일한 식별자에 의해 구분
- chunk의 기본크기 64MB
- 트리구조가 아닌 해시 테이블 구조 (효율적인 메모리 처리)
- 마스터 : 단일 마스터 구조, 청크 위치 정보등 모든 메타 데이터를 메모리 상 관리, chunk 복제
- 청크 서버 : 청크 저장 관리하며 클라이언트로부터 입출력 요청 처리, 하트비트 보냄
GFS 설계의 가정
- 저가형 서버 환경으로 서버의 고정이 빈번히 발생
- 대부분의 파일은 대용량이라고 가정
- 파일 쓰기 연산은 순차적으로 이루어지고 갱신은 드물게 이루어진다.
- 낮은 응답시간보다 높은 처리율이 중요하다.
- 작업 부하는 주로 연속적으로 많은 데이터를 읽는 연산이거나 임의 영역에서 적은 데이터 읽을 때 발생
HDFS
- 네임 노드 : 마스터, 모든 메타 데이터 관리, 하트비트 받음
- 데이터 노드 : 슬레이브 입출력 요청 받음, 128MB, 블록 단위로 나누어 여러 데이터 노드에 3중 분산 복제 저장
HDFS 설계 가정
- 한번 쓰이면 변경X
- 순차적 스트리밍 방식, 배치 작업
- 낮은 데이터 접근 지연시간 보단 높은 데이터 처리량
파일 저장 방식
- 클라이언트가 네임노드에게 파일 생성 정보 전송
- 블록을 보관한 노드 목록 요청
- 네임노드가 블록보관 노드 목록 제공
- 클라이언트가 데이터 노드 주소 받고 첫 번째 데이터 노드에 데이터 전송
- 첫 번째 데이터 노드는 전송받은 데이터 저장 후 두 번째 데이터 노드로 전달
- 두 번째 저장 후 세 번째 전달
- 다 저장되면 클라이언트에게 완료 신호
- 모든 블록 저장 완료시 네임 노드는 데이터노드 주소를 메타 데이터로 저장
파일 읽기 방식
- 클라이언트가 네임노드에게 정보요청
- 네임노드는 모든 블록, 데이터 노드위치를 클라이언트에게 반환
- 클라이언트가 위치 이용해 데이터 노드로 직접 데이터 읽음
러스터 (리눅스+클러스터)
- MGS, MGT : 메타 데이터 관리
- OSS, OST : 객체기반 데이터 저장 (정크, 블록기반 아님)
- 스트라이핑 방식 (작은 데이터 단위로 분할 후 복수 디스크 장치에 분산, 복제 시 입출력 성능이 떨어지므로 복제X)
러스터 특징
- POSIX 지원
- GFS, HDFS의 경우 한번 쓰면 수정 불가, 그러나 러스터는 가능
- 파일을 열어서 READ시 LOCK을 걸어 다른 프로그램 접근 불가, 즉 트레픽 최소화, 클라이언트와 메타 데이터 서버간 네트워크 트레픽 최소화 (인텐트 기반 잠금 프로토콜)
- write back cache : 데이터를 캐시에만 저장, 밀려나는 경우 하위 저장소에 저장
데이터 베이스 클러스터
데이터 베이스 파티션
- 데이터 베이스를 여러 부분으로 분할하는 것
- 장점: 병렬처리(빠른 데이터 검색 및 일처리), 고가용성(특정 파티션 장애 발생해도 서비스 중단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에 저장
-
스쿱, 히호 : 정형 데이터 수집