이 장은 스파크를 다운로드 해보고 소규모 데이터셋으로 간단한 애플리케이션을 만든다.
spark download! p.20 참고
bin : 스파크 셸들을 포함해서(spark-sql, pyspark, spark-shell, sparkR) 스파크와 상호 작용할 수 있는 대부분의 스크립트르 갖고 있다.
sbin : 다양한 배포 모드에서 클러스터의 스파크 컴포넌트들을 시작하고 중지하기 위한 관리 목적의 스크립트.
kubernetes : 도커 이미지 제작을 위한 Dockerfile들을 담고 있다.
data : MLlib, 정형화 프로그래밍, GraphX 등에서 입력으로 사용되는 *.txt 파일이 있다.
examples : 입문 예제 코드들과 이해하기 좋은 문서들이 있는 디렉토리
skip
애플리케이션 : API를 써서 스파크 위에서 돌아가는 사용자 프로그램, 드라이버 프로그램과 클러스터의 샐행기로 이루어짐
SparkSession : 스파크 코어 기능들과 상호 작용할 수 있는 진입점을 제공, 그 API로 프로그래밍을 할 수 있게 해주는 객체
잡(job) : 스파크 액션(save(), collect())에 대한 응답으로 생성되는 여러 태스크로 이루어진 병렬 연산
스테이지(stage) : 각 잡은 스테이지라 불리는 서로 의존성을 가지는 다수의 태스크 모음으로 나뉜다
태스크(task) : 스파크 이그제큐터로 보내지는 작업 샐행의 가장 기본적인 단위
분산 데이터의 스파크 연산은 트랜스모이션과 액션으로 구분된다.
계보(lineage)라는 곳에 따로 저장하고 트랜스포메이션은 가장 마지막에 실행되며, 액션은 먼저 수행된다. 트랜스포메이션이 지연 연산되는 이유는 마지막에 다른 트랜스포메이션 연산과 합치거나 순서를 정해 최적화하기 위함이다.
의존성으로 좁은, 넓은 트랜스포메이션을 나눌 수 있다.
filter()나 contains() 같은 트래스포메이션들은 하나의 입력 파티션만 연산하여 하나의 결과만 내놓기 때문에 의존성이 크지 않아 좁은 트랜스포메이션이다.
반면 groupBy()나 orderBy()는 다른 파티션으로부터 입력 받아 연산하고 여러 결과를 내놓기 때문에 넓은 트랜스포메이션이다.
스파크 UI, GUI를 통해 스파크 애플리케이션 상태를 볼 수 있다.