본문 바로가기
TechBooks

[Spark] 스파크 완벽 가이드 #1장

by 꿈나무 김땡땡 2022. 5. 6.

책 소개

제목 : 스파크 완벽 가이드

저자 : 빌 체임버스, 마테이 자하리아

https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=175546079

Part 1. 빅데이터와 스파크 간단히 살펴보기

Chapter 1. 아파치 스파크란

  • 아파치 스파크
    • 통합 컴퓨팅 엔진
    • 클러스터 환경에서 데이터를 병렬로 처리하는 라이브러리 집합 (병렬 처리 오픈소스 엔진)
    • 4가지 언어 지원
      • python
      • java
      • scala
      • R
    • 단일 노트북 환경 ~ 수천 대의 서버로 구성된 클러스터까지 다양한 환경에서 실행 가능
  • 스파크 기능 구성 (스파크가 제공하는 전체 컴포넌트와 라이브러리)

1.1 아파치 스파크의 철학

  • 통합 (unified)
    • 스파크의 핵심 목표: 빅데이터 애플리케이션 개발에 필요한 통합 플랫폼 제공
    • 통합 : 간단한 데이터 읽기 ~ SQL 처리, 머신러닝, 스트림 처리까지 다양한 데이터 분석 작업을 같은 연산 엔진과 일관성 있는 API로 수행 가능
    • 스파크의 통합 특성을 통해 기존의 데이터 분석 작업을 더 쉽고 효율적으로 수행 가능
      • 일관성 있는 조합형 API를 이용해 애플리케이션을 만들거나, 직접 스파크 기반 라이브러리 생성
    • 스파크는 데이터 분석계에서 최초로 통합 엔진을 제공하는 오픈소스
      • 전에는 사용자가 다양한 API와 시스템을 직접 조합해서 애플리케이션 만들어 내야 했음
  • 컴퓨팅 엔진
    • 스파크는 저장소 시스템의 데이터를 연산하는 역할만 수행 (영구 저장소 역할은 수행 X)
      • 통합이라는 관점을 중시하기 때문
      • 대신 Azure Storage, S3, Apache Hadoop(분산 파일 시스템), Apache Cassandra (키/값 저장소), Apache Kafka (메시지 전달 서비스) 등의 저장소 지원
      • 스파크는 내부에 데이터를 오랜 시간 저장하지 않고 특정 저장소 시스템을 선호하지 않음
        • 실제로 대부분의 데이터는 여러 저장소 시스템에 혼재되어 저장 되기 떄문
        • 데이터 저장 위치에 상관없이 처리에 집중하도록 만들어짐
        • 사용자 API도 서로 다른 저장소 시스템을 매우 유사하게 볼 수 있도록 만들어짐
        • 애플리케이션은 데이터가 저장된 위치를 신경쓰지 않아도 됨
    • 스파크는 연산 기능에 초점
      • 하둡은 하둡 파일 시스템과 컴퓨팅 시스템(맵리듀스) 보유 → 하둡과 스파크는 매우 밀접하게 연관됨
      • 하둡에서 다른 저장소의 데이터에 접근하고 싶을 때 스파크 사용하면 쉬움
  • 라이브러리
    • 스파크는 데이터 분석 작업에 필요한 통합 API 제공 (통합 엔진 기반의 자체 라이브러리)
    • 오픈소스 라이브러리도 사용 가능
    • SQL과 구조화 된 데이터를 제공하는 SparkSQL, 머신러닝을 지원하는 MLlib, 스트림 처리 기능을 제공하는 스파크 스트리밍, 구조적 스트리밍, 그래프 분석 엔진 GraphX 라이브러리 제공
    • 다양한 저장소 시스템을 위한 커넥터도 제공
    • 머신러닝을 위한 알고리즘 등 제공
    • 전체 라이브러리 목록: spark-packages.org 에서 확인

spark connector 예시

1.2 스파크의 등장 배경

  • 컴퓨터 애플리케이션과 하드웨어의 바탕을 이루는 경제적 요인이 변화
    • 프로세서의 성능 향상으로 컴퓨터가 빨라지고, 애플리케이션도 빨리 실행됨
    • 대규모 애플리케이션도 프로세서가 빨라지면서 만들어지고 이 때 시스템은 단일 프로세서에서만 실행되도록 설계 (하드웨어 발전에 의존)
    • 2005년 경에 하드웨어의 성능 향상 멈춤 → 병렬 CPU 코어 더 많이 추가하는 방향으로 변경
    • 애플리케이션의 성능 향상을 위해 병렬 처리 필요해짐 → 스파크가 병렬 처리 지원
  • 데이터 수집 비용도 감소 추세
    • 다양한 데이터를 저렴하게 수집할 수 있지만 데이터는 클러스터에서 처리해야 할 만큼 거대해짐
      • 클러스터: 각기 다른 서버들을 하나로 묶어서 하나의 시스템 같이 동작하게 함으로써 클라이언트들에게 고가용성의 서비스 제공 (클러스터로 묶인 한 시스템에 장애가 발생하면, 정보의 제공 포인트는 클러스터로 묶인 다른 정상 서버로 이동)
    • 소프트웨어는 성능 향상에 한계가 생기고 스파크가 등장 (더 많은 데이터를 저렴하게 적재)

1.3 스파크의 역사

  • 2009년 UC 버클리 대학교에서 스파크 연구 프로젝트로 시작 (AMPLab)
    • <Spark: Cluster Computing with Working Sets> 논문으로 세상에 나옴
  • 당시 하둡 맵리듀스는 수천 개의 노드로 구성된 클러스터에서 병렬로 데이터를 처리하는 최초의 오픈소스 시스템 & 클러스터 환경을 위한 병렬 프로그래밍 엔진
    • AMPLab은 맵리듀스 사용을 바탕으로 문제점을 정리해 더 범용적인 컴퓨팅 플랫폼 설계
  • 하둡 사용자 더 연구해서 2가지 깨달음 얻음
    • 1. 클러스터 컴퓨팅이 엄청난 잠재력을 가짐
    • 2. 맵리듀스 엔진을 사용하는 대규모 애플리케이션의 난이도와 효율성
      • 전통적인 머신러닝 알고리즘은 데이터를 10-20회 가량 처리 but 맵리듀스로 처리하려면 단계별로 맵리듀스 잡 개발 → 클러스터에서 각각 실행 → 매번 처음부터 데이터 읽어야 함
  • 처음 스파크는 배치 애플리케이션만 지원
    • 이후에 대화형 데이터 분석, 비정형 쿼리 등 강력한 기능 제공
    • 처음에는 스칼라 인터프리터를 단순히 스파크에 접목해서 수백 개의 노드에서 쿼리 실행 (대화형 데이터 분석 시스템)
      → 유저들이 Shark 개발 (스파크에서 대화형 SQL 실행)
    • 이후 MLlib, 스파크 스트리밍, GraphX와 같은 다양한 라이브러리 개발 (표준 라이브러리 형태의 구현 방식 유지.. 현재까지도)
      • 스파크의 뛰어난 호환성 덕분에 처음으로 같은 엔진을 이용해 여러 처리 유형을 결합한 빅데이터 애플리케이션 개발 가능
    • AMPLab은 스파크가 특정 업체에 종속되는 것을 막기 위해 아파치 재단에 기부 → 이후 데이터브릭스 설립
     
  • 개선을 위해 스파크 팀은 효율적인 API 설계
    • 1. 여러 단계로 이루어진 애플리케이션을 간결하게 개발하도록 함수형 프로그래밍 기반의 API 설계 (조합형 API)
      • 초기 버전은 함수형 연산 (자바 객체로 이루어진 컬렉션에 맵이나 리듀스 같은 병렬 연산 수행) API
      • 스파크 1.0 버전부터는 구조화된 데이터를 기반으로 동작하는 신규 API (스파트SQL) 추가 (자바의 인메모리 데이터 표현 방식에 종속되지 않음)
        • 스파크 SQL은 데이터 포맷, 코드를 이해하는 라이브러리 + API를 이용해 새롭고 강력한 최적화 기능 제공
      • 이후 dataframe, 머신러닝 파이프라인, 자동 최적화를 수행하는 구조적 스트리밍 등 구조체 기반의 신규 API 추가
    • 2. 연산 단계 사이에서 메모리에 저장된 데이터를 효율적으로 공유할 수 있는 새로운 엔진 기반의 API 구현

 

1.4 스파크의 현재와 미래

  • 빅데이터 분석을 수행하는 기업의 핵심 기술이 될 것

1.5 스파크 실행하기

  • 스파크 시작하는 방법
    • 1. 로컬에서 설치해서 실행
    • 2. 데이터브릭스 커뮤니티 버전 실행

1) 로컬 환경에 스파크 내려받기

  1. java 설치 되어 있어야 함 (java로 확인)
  2. 스파크 공식 홈페이지 → Pre-built for Hadoop 2.7 and later → Download

2) 하둡 클러스터용 스파크 내려받기 (나중에)

  • pip install pyspark... 다음에 진행

3) 소스에서 직접 필드하기

  • 소스를 이용해 스파크를 build 하고 설정할 수 있음
cd /Downloads
tar -xf spark-2.2.0-bin-hadoop2.7.tgz
cd spark-2.2.0-bin-hadoop2.7.tgz
  • 스파크 소스 코드 확인할 때 사용

 

1.5.2 스파크 대화형 콘솔 실행하기

  • 파이썬 콘솔
    • ./bin/pyspark
    • spark
    • SparkSession 객체 출력
  • 스칼라 콘솔
    • ./bin/spark-shell
    • spark
    • SparkSession 객체 출력
  • SQL 콘솔
    • ./bin/spark-sql

1.5.3 클라우드에서 스파크 실행

  • 데이터브릭스 커뮤니티 판

1.5.4 데이터 소스

1.5.5 도커에서 실행하기

  • $ docker pull rheor108/spark_the_definitive_guide_practice
  • $ docker run -p 8080:8080 -p 4040:4040 rheor108/spark_the_definitive_guide_practice
  • http://localhost:8080 (재플린 접속)

댓글