💡 스파크 애플리케이션
스파크 애플리케이션 → 스파크 클러스터 + 사용자 코드
🧣 스칼라 기반 앱
- 스칼라는 스파크의 '기본' 언어이기 때문에 애플리케이션을 개발하는 가장 적합한 방법으로 볼 수 있다.
- 스파크 애플리케이션은 두 가지 자바 가상 머신 기반의 빌드 도구인 sbt나 아파치 메이븐을 이용해 빌드할 수 있다.
- 스칼라 애플리케이션에 sbt 빌드 환경을 구성하려면 패키지 정보를 관리하기 위해
build.sbt
파일을 정의해야 하는데, build.sbt
파일에 포함되어야 할 핵심 항목은 아래와 같다.
- 프로젝트 메타데이터 (패키지명, 패키지 버전 정보 등)
- 라이브러리 의존성을 관리하는 장소
- 라이브러리에 포함된 의존성 정보
- 사용자 코드를 작성하고
spark-submit
명령을 사용해 코드를 클러스터에 제출한다.
- 프로젝트를 설정하고 코드를 작성한 뒤 빌드한다.
- 'uber-jar', 'fat-jar' →
sbt assemble
명령
- 라이브러리 모두를 target 폴더로 모으기 →
sbt package
명령 (JAR 파일을 만들어내지는 않음)
🐍 파이썬 애플리케이션
- PySpqrk 애플리케이션을 작성하는 방법은 일반 파이선 애플리케이션이나 패키지를 작성하는 방법과 유사하다.
- 애플리케이션을 실행하려면 클러스터에서 스크립트를 실행하기만 하면 된다. (빌드 X)
spark-submit
의 —-py-files
인수로 .py, .zip, .egg 파일을 지정하면 애플리케이션과 함께 배포할 수 있다.
- 코드를 실행하려면
SparkSession
을 생성하는 실행 가능한 스크립트 파일을 만들어야 한다.
- 모든 파이썬 클래스에서
SparkSession
객체를 생성하는 것보다 런타임 환경에서 변수를 생성해 파이썬 클래스에 전달하는 방식을 사용하는 것이 좋다!
- PySpark를 라이브러리 의존성으로 정의하기 위해 pip 사용
pip install pyspark
으로 PySpark 설치 가능
🍵 자바 애플리케이션
- 스칼라와 유사
- 가장 큰 차이점은 라이브러리 의존성을 지정하는 방법이다.
- 메이븐을 사용해 라이브러리 의존성을 지정할 때, 스파크 패키지 저장소를 반드시 추가해야 한다. (스파크 관련 라이브러리를 얻기 위함!)
- 자바 코드를 실행하려면 main 클래스가 필요하다.
mvn package
명령으로 패키지를 만들 수 있다.
🧪 스파크 애플리케이션 테스트
테스트 코드 개발은 매우매우 중요하다!
🧃 전략적 원칙
- 입력 데이터에 대한 유연성
- 비즈니스 로직 변경에 대한 유연성
- 결과 유연성과 원자성
🔮 테스트 구성 전략
- SparkSession 관리하기
- SparkSession을 한 번만 초기화하고 런타임 환경에서 함수와 클래스에 전달하는 방식을 사용하면 테스트 중 SparkSession을 쉽게 교체할 수 있다.
- 테스트 코드용 스파크 API 선정하기
- SQL, DataFrame, Dataset, RDD 등 적합한 API 선정
- 애플리케이션에 사용할 언어를 선택할 때도 요구 사항에 따라 언어를 선택해야 한다.
⭐ 애플리케이션 시작하기
- spark-submit 명령으로 스파크 잡을 제출할 때 클라이언트 모드와 클러스터 모드 중 하나를 선택해야 한다.
- 드라이버와 익스큐터 간의 지연 시간을 줄이기 위해 클러스터 모드로 실행할 것을 추천한다.
🌽 애플리케이션 환경 설정하기
- 설정 분류
- 애플리케이션 속성
- 런타임 환경
- 셔플 동작 방식
- 스파크 UI
- 압축과 직렬화
- 메모리 관리
- 처리 방식
- 네트워크 설정
- 스케줄링
- 동적 할당
- 보안
- 암호화
- 스파크 SQL
- 스파크 스트리밍
- SparkR
- 스파크 시스템 설정 방법
- SparkConf 객체 사용
- 자바 시스템 속성
- 하드코딩된 환경 설정 파일
[출처] 스파크 완벽 가이드 (빌 체임버스, 마테이 자하리아 지음)