SlideShare a Scribd company logo
Spark: Running on a Cluster
아키텍트를 꿈꾸는 사람들
Cecil
Spark 애플리케이션: 분산 모드
마스터/슬레이브 구조
중앙 조정자(드라이버) + 분산 작업 노드(익스큐터)로 구성
드라이버와 익스큐터는 각각 독립된 자바 프로세스
분산모드 구성 요소 - 드라이버
• 사용자의 main 메소드가 실행되는 프로세스
• 주요 역할
• 사용자 프로그램을 태스크로 변환하여 클러스터로 전송
• 익스큐터에서의 개별 작업들을 위한 스케쥴링을 조정
드라이버의 역할
• 사용자 프로그램을 태스크로 변환
1. 연산들의 관계를 DAG(Directed Acyclic Graph) 생성
2. DAG를 물리적인 실행 계획으로 변환
•최적화를 거쳐 여러 개의 stage로 변환
•각 stage 는 여러개의 태스크로 구성
3. 단위 작업들을 묶어서 클러스터로 전송
• 익스큐터에서 태스크들의 스케쥴링
• 익스큐터들은 시작시 드라이버에 등록됨
• 드라이버는 항상 실행중인 익스큐터를 감시
• 태스크를 데이터 위치에 기반해 적절한 위치에서 실행이 되도록 함
• 4040 포트를 사용하여 웹 인터페이스로 실행 정보를 볼수 있음
태스크 변환 과정
분산모드 구성 요소 - 익스큐터
• 개별 태스크를 실행하는 작업 실행 프로세스
• 주요 역할
• 태스크 실행 후 결과를 드라이버로 전송
• 사용자 프로그램에서 캐시하는 RDD를 저장하기 위한 메모리 공간 제공
분산모드 구성 요소 - 클러스터 매니저
• 스파크는 익스큐터를 실행하기 위해 클러스터 매니저에 의존
• 지원 매니저
• Standalone, Hadoop Yarn, Apache Mesos
프로그램이 실행되는 단계
1. 사용자가 spark-submit을 사용해 애플리케이션 제출
2. spark-submit은 드라이버 프로그램을 실행하여 main 메소드 호출
3. 드라이버는 클러스터 매니저에서 익스큐터 실행을 위한 리소스 요청
4.클러스터 매니저는 익스큐터를 실행
5. 드라이버는 태스크 단위로 나누어 익스큐터에 전송
6. 익스큐터는 태스크를 실행
7. 애플리케이션이 종료되면 클러스터 매니저에게 리소스 반납
spark-submit
•클러스터 매니저에 스파크 애플리케이션을 제출하는 툴
•ex) spark-submit --master spark://host:7077 my_script.py
•주요 옵션
•master: 클러스터 매니저 설정
•deploy-mode: 드라이버 프로그램이 실행 되는 곳(client/cluster)
•class: (Java/Scala) main 함수가 들어 있는 클래스
•jars/py-files: 사용자 애플리케이션에 추가되어야할 라이브러리 목록
•executor-memory: 익스큐터 프로세스가 사용할 메모리
•driver-memory: 드라이버 프로세스가 사용할 메모리
deploy mode
•클라이언트 모드
•드라이버는 spark-submit의 일부로 실행됨
•드라이버 프로그램을 출력을 직접 확인 가능 (표준 출력등.)
•애플리케이션 실행하는 동안 작업 노드 들에 계속 연결되어 있어야 함
•클러스터 모드
•드라이버가 클러스터내의 작업 노드중 하나에서 실행됨
•실행 후 개입하지 않는 방식
•파이썬 언어는 지원하지 않음.
의존성 라이브러리의 패키징
•클러스터 머신들에 해당 라이브러리가 위치해야 함
•python
•클러스터의 python 패키지 매니저를 사용하여 직접 설치
•—py-files 옵션을 사용하여 라이브러리 제출
•java, scala
•—jars 옵션을 사용하여 jar 파일 제출
•복잡한 의존성을 가질 경우 전체적인 전이 의존성 그래프를 같이 제출해야 함
•maven, sbt 플러그인 사용하여 패키징
스파크 애플리케이션간 스케쥴링
•스파크 스케쥴링 정책
•자원이 고갈되지 않고 작업 부하의 우선 ���위에 따라 할당
•기본적으로 클러스터 매니저의 정책에 의존하여 스케쥴링
•익스큐터 요청시, 가능한 상태나 자원의 경쟁여부에 따라 적당한 수 할당
•대부분의 클러스터 매니저는 우선순위나 처리용량의 한계에 따른 작업 큐 기능이 있음
•페어 스케쥴러
•장시간 동작하는 애플리케이션이 작업 스케쥴링을 위해 우선 순위를 조정할 수 있게 함
클러스터 매니저
•공통
•익스큐터에서 가능한 많은 코어를 써서 적은 개수 익스큐터로 애플리케이션 실행
•분산된 데이터에서의 로컬리티 보장, 데이터가 있는 곳에서 태스크 실행
•Standalone
•설정: executor-memory, total-executor-cores
•익스큐터의 최대 개수 설정 만큼 퍼뜨리는 식으로 동작
•Hadoop Yarn
•설정: executor-memory, num-executers, executor-cores
•Apache mesos
•설정: executor-memory, total-executor-cores
클러스터 매니저 선택
•Standalone
•새로 배포 예정의 애플리케이션 <== 설정이 가장 쉬움
•Hadoop Yarn
•다른 애플리케이션과 같이 돌리거나 우수한 자원 스케쥴링이 필요한 경우
•Apache mesos
•스파크 쉘과 같은 대화형 어플리케이션 실행간 CPU 사용량을 세밀히 조정
•HDFS
•저장소의 빠른 접근을 위해 HDFS와 동일한 노드에 설치
Q&A
References
• Holden Karau, Andy Konwinski, Patrick Wendell, Matei
Zaharia. 러닝 스파크(박종용 옮김). 경기도 파주시: 제이펍(주), 2015
• Spark home page: http://spark.apache.org
• Understanding RDD operations: transformations and
actions: https://trongkhoanguyenblog.wordpress.com/
2014/11/27/understand-rdd-operations-transformations-and-
actions/
• spark overview: http://www.slideshare.net/LisaHua/spark-
overview-37479609

More Related Content

Cluster - spark

  • 1. Spark: Running on a Cluster 아키텍트를 꿈꾸는 사람들 Cecil
  • 2. Spark 애플리케이션: 분산 모드 마스터/슬레이브 구조 중앙 조정자(드라이버) + 분산 작업 노드(익스큐터)로 구성 드라이버와 익스큐터는 각각 독립된 자바 프로세스
  • 3. 분산모드 구성 요소 - 드라이버 • 사용자의 main 메소드가 실행되는 프로세스 • 주요 역할 • 사용자 프로그램을 태스크로 변환하여 클러스터로 전송 • 익스큐터에서의 개별 작업들을 위한 스케쥴링을 조정
  • 4. 드라이버의 역할 • 사용자 프로그램을 태스크로 변환 1. 연산들의 관계를 DAG(Directed Acyclic Graph) 생성 2. DAG를 물리적인 실행 계획으로 변환 •최적화를 거쳐 여러 개의 stage로 변환 •각 stage 는 여러개의 태스크로 구성 3. 단위 작업들을 묶어서 클러스터로 전송 • 익스큐터에서 태스크들의 스케쥴링 • 익스큐터들은 시작시 드라이버에 등록됨 • 드라이버는 항상 실행중인 익스큐터를 감시 • 태스크를 데이터 위치에 기반해 적절한 위치에서 실행이 되도록 함 • 4040 포트를 사용하여 웹 인터페이스로 실행 정보를 볼수 있음
  • 6. 분산모드 구성 요소 - 익스큐터 • 개별 태스크를 실행하는 작업 실행 프로세스 • 주요 역할 • 태스크 실행 후 결과를 드라이버로 전송 • 사용자 프로그램에서 캐시하는 RDD를 저장하기 위한 메모리 공간 제공
  • 7. 분산모드 구성 요소 - 클러스터 매니저 • 스파크는 익스큐터를 실행하기 위해 클러스터 매니저에 의존 • 지원 매니저 • Standalone, Hadoop Yarn, Apache Mesos
  • 8. 프로그램이 실행되는 단계 1. 사용자가 spark-submit을 사용해 애플리케이션 제출 2. spark-submit은 드라이버 프로그램을 실행하여 main 메소드 호출 3. 드라이버는 클러스터 매니저에서 익스큐터 실행을 위한 리소스 요청 4.클러스터 매니저는 익스큐터를 실행 5. 드라이버는 태스크 단위로 나누어 익스큐터에 전송 6. 익스큐터는 태스크를 실행 7. 애플리케이션이 종료되면 클러스터 매니저에게 리소스 반납
  • 9. spark-submit •클러스터 매니저에 스파크 애플리케이션을 제출하는 툴 •ex) spark-submit --master spark://host:7077 my_script.py •주요 옵션 •master: 클러스터 매니저 설정 •deploy-mode: 드라이버 프로그램이 실행 되는 곳(client/cluster) •class: (Java/Scala) main 함수가 들어 있는 클래스 •jars/py-files: 사용자 애플리케이션에 추가되어야할 라이브러리 목록 •executor-memory: 익스큐터 프로세스가 사용할 메모리 •driver-memory: 드라이버 프로세스가 사용할 메모리
  • 10. deploy mode •클라이언트 모드 •드라이버는 spark-submit의 일부로 실행됨 •드라이버 프로그램을 출력을 직접 확인 가능 (표준 출력등.) •애플리케이션 실행하는 동안 작업 노드 들에 계속 연결되어 있어야 함 •클러스터 모드 •드라이버가 클러스터내의 작업 노드중 하나에서 실행됨 •실행 후 개입하지 않는 방식 •파이썬 언어는 지원하지 않음.
  • 11. 의존성 라이브러리의 패키징 •클러스터 머신들에 해당 라이브러리가 위치해야 함 •python •클러스터의 python 패키지 매니저를 사용하여 직접 설치 •—py-files 옵션을 사용하여 라이브러리 제출 •java, scala •—jars 옵션을 사용하여 jar 파일 제출 •복잡한 의존성을 가질 경우 전체적인 전이 의존성 그래프를 같이 제출해야 함 •maven, sbt 플러그인 사용하여 패키징
  • 12. 스파크 애플리케이션간 스케쥴링 •스파크 스케쥴링 정책 •자원이 고갈되지 않고 작업 부하의 우선 순위에 따라 할당 •기본적으로 클러스터 매니저의 정책에 의존하여 스케쥴링 •익스큐터 요청시, 가능한 상태나 자원의 경쟁여부에 따라 적당한 수 할당 •대부분의 클러스터 매니저는 우선순위나 처리용량의 한계에 따른 작업 큐 기능이 있음 •페어 스케쥴러 •장시간 동작하는 애플리케이션이 작업 스케쥴링을 위해 우선 순위를 조정할 수 있게 함
  • 13. 클러스터 매니저 •공통 •익스큐터에서 가능한 많은 코어를 써서 적은 개수 익스큐터로 애플리케이션 실행 •분산된 데이터에서의 로컬리티 보장, 데이터가 있는 곳에서 태스크 실행 •Standalone •설정: executor-memory, total-executor-cores •익스큐터의 최대 개수 설정 만큼 퍼뜨리는 식으로 동작 •Hadoop Yarn •설정: executor-memory, num-executers, executor-cores •Apache mesos •설정: executor-memory, total-executor-cores
  • 14. 클러스터 매니저 선택 •Standalone •새로 배포 예정의 애플리케이션 <== 설정이 가장 쉬움 •Hadoop Yarn •다른 애플리케이션과 같이 돌리거나 우수한 자원 스케쥴링이 필요한 경우 •Apache mesos •스파크 쉘과 같은 대화형 어플리케이션 실행간 CPU 사용량을 세밀히 조정 •HDFS •저장소의 빠른 접근을 위해 HDFS와 동일한 노드에 설치
  • 15. Q&A
  • 16. References • Holden Karau, Andy Konwinski, Patrick Wendell, Matei Zaharia. 러닝 스파크(박종용 옮김). 경기도 파주시: 제이펍(주), 2015 • Spark home page: http://spark.apache.org • Understanding RDD operations: transformations and actions: https://trongkhoanguyenblog.wordpress.com/ 2014/11/27/understand-rdd-operations-transformations-and- actions/ • spark overview: http://www.slideshare.net/LisaHua/spark- overview-37479609