내일배움캠프

[내일배움캠프] TIL 44일차 26.04.03(금)

nom_de_plume 2026. 4. 3. 21:33

Spark를 이용한 빅데이터 분석 2-1

 

 

 

병렬 처리와 분산 처리

 

병렬 처리

  • 여러개를 시키도록 나눠주는 것
  • 주로 단일 머신 내의 여러 코어나 프로세서를 사용하여 작업을 동시에 수행하는 것
    • Multiprocessing이나 joblib이 흔히 사용
    • sklearn의 njobs가 이를 제어하는 기능

분산처리

  • 네트워크를 통해 연결된 여러 대의 컴퓨터(노드)가 각각의 작업을 수행하는 것
    • Spark를 포함해 Ray, Desk 등의 라이브러리 사용 가능

** CPU : 여러 개의 코어로 이루어져 있고, 파이썬은 기본적으로 1개 사용

 

 

CPU vs GPU

 

CPU

  • 기본적으로 스파크가 사용

GPU

  • GPU 기반의 병렬처리도 발달
  • LLM의 발달로 GPU에 대한 수요가 크게 증가
  • 프레임워크가 다름
  • Spark도 GPU 지원

 

병렬 처리 vs Vectorize

  • 전처리 단계에서 삶의 질을 크게 향상할 수 있는 방법
  • 한 기기의 메모리 안에서 처리가 가능한 규모라면, 굳이 Spark를 사용하는 것보다는 연산을 최적화하는 것이 일반적으로 더 나음
  • Numpy(Pandas 포함)는 벡터화 연산을 통해 단순 반복작업을 굉장히 빠르게 처리 가능
    • 최소 수십, 최대 수백배 이상 속도의 차이 날 수 있음
    • 특히 for문의 순회를 최적화하는데 많이 사용
    • 스파크에서도 개별 머신은 벡터화를 수행하여 속도 최적화 가능

 

 

병렬 처리의 기술

 

Pickling과 Job broker

  • 스파크를 포함해 분산/병렬처리 도구들은 내부에서 데이터를 Picklie로 변환하여 송수신
  • 어떤 프로세서에 어떤 데이터를 보내고, 어떤 작업을 시킬 것이며, 어떻게 취합할 것인지에 대한 매니저가 필요하며 이를 Job broker라고 칭함
    • 스파크에서는 클러스터 매니저(Cluster Manager)가 Yarn, Mesos, Kube 등 이용
    • 병렬 처리에서는 명시적으로 드러나는 매니저는 없지만, 내부적으로는 해당 기능이 필요
    • Airflow의 경우 Celery나 Rabbit MQ 등 사용 가능

스레드와 프로세스

  • 프로세스: 독립된 메모리 공간
  • 스레드: 같은 메모리 공간을 공유
  • 파이썬은 글로벌 인터프리터 락(GIL, Global Interpreter Lock) 때문에 한 번에 하나의 스레드만 파이썬 바이트코드 실행 가능
    • 파이썬은 멀티프로세싱 일반적

Jolib과 머신러닝

  • 파이썬에서 병렬처리 위해 다양한 패키지 제공
  • 가장 손쉽고 안정적으로 쓸 수 있는 패키지는 Joblib
    • Sklearn이 내부에서 joblib 사용
  • 단점
    • k개의 멀티프로세싱 할 때 k개 완료 되어야 다음 순회로 넘어감
      • 20개의 작업을 4개의 프로세서로 멀티프로세싱을 한다면 1,2,3,4번이 모두 완료되어야 5,6,7,8번 작업으로 넘어간다는 것
      • 이로 인한 약간의 비효율 발생 가능
    • 그 외 대안으로는 multiprocessing 패키지도 많이 사용