빅데이터 기술이란?

 

  • 빅데이터의 정의
    • 서버 한 대로 처리할 수 없는 규모의 데이터 - 존 브라우저
    • 기존의 소프트웨어로는 처리할 수 없는 규모의 데이터 
      • 기존 소프트웨어 오라클이나 MySQL과 같은 관계형 데이터베이스
        • 분산 환경을 염두에 두지 않음
        • Scale-up 접근 방식
    • 4V
      • Volume : 데이터의 크기가 대용량인가?
      • Velocity : 데이터의 처리 속도가 중요한가?
      • Variety : 구조화 / 비구조화 데이터 모두 다루는가?
      • Veracity : 데이터의 품질이 좋은가?

Spark 소개

 

  • 하둡의 등장과 소개
    • 대용량 처리 기술이란? 
      • 분산 환경 기반 (1대 혹은 그 이상의 서버로 구성) - 분산 컴퓨팅과 분산 파일 시스템 필요
      • Fault Tolerance - 소수의 서버가 고장나도 동작해야함
      • 확장 용이 - Scale Out
    • 하둡 등장
      • Doug Cutting이 구글랩 발표 논문들 기반으로 만든 오픈소스 프로젝트
        • Google File System (2003)
        • MapReduce : Simplified Data Processing on Large Cluster (2004)
      • 처음 시작은 Nutch라는 오픈소스 검색엔진 하부 프로젝트
        • 2006년 아파치 톱레벨 별개 프로젝트로 분리돼 나옴
      • 크게 두 개의 서브 시스템으로 구현됨
        • 분산 파일 시스템 - HDFS (Hadoop Distributed File System)
        • 분산 컴퓨팅 시스템 - MapReduce
          • 새로운 프로그래밍 방식으로 대용량 데이터 처리 효율을 극대화하는데 맞춤
          • 문제점
            • 작업에 따라 프로그래밍이 너무 복잡해짐
            • Hive처럼 MapReduce로 구현된 SQL 언어들이 다시 각광받게 됨
              • SQL on Hadoop
            • 기본적으로 배치 작업에 최적화 (not realtime)
    • 하둡 발전
      • 하둡 1.0은 HDFS위 MapReduce라는 분산 컴퓨팅 시스템이 도는 구조. 다른 분산 컴퓨팅 시스템은 지원하지 못함
      • 하둡 2.0에서 아키텍처가 크게 변경.
        • 하둡은 기반 분산처리 시스템이 되고 그 위 애플리케이션 레이어가 올라가는 구조
        • Spark는 하둡 2.0위 어플리케이션 레이어로 실행
        • 구조
          • MapReduce / Spark / Tez / ...
          • Yarn(하둡 2.0에서 분산 컴퓨팅 시스템 이름)
          •             HDFS2
    • HDFS - 분산 파일 시스템
      • 데이터 블록 단위 저장 (128MB)
      • 블록 복제 방식 (Replication)
    • 분산 컴퓨팅 시스템
      • 하둡 1.0 : 하나의 잡 트래커와 다수의 태스크 트래커로 구성. 잡 트래커가 일을 나눠 다수 태스크 트래커에 분배
      • 하둡 2.0 : 클라이언트, 리소스 매니저, 노드 매니저, 컨테이너로 역할 세분화. Spark 지원
  • Spark 소개
    • 하둡 뒤를 잇는 2세대 빅데이터 기술
      • 하둡 2.0을 분산환경으로 사용 가능.
      • Scala로 작성됨
    • Map Reduce의 단점 대폭 개선
      • Pandas와 굉장히 흡사하나 다수 서버 분산환경 버전이라는 것만 다름
    • 현재 Spark 버전 3. 이번 강좌에서 사용할 버전.
      • 머신러닝 관련 많은 개선이 있었음. GPU 지원 포함.
    • Spark vs MapReduce
      • Spark는 메모리 기반 MapReduce는 디스크 기반
      • Spark는 하둡 이외 다른 분산 컴퓨팅 환경 지원 MapReduce는 하둡 위에서만 동작
      • Spark는 Pandas와 유사 MapReduce는 키-밸류 기반 프로그래밍
      • Spark는 다양한 방식 컴퓨팅 지원(배치 프로그래밍, 스트리밍 프로그래밍, SQL, 머신 러닝, 그래프 분석)
    • Spark 3.0 구성
      • Spark Core : Pandas와 유사
      • Spark SQL : 데이터 처리를 SQL로
      • Spark Streaming : real time으로 streaming data를 처리해줌.
      • MLib (Spark.ML) : 머신러닝 라이브러리도 돌아감!
      • SparkGraph : 그래프 형태 프로세싱 기능
    • Spark 프로그래밍 개념
      • RDD (Resilient Distributed Dataset)
        • 로우레벨 프로그램이 API로 세밀 제어 가능. 퍼포먼스 향상
        • 그러나 코딩 복잡도 증가
      • Dataframe & Dataset(판다스 데이터프레임과 유사)
        • 하이레벨 프로그램이 API로 점점 많이 사용하는 추세
        • SparkSQL을 사용하면 이를 쓰게 됨
      • 보통 Scala, Java, Python 중 하나 사용

판다스와 비교

 

  • 판다스
    • 파이썬으로 데이터 분석을 하는데 가장 기본이 되는 모듈 중 하나
    • 소규모 구조화된 데이터(테이블 형태 데이터)를 다루는데 최적
      • 데이터 크기가 제약이 됨 (한 대의 서버로 다뤄야 하기 때문)
      • 병렬 처리 지원 X
      • 작은 데이터에선 pandas 큰 데이터에선 Spark
    • 데이터 구조
      • excel의 column이 pandas의 series
      • series들이 모여 DataFrame

Spark의 데이터 구조

 

  • Spark 세션
    • Spark 프로그램의 시작.
    • Spark이 제공해주는 다양한 기능 사용.
    • from pyspark.sql import SparkSession
      
      spark = SparkSession \ 
          .builder \
          .appName("Python Spark create RDD example") \
          .config("spark.some.config.option", "some-value") \
          .getOrCreate()
      sc = spark.sparkContext
      # spark와 sc를 이용해 RDD와 데이터프레임을 조작하게 된다.
  • 데이터 구조
    • 크게 3가지 자료구조
      • RDD(Resilient Distributed Dataset)
        • 로우레벨 데이터. 클러스터내 서버에 분산된 데이터 지칭
        • 레코드별 존재, 구조화된 데이터나 비구조화된 데이터 모두 지원
        • 변경 불가능한 분산 저장된 데이터.
          • 다수의 파티션으로 구성되고 Spark 클러스터내 서버들에 나눠 저장됨
          • 로우레벨 함수형 변환 지원 (map, filter, flatMap 등)
        • RDD가 아닌 일반 파이썬 데이터는 parallelize 함수로 RDD 변환
          • py_list = [
                (1, 2, 3, 'a b c'),
                (4, 5, 6, 'd e f'),
                (7, 8, 9, 'g h i')
            ]
            rdd = sc.parallelize(py_list)
      • DataFrame
        • RDD 위 만들어지는 하이레벨 데이터. RDD와는 달리 필드 정보를 갖고 있다.
        • PySpark에서는 Dataframe 사용
        • 변경 불가능한 분산 저장 데이터
        • 관계형 데이터베이스 테이블처럼 컬럼으로 나눠 저장
          • pandas와 거의 유사
          • 다양한 데이터소스 지원 : 파일, Hive, 외부 데이터베이스, RDD 등
        • 스칼라, 자바, R, 파이썬과 같은 언어 지원
        • 데이터 프레임 생성 방법
          • RDD를 변환해 생성 : RDD의 toDF함수 사용
          • SQL 쿼리 기반 생성 
            • df = spark.read.format("jdbc") \
                  .option("url", "jdbc:postgresql://localhost:5432/databasename") \
                  .option("dbtable", "tablename") \
                  .option("user", "username") \
                  .option("password", "password") \
                  .option("driver", "org.postgresql.Driver") \
                  .load()
              df.printSchema()
            • tablename 자리에 SELECT 사용 가능
        • 외부 데이터를 로딩해 생성
          • createDataFrame
    • Dataset
      • Dataset은 Dataframe과 달리 타입 정보가 존재하며 컴파일 언어에서 사용 가능

Spark 개발 환경

 

  • 개인컴퓨터에 설치하고 사용하는 방법
    • 노트북 등을 설치하려면 복잡
    • spark-submit을 이용해 실행 가능
  • 각종 무료 노트북 사용 방법
    • 구글 colab 이용
    • 데이터브릭(Databrick) 커뮤니티 노트북 사용
    • 제플린 무료 노트북 사용 : https://app.zepl.com/register
      • 주피터같은 웹기반 노트북. 파이썬, 스칼라, SQL 등 다양한 코드 작성, 실행, 결과확인 (시각화 포함), 수정을 손쉽게 반복, 다른 사람과 공유할 수 잇음
      • 주피터와 차이점
        • Spark 기본 지원. 파이썬과 스칼라와 SQL 지원.
        • 인터프리터는 플러그인 구조로 만들어져 있어 다른 모듈과 연동이 쉬움
        • 그 이외 대동소이 (시각화 지원, 노트북 공유 용이)
  • AWS EMR 클러스터 사용
    • 프로덕션 환경에 가까음

'AI > KDT 인공지능' 카테고리의 다른 글

[07/22] Spark 3  (0) 2021.07.22
[07/21] Spark 2  (0) 2021.07.21
[07/19] 12주차 강의 개요  (0) 2021.07.19
[06/28] 심층학습 기초2  (0) 2021.06.28
[06/24] 심층학습 기초  (0) 2021.06.24

+ Recent posts