
1. 컴포넌트
종류 ) 스파크 코어, 스파크 SQL, 스파크 스트리밍, 스파크 GraphX, 스파크 MLlib
이 글에선 스파크 MLlib, GraphX 를 제외하고 나머지 컴포넌트에 대해 다룬다.
A. 스파크 코어
스파크 job, 다른 스파크 컴포넌트에 필요한 기본 기능 제공.
- 여기서 가장 중요한 개념은 RDD 인데, RDD : 분산 데이터 컬렉션 (Dataset) 을 추상화한 객체로,
데이터셋에 적용할 수 있는 연산 및 변환 메서드를 함께 제공한다.
RDD는 노드에 장애가 발생해도 데이터셋을 재구성 할 수있는 복원성을 갖추고있다.
- 스파크 코어는 HDFS , GluterFD, 아마존 S3 등 다양한 파일 시스템에 연결할 수 있다.
또, 공유변수/누적변수를 사용해 컴퓨팅 노드 간 정보를 공유할 수있다.
- 스파크 코어에는 네트워킹, 보안, 스케줄링 및 데이터 셔플링 등 기본 기능이 구현되어있다.
B. 스파크 SQL
스파크와 하이브SQL 이 지원하는 SQL을 사용해 대규모 분산 정형 데이터를 다룰 수 있는 기능을 제공한다.
- JSON, Parquet, RDB테이블, Hive table 등 다양한 정형 데이터를 읽고 쓰는데도 사용할 수 있다.
(*Parquet : 데이터, 스키마를 함께 저장할 수 있는 파일 포맷. 최근 널리 사용된다고 한다. )
- 스파크 SQL 은 DataFrame, Dataset에 적용된 연산을 일정 시점에 RDD 연산으로 변환해 일반 스파크 잡으로 실행한다.
- '카탈리스크' 라는 쿼리 최적화 프레임워크를 제공하며,
사용자가 직접 정의한 최적화 규칙을 적용해 프레임워크 확장도 가능하다.
- 외부시스템은 '아파치 Thrift 서버'를 통해 JDBC, ODBC 프로토콜을 이용하여 쿼리를 실행할 수 있다.
C. 스파크 스트리밍
다양한 데이터 소스에서 유입되는 실시간 스트리밍 데이터를 처리하는 프레임워크이다.
지원 스트리밍 소스
- HDFS, 아파치 카프카, 아파치 플립, 트위터, ZeroMQ, 커스텀 데이터 소스.
- 스트리밍 데이터를 처리할 때는 장애 복원성이 매우 중요한데,
스파크 스트리밍은 장애 발생 시 연산 결과를 자동으로 복구한다.
- 이산 스트림 방식으로 데이터를 표현.
=> 기징 마지막 타임 윈도 안에 유입된 데이터를 RDD로 구성해 주기적으로 생성한다.
- ver 2.0 에서 정형 스트리밍 API 를 사용해 일괄 처리 프로그램을 구현하는 것처럼 스트리밍 프로그램을 구현할 수 있다.
2. 스파크 프로그램의 실행 과정
만약 한 파일 (ex. 로그파일) 이 여러 노드로 구성된 HDFS 에 분산저장 되어있다면,
(HDFS 는 파일의 크기를 자동으로 나눠 각 블록을 클러스터의 여러 노드에 나누어 저장한다.)
가장 먼저 스파프 셸을 시작하고 스파크 클러스터에 연결한 후,
scala 명령을 입력해 HDFS 에 저장된 로그 파일을 메모리에 로드한다.
이 때 스파크는 데이터 지역성을 만족하기 위해 로그 파일의 각 블록이 저장된 위치를 하둡에게 요청하고,
모든 블록을 클러스터 노드의 RAM 메모리로 전송한다.
(* 대량의 데이터를 네트워크로 전송해야 하는 상황을 만들지 않기 위해 데이터 지역성이 필요하다.)
데이터 전송이 완료되면 스파크 shell 에서 RAM 에 저장된 각 블록 (파티션) 을 참조할 수 있다.
(
이 파티션의 집합 => RDD 가 참조하는 분산 컬렉션.
즉 , RDD 를 사용하면 비-분산 로컬 컬렉션을 처리하는 것과 같은 방식으로 대규모 분산 컬렉션을 다룰 수 있다.
사용자는 컬렉션이 여러 클러스터 노드에 분산 저장된다는 사실을 굳이 알 필요가 없고, 노드 장애에 따로 대비할 필요도 없다.
스파크는 RDD의 컬렉션에 함수형 프로그래밍을 사용할 수 있는 정교한 API 를 제공한다.
이를 통해 (1) RDD의 컬렉션 필터링하거나 사용자정의함수로 컬렉션 매핑하고,
(2) 누적 값 하나로 리듀스하고,
(3) 두 RDD 를 서로 빼거나 교차하거나 결합하는 등
다양한 작업 실행할 수 있다.
)
컬렉션을 변수를 주어 필터링하면 RDD 에는 분석에 필요한 데이터만 포함된다.
cache 함수를 호출 해 추후 다른 잡을 수행할 때도 RDD 가 메모리에 계속 유지되도록 지정할 수있다.
'Data Engineering > Spark' 카테고리의 다른 글
spark RDD (2) - flatMap/samle,take,takeSample (0) | 2022.09.18 |
---|---|
spark(2) - 실행, RDD, map 변환 연산자 (0) | 2022.08.07 |
가상머신 설치 오류) bsdtar: Error opening archive: Unrecognized archive format / github 파일 다운받기 (0) | 2022.07.24 |
Apache Spark 개념,활용 (0) | 2021.03.09 |