적절한(올바른) Spark 리소스 분배 또는 스케쥴링 하는 방법이 뭘까요?

조회수 435회

Spark를 통해 여러 python 스크립트를 병렬로 실행 하고 있습니다. 그런데 한 스크립트당 1코어씩 할당하여 동작시키다 보니까 4코어 짜리 서버에서 한 번에 수행 가능한 스크립트가 4개밖에 되질 않습니다. 좀 더 많이 병렬 처리하여 작업을 수행할 수 있을까요?

구성은 아래와 같습니다.

  1. 배포: standalone(서버 1대)
  2. worker instances : 디폴트(1개)
  3. 각 excutor memory : 2g
  4. 각 excutor core : 1개
  5. 한 번 실행 명령시 수행 되는 python 스크립트 개수 : 32개
  6. 현재 한 번에 수행 되는 스크립트 수 : 4개 (나머지 28개는 waiting상태)
  7. 서버 사양 : core 4개 , memory : 16g

메모리 상에서 처리해야하는 데이터 크기 자체는 크지 않습니다. 제일 커봐야 300mb 아래인데 코어수가 적다 보니까 저는 한 번에 4개씩만 돌리고 있네요... 혹시 더 좋은 리소스 분배 또는 스케쥴링 방법이 있을까요?

이미지

이미지

이미지

이미지

  • 코어가 4개이므로 병렬로 실행할 때 최적은 4개의 잡을 각 코어에서 병렬로 실행할때 가장 좋습니다. 코어가 4갠데 8개의 일을 시키면 컨텍스트 스위칭이 계속 발생하므로 느려지게 됩니다. 정영훈 2020.11.26 04:54
  • 아무래도 그렇겠죠? 김재민 2020.11.26 07:47
  • 혹시 Spark가 아니느 순수 Python에서는 sql context같은 기능은 없을까요? 김재민 2020.11.26 07:47
  • spark 가 scala 로 개발되었고 scala 는 함수형 언어입니다. sql context 의 어떤 기능을 말하는지는 모르겠으나 만약 함수형 언어와 같이 데이터를 집합으로 파이프라인 형태로 chainning 하여 사용하는 것을 말한다면 https://github.com/EntilZha/PyFunctional 이 프로젝트가 가장 유사합니다. 정영훈 2020.11.27 15:35

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)