«
in ADP  /  

ADP 요약 - 2과목 2장 데이터 처리 기술

제 1절 분산 데이터 저장 기술

1. 분산 파일 시스템

  • 구글 파일 시스템(GFS)
    • 가정
      • 저가형 서버 사용, 빈번한 고장 발생
      • 대부분의 파일은 대용량
      • 작업 부하는 주로 연속적으로 많은 데이터를 읽는 연산이거나 임의의 영역에서 적은 데이터를 읽는 연산
      • 주로 순차적으로 데이터 추가, 갱신은 드뭄
      • 여러 클라이언트가 동시에 동일한 파일에 데이터를 추가하는 환경에서 동기화 오버헤드 최소화
      • 낮은 응답 지연시간보다는 높은 처리율
    • 작동 원리
      • 파일을 고정된 크기의 chunk로 나누어 다수의 chunk 서버에 분산 저장
      • 클라이언트는 파일을 얻기 위해
        • 마스터로부터 해당 파일의 chunk가 저장된 cunnk서버들의 의치 정보 등의 메타데이터 획득
        • 데이터는 각 chunk서버에 직접 요청
      • 마스터는 파일 시스템 이름 공간, 파일의 chunk매핑 정보를 보관
      • 주기적으로 heartbeat메시지를 이용하여 chunk의 상태를 체크, 상태에 따라 복구작업 수행
  • 하둡 분산 파일 시스템(HDFS)
    • 구글 파일 시스템의 아키텍처를 그대로 구현한 클로닝(Cloning) 프로젝트
    • 하나의 네임노드(NameNone), 다수의 데이터노드(DataNone)로 구성
    • 파일 데이터는 블록 단위로 나뉘어 여러 데이터노드에 분산 저장. 가용성을 위하여 다시 복제 저장
    • 네임노드는 네임스페이스 관리, 클라이언트의 파일 접근 요청을 처리
    • 네임노드는 데이터노드들로부터 hearbeat메시지를 주기적으로 받음
    • 통신을 위해 TCP/IP네트워크상에서 RPC(Remote Procedure Call)을 사용
  • 러스터(Lustre)
    • 유닉스 시맨틱 지원(POSIX)

2. 데이터베이스 클러스터

  1. 데이터베이스 리소스 공유 관점에서의 분류
    • 무공유
      • 각 데이터베이스 인스턴스가 자신이 관리하는 데이터 파일을 로컬 디스크에 저장
      • 별도의 폴트톨러런스 구성 필요
      • 대부분이 사용
    • 공유 디스크
      • 데이터 파일은 논리적으로 모든 데이터베이스 인스턴스 노드들이 공유
      • SAN같은 공유 디스크 필수
      • 모든 노드가 데이터 수정 가능하므로, 동기화 작업 수행을 위한 채널 필요
      • 높은 폴트톨러런스 제공 / 클러스터가 커지면 디스크에서 병목 발생
      • Oracle RAC가 사용
  2. Oracle RAC 데이터베이스 서버
    • 가용성 - 노드 장애가 발생해도 나머지 노드에서 실행
    • 확장성 - 추가 처리성능 필요 시 노드 클러스터에 추가하면 됨
    • 비용 절감 - 4CPU * 16노트 클러스터 가성비 > 64CPU SMP 시스템
  3. IBM DB2 ICE(Integrated Cluster Environment)
    • 무공유 방식 클러스터링
    • 클라이언트는 분산된 데이터베이스를 하나의 데이터베이스(Single View Database)로 보게 해줌
    • 가용성 보장을 위해 공유 디스크 방식을 이용
  4. Microsoft SQL Server
    • 연합 데이터베이스 형태, 무공유 방식
    • 인스턴스 사이에 링크 구성 후 모든 파티션에 대해 UNION ALL을 이용한 논리적인 뷰 생성
    • 전역 스키마 정보 없으므로 질의 수행을 위해 모든 노드를 액세스해야 함
  5. MySQL
    • 무공유 구조 기반 데이터베이스 클러스터링
    • 클러스터는 관리 노드, 데이터 노드, MySQL노드로 구성
    • 데이터 가용성을 높이기 위헤 데이터를 다른 노드에 복제

3. NoSQL

Key-Value 형태의 자료 구조를 제공하는 저장소. RDBMS의 장점인 Join 연산은 지원하지 않지만, 대용량 데이터와 대규모 확장성을 지원함

  • 구글 빅테이블
    • AppEngine에서 제공하는 데이터 저장소
    • 데이터 모델 - 키 값 : rowkey + columnkey + timestamp
    • 페일오버 - 특정 노드에 장애 발생 시 서비스 되던 tablet(분리된 파티션)을 다른 노드로 재할당
    • 공유 디스크 방식
  • 아마존 SimpleDB
    • 웹 애플리케이션에서 사용하는 데이터의 실시간 처리 지원
    • 도메인 - 테이블과 동일 개념
    • Items - 레코드와 동일한 개념, 최대 256개의 Attribute 보유
    • Attribute - 컬럼과 동일하지만 미리 정의할 필요 없음
    • 한번에 하나의 도메인에 대해서만 쿼리 가능
  • 마이크로소프트 SSDS(SQL Server Data Service)
    • 컨테이너(테이블)-엔티티(레코드)-프로퍼티(name-value쌍)

제 2절. 분산 컴퓨팅 기술

1. MapReduce

  • 분할 정복 방식으로 대용량 데이터를 병렬로 처리
  1. 구글 MapReduce
    연산의 병렬화, 데이터 분산, 장애 복구를 시스템에서 수행
    • 프로그래밍 모델
      • map-reduce 2단계
      • map - key, value 쌍을 입력으로 받아 map 함수를 거치며 새로운 key, value쌍으로 변환, 로컬에 임시 저장
      • reduce - map에서 저장된 파일을 shuffling, group by 정렬 후 reduce함수를 거쳐 출력
    • 실행 과정
      • 하나의 큰 파일은 여러 개의 split으로 나뉘어 map 프로세스들의 할당 단위가 됨
      • map 과정에서 중단 데이터 크기가 감소되면서 reduce 작업의 오버헤드가 줄어듬
      • 빈도 수 계산, 분산 grep 작업에는 이득, sort는 수행 성능이 저하됨
    • 폴트톨러런스
      • 각 프로세스에서 master에게 task 진행 상태를 주기적으로 보냄
      • 특정 task가 죽은 경우, 해당 task가 처리할 데이터 정보만 다른 worker에게 전달
  2. Hadoop MapReduce
    • Google MapReduce 논문을 바탕으로 자바 언어로 구현
    • 아키텍처
      • 네임노드, 데이터노드
      • JobTracker - Mapreduce 시스템의 마스터
      • TaskTracker - 워커 데몬
    • 성능 - sort 시에도 선형적으로 성능 증가
    • 하둡 사용 현황 - 야후, 네이버 등

2. 병렬 쿼리 시스템

  1. Google Sawzall
    • MapReduce를 추상화한 스크립트 형태의 병렬 프로그래밍 언어
    • 이후에 나온 Pig나 Hive도 개발 배경과 기본적인 개념은 Sawzall과 유사
  2. 아파치 Pig
    • 데이터 처리를 위한 고차원 언어, 야후에서 개발
    • 개발 동기 - 실제 업무는 한번의 MapReduce로 끝나지 않고 Map > Map > Reduce > Map 등 복잡한 작업, 코드 공유 어려움
    • SQL과 비슷한 언어로 길이 1/20 이하로 줄이고, 개발 시간도 1/10 이하로 감소
  3. 아파치 하이브
    • 페이스북에서 개발, SQL 쿼리 언어 지원
    • CLI, Ad-hoc 질의
    • MetaStore - Raw File들의 콘텐츠를 일종의 테이블의 컬럼처럼 구조화된 형태로 관리 할 수 있게 해주는 스키마 저장소

SQL on Hadoop

  • 임팔라(Impala) 개요
    • SQL on Hadoop중 가장 먼저 공게됨
    • 클라우데라(Cloudera)에서 개발
  • 임팔라 동작 방식
    • 모든 노드에 임팔라 데몬이 설치되어 노드 전체에서 분산되어서 수행
  • 임팔라 SQL 구문 - 기본적으로 Hive, 모든 Hive SQL을 지원하지는 않음
  • 임팔라의 데이터 모델 - HDFS 사용, 컬럼 단위 파일 저장 포맷인 RCFile 사용시 입출력 양 감소

제 3절 클라우드 인프라 기술

  • 클라우드 컴퓨팅 - 확장할 수 있는 가상화 자원들을 인터넷으로 서비스하는 기술
  • SaaS(Software as a Service), PaaS(Platform ..), IaaS(Infrastructure) 로 나뉨
  • 가상화는 IaaS
  • 이용 효과
    • 가상머신 사이 데이터 보호 - 하나의 물리적 서버에서도 분리 가능
    • 예측하지 못한 장애로부터의 보호
    • 공유 자원에 대한 강제 사용의 거부
    • 서버 통합 - 일반적 효과, 기존 서버의 용량을 증설하고 가상머신 추가하면 동일한 공간/전원 내에서 더 많은 서버 이용
    • 자원 할당에 대한 증가된 유연성
    • 테스팅
    • 정확하고 안전한 서버 사이징
    • 시스템 관리 - 마이그레이션 기능을 이용하여 가상머신 중지 없이 다른 물리 서버로 이동
  1. CPU 가상화
    • 하이퍼바이저 기반 가상화 기술비교
    구분 완전가상화
    (CPU 기술 이용 안함)
    완전가상화
    (CPU 기술 이용)
    반가상화
    사용기술 바이너리 변환, Direct Execution Privileged Instruction은 Ring -1로 처리됨 수정된 OS 사용
    게스트 OS 변경/호환성 게스트 OS 변경 없음. 호환성이 뛰어남 게스트 OS 변경 없음. 호환성이 뛰어남(CPU지원 필요) Hypercall을 가능하도록 Guest OS 변경 / 호환성 낮음
    성능 좋음 Fair 특정 경우에 더 좋음
    제품 VMware, Microsort, Parallels VMware, Microsoft, Parallels, Xen VMware, Xen
    게스트 OS가 하이퍼바이저에 독립적인가? 독립 독립 Xen Para Virtualization은 Xen 하이퍼바이저에서만 동작, VMI 규격을 따르는 VMI-Linux는 하이퍼바이저에 독립
    • Monolithic vs. Microkernel
      • Monolithic - 모든 드라이버를 하이퍼바이저에서 보유
        • 장점 - 성능 다소 향상
        • 단점 - 장애 발생 가능성 높음
      • Microkernel - 각 가상머신이 드라이버를 보유, 장단점 반대
    • 호스트 기반 가상화
      • 완전한 운영체계 설치 후 가상화를 담당하는 하이퍼바이저가 호스트 운영체제 위에 설치
      • 격리수준 높으나, 오버헤드 또한 높음
      • 윈도우/리눅스 통합 등 이기종 통합이 가능
      • VMware ESX, MS Virtual Server, Xen(반가상화)
    • 컨테이너 기반 가상화
      • 호스트 운영체제 위에 가상 운영환경을 추가하여 운영체제만을 가상화
      • 가상화하는 부분이 적어 성능이 높으나, 격리 수준 낮음
      • OpenVZ, Virtuozzo, Solaris Containers
  2. 메모리 가상화
    VMware 기법만 소개
    • 하이퍼바이저 내 Shadow Page Table을 두어 가상메모리 > 물리메모리 변환 과장을 가로챔
    • 가상머신의 메모리 반납 후 할당 방법
      • Memory ballooning - 초과 사용하는 가상 머신의 메모리를 강제로 채워버림. 가상머신이 스와핑
      • Transparent page sharing - 동일한 내용을 담은 페이지는 물리적인 메모리 영역에 하나만 존재시키고 가상머신이 공유
      • Memory Overcommitment - 위 2개 기능으로 가상머신에게 물리 메모리보다 많은 메모리 할등 가능하지만 성능저하
  3. IO 가상화
    • 가상 이더넷 - 물리적 어댑터 없이 네트워크 이중화나 네트워크 단절 효과
    • 공유 이더넷 어댑터 - 여러 개의 가상머신이 네트워크 카드 공유
    • 가상 디스크 어댑터 - 내장 디스크를 논리적 디스크로 나누고 각 파티션에 분배