[Spark_1] Distributed Computing Basic

대용량 데이터

  • 키워드
    • 기존 데이터베이스 관리도구: SQL 기반 데이터 베이스
    • 대량: 컴퓨터 1대로 데이터 처리할 수 없음(수십TB 이상). 3V(Volumne, Velocity, Variety).
    • 비정형: 그림, 영상, 문서 등 “형태 & 구조”가 다른, 구조화 되지 않은 데이터(vs 숫자Numeric 데이터)

기술

1. 고전 빅데이터 기술

  • 큐잉/샤딩
    • 샤딩
      • eg. 회원 저장 -> 지역별 “조각”내서 저장
    • 갈수록 시스템이 복잡/유지보수 매우 어려워짐
      • eg. 컴퓨터 10대 중 하나 고장나면? 100대라면?
      • eg. resource 증가 시켜야 하면? 다시 서버 나누고 이미 있는 것들 다시 옮겨야 함

2. 현대 빅데이터 기술

  • 키워드: GFS, 자동분산(샤딩shading), 자동복구

2.1 빅데이터의 시초 GFS(중요)

1) 개괄

  • File System: File-dir 구조
  • 막대한 양의 웹 문서 저장/조회를 위해 고안
    • 중복저장(redundancy)
    • insert(good)/ del&update(bad)
  • latency < Throughput: page rank 알고리즘을 위해 throughput 에 집중
    • page rank algorithm: linked된 횟수, link주체 사이트의 importance 고려하여 page rank 산출 (“PageRank works by counting the number and quality of links to a page to determine a rough estimate of how important the website is”, wiki)
    • latency: Transaction요청 시간부터 반환까지 걸리는 시간
      • eg. 문서 클릭 - 바로 열림 - latency good
    • throughput: 단위 시간 당 처리할 수 있는 Transaction의 양(the amount of material or items passing through a system or process)

2) GFS 구조

  • Master & Slave 구조
    • Master: 파일위치 확인
    • 중복복사(Redundancy): 각기 다른 chunk server에 chunk file 여러벌 복사해둠
  • Shadow Master: Master 복구용도

2.2 MapReduce

1) 핵심: Map - Shuffle(Groupby) - Reduce, 병렬

  • 여러대의 분산 저장소에 존재하는 데이터를 변환하거나 계산하기 위한 FrameWork
  • Functional programming: 특정 elem에 func() 적용 -> 병렬 시스템에서 잘 적용됨
    • Reduce: 각 서버에서 우선 Reduce, 이후 각 서버별 결과를 최종 Reduce
  • ~MapReduce: 각 data 하나씩 확인/가공 * loop
  • 참고: http://engineering.vcnc.co.kr/2015/05/data-analysis-with-spark/

2) 구조 (link)

  • data들은 key-value형태

3) Workflow (link)

  • Split “input files” into blocks + assign blocks(typically 64MB) to workers
  • Operates on key/value pairs
  • Mappers filter & transform “input data”: Map()
  • Save intermediate files
  • Reducers aggregate mappers’ output: Reduce()

2.3 Hadoop: master/slave 구조, GFS 구현

1) 구조 (link)

  • Job Tracker: The master node for parallel processing of data using Hadoop MapReduce
  • NameNode: The master node for data storage, hadoop HDFS

2) Data Flow in hadoop

  • Map tasks(Mapper) write their output to local disk
  • Reduce tasks(Reducer) write their output to HDFS(Final answer)
  • Fault tolerence(결함 발생시 부분/정상적 기능 수행할 수 있는 시스템): re-run tasks failure(실패한 부분만 다시 실행)

3) Hadoop MapReduce (link)

  • single master node, many worker nodes
  • Client submits a job to master node
  • Master splits each job into tasks (MapRedue), and assigns tasks to worker nodes

4) Hadoop Distributed File System(HDFS)($\approx$GFS) (link)

  • Name node: store file system metadata
  • Data nodes: store Application data
  • Files stored as large & fixed size(eg 64MB) blocks: Block을 여러 노드에 나누어 보관(default: 3 Repilca) -> 노드 장애 대응
  • HDFS typically holds map input and reduce output

기타: Tools/Frame work

  • Hadoop 리소스 관리 플랫폼
    • darker
  • 데이터 수집기: 여러 대의 서버에서 남은 로그를 효과적으로 취합
    • Apache Flume
    • Kafka: 여러서버/DB에서 자료 받아서 여러군데로 보내줌 eg. Hadoop에 쏘면서 Spark로 분석
  • workflow 관리
    • Apache AirFlow: crontab 단점 보강
      • Dag: directed acyclic graph
  • 검색엔진: Elastic search
  • Hive: SQL -> MapReduce

기타2: NoSQL / Spark

NoSQL

  • RDBS
    • Relational: table간에 관계 by join
  • 병렬처리 위해 관계 포기
    • 컬럼 하나의 key-value
  • key 부여가 핵심 eg. 채팅방ID + 시간 - value: 발신자 내용 시간
  • 활용처: 데이터 형식 단순 + 고성능이 필요 eg. 페이스북 메시지
    • Apache HBase: 컬럼 기반 DataBase, Hadoop 생태계: HDFS 위에서 동작
    • Mongo DB: Web개발에서 많이 활용
      • JSON 형식을 바로 저장
      • 단점: cluster가 증가해도 효율이 증가하지 않음
        • linear scalability: Cluster가 증가할수록 thoughout이 계속 증가해야 함(linear)

Apache Spark

  • Hard Disk에 저장하는 것은 시간이 걸리니, Meomory에 Cluster를 올리자
  • 메모리에 중간 결과 올리고 + 장애복구
    • 하드에 저장할 바에는 장애 시점에서 거슬러 올라가서 다시 계산
  • NoSQL -> Spark 가능
  • RDB 되면 굳이 Spark 안써도 됨
  • 예전과 비교
    • 예전: data locality 중시. 저장한 곳에서 계산(HDFS + MapReduce) + 데이터 전송 No
    • 최근: 저장 클러스터 & 계산 클러스터 구분. 연결하는 네트워크를 고도화.

cf. The Sushi Principle(Raw Data is Better): ETL(hidden cost 높음) 생략하고 바로 가져와서 분석하자! (link)

< !-- add by yurixu 替换Google的jquery并且添加判断逻辑 -->