빅데이터 기술이란?
- 빅데이터의 정의
- 서버 한 대로 처리할 수 없는 규모의 데이터 - 존 브라우저
- 기존의 소프트웨어로는 처리할 수 없는 규모의 데이터
- 기존 소프트웨어 오라클이나 MySQL과 같은 관계형 데이터베이스
- 분산 환경을 염두에 두지 않음
- Scale-up 접근 방식
- 기존 소프트웨어 오라클이나 MySQL과 같은 관계형 데이터베이스
- 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)
- Doug Cutting이 구글랩 발표 논문들 기반으로 만든 오픈소스 프로젝트
- 하둡 발전
- 하둡 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 중 하나 사용
- RDD (Resilient Distributed Dataset)
- 하둡 뒤를 잇는 2세대 빅데이터 기술
판다스와 비교
- 판다스
- 파이썬으로 데이터 분석을 하는데 가장 기본이 되는 모듈 중 하나
- 소규모 구조화된 데이터(테이블 형태 데이터)를 다루는데 최적
- 데이터 크기가 제약이 됨 (한 대의 서버로 다뤄야 하기 때문)
- 병렬 처리 지원 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
- RDD(Resilient Distributed Dataset)
- Dataset
- Dataset은 Dataframe과 달리 타입 정보가 존재하며 컴파일 언어에서 사용 가능
- 크게 3가지 자료구조
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 |