본문 바로가기
논문

Pandas, Apache Spark 데이터 분석 수행 시간 비교

by 내가 진짜 유일한 2024. 9. 21.
  • 앞 포스팅에서 구축한 라즈베리파이 클러스터로 '에어코리아'에서 제공하는 미세먼지 데이터를 분석 작업을 수행하고, 짧은 수행 시간을 확인하였음
  • 이번 포스팅에선 라즈베리파이 클러스터에서 진행한 데이터 분석을 PC에서 Pandas로 같은 분석 작업을 수행하고, 수행 시간을 비교 해보고자 함

이전 포스팅 참고 2024.09.21 - [논문] - 라즈베리파이 클러스터 Spark DataFrame 에어코리아 미세먼지 데이터 분석

 

라즈베리파이 클러스터 Spark DataFrame 에어코리아 미세먼지 데이터 분석

이전 포스팅에서 다룬 Apache Spark & Hadoop 프레임워크를 라즈베리파이5 클러스터에 적용한 상태이다.2024.03.13 - [분류 전체보기] - Apache Spark & Hadoop 클러스터 구축 및 설정 Apache Spark & Hadoop 클러스터

dont-make-excuses.tistory.com


1. 실험에 사용 된 PC 사양과 라즈베리파이 사양 비교

  • 명확한 실험 환경 설정을 위해, 실험에 사용 된 PC 사양과 라즈베리파이의 사양을 비교할 필요가 있다
  • 라즈베리파이5의 비교군으로 사용 될 PC는 Latte Panda Sigma로 소형 PC이며, 내장 GPU를 사용하고 있다
  • 데이터 분석에 중요한 사양만 비교하였다
  Latte Panda Sigma PC Raspberry Pi 5
CPU Intel i5-1340P @4.6GHz Broadcom BCM2712@2.4GHz
Memory 16GB 8GB
Storage 512SSD 256GB SD card
Power DC 12~20V 5V/5A
Price 684$ 80$

 


2. PC - Pandas 데이터 분석 작업 실행

  • Pandas로 Spark DataFrame으로 했던 같은 분석 작업을 수행해보겠다

 

2.1. Pandas 이슈

  • 기존에 있던 2001_2022.csv 파일을 Pandas 데이터 프레임으로 변경하는 과정에서 메모리 사용량 초과로 커널이 재시작 되는 현상이 발생했다
  • 때문에 시작부터 진행이 안되는 상황이다
  • 혹시 2001_2022.csv 로 하나로 통합 된 파일을 한번에 DF로 변환하려고 해서 커널 재시작 현상이 발생한 걸까 해서
  • 통합하기 전의 csv 파일들을 각각 따로 DF로 변환하려고 해봤지만 마찬가지로 커널 재시작 현상이 발생

Pandas DataFrame으로 가져오는 과정에서 커널 재시작 발생
분리된 csv 파일을 DF로 변환

2.2. 원인 분석

  • Python Pandas에서 이런 현상이 발생하는 이유는 Python이 싱글 스레드를 가용하고, in-memory 특성으로 모든 데이터를 메모리에 올려서 사용하기 때문에 빠르다는 장점이 있다
  • 하지만 하드웨어의 메모리 리소스 보다 데이터의 크기가 크다면 이렇게 커널이 재시작 되는 현상이 발생한다
  • 이를 더욱 상세하게 보기 위해 모니터링 시스템으로 확인하고자 했다

 

2.2.1. PC 리소스 모니터링 - htop

  • PC의 리소스 모니터링을 하기 위해 htop 명령어로 모니터링을 확인했음
  • 확인 결과 싱글 스레드를 사용하고, 메모리 사용량이 점점 많아지다, 결국 스왑메모리까지 전부 사용하고 커널 재시작 발생

htop 명령어로 컴퓨터 리소스 모니터링 초반
약 11GB 사용
15GB 전부 사용하고 스왑 메모리 사용 진입
스왑 메모리까지 전부 사용하는 모습

  • 좀 더 명확한 모니터링을 위해 모니터링 시스템을 설치 할 필요가 있었음

 

2.2.2. 시스템 모니터링을 위한 Promethus, Grafana, node exporter 설치

  • 컴퓨터 시스템 모니터링을 하기 위해 Promethus, Grafana, node exporter을 설치하였음
  • 자세한 설치 방법은 다음에 다루기로 하고 시계열 그래프로 메모리 사용량을 모니터링 한 결과

Grafana를 사용하여 메모리 사용량 모니터링한 결과

  • Grafana로 메모리 사용량을 모니터링 한 결과, 메모리 사용량(노란색 라인)이 점점 증가하다 한계치(초록색 라인)에 근접해서 결국 커널 재시작 현상이 발생하여 메모리를 모두 반환한 것을 그래프로 확인하였다
  • 그렇다면 라즈베리파이 클러스터는 어떨까?

 

2.2.3. 라즈베리파이 클러스터 메모리 사용량 모니터링

라즈베리파이 클러스터에서 Spark DataFrame으로 데이터 분석할 때의 메모리 사용량

  • 라즈베리파이 클러스터에서도 Promethus, node exporter, Grafana를 설치하고 데이터 분석 작업을 하는 동안 메모리 사용량을 확인 해보았다
  • 2~3.5GB 안으로 메모리를 사용하면서 분석 작업을 수행하는 것을 확인하였다
  • PC에서 Spark를 실행해도 마찬가지로 메모리 사용량이 적은 것을 확인하였음 (PC에서 Spark을 실행할 때는 단일 노드로 실행 했기 때문에, Spark Standalone으로 설정하여 실행)
  • 심지어 단일 라즈베리파이5로도 데이터 분석을 수행한 것을 확인할 수 있었다
  • Spark와 Python Pandas의 이러한 메모리 사용량 차이는 여러가지 이유가 있을 수 있는 데,
  • Lazy Evaluation, Spark의 In-Memory Computing 방식(메모리 부족 시에 데이터를 디스크로 자동으로 넘기고, 다시 메모리로 가져오기도 함), Tungsten 엔진, Disk Spill & Shuffle Memory Management 등의 이유가 있을 수 있다

2.3. 데이터 분석에 사용되는 데이터 크기 줄이기

  • Pandas로 데이터 분석을 하고 Spark와 수행 성능을 비교해야 하는데, 메모리 사용량 문제로 진행이 되지 않았기 때문에 데이터 크기를 줄여서 분석을 하고자 한다

상대적으로 작은 크기의 2015_2018 년도 csv 파일을 생성

  • 2015~2018년의 데이터를 통합해서 약 1.1GB 정도 하는 크기의 데이터를 통합해서 csv파일로 만들었다
  • 이제 이 데이터를  Pandas와 Spark으로 분석해서 수행 성능 시간을 비교하고자 한다

3. Pandas와 Spark 데이터 분석 수행 시간 비교

  • Pandas로 데이터 분석을 수행한 코드는 다음에 첨부하겠다

 

3.1. 2001~2022년(약7.1GB) 데이터 분석 수행 성능 비교

  • 2001~2022년 데이터 분석 수행 비교군은 단일 라즈베리파이, 라즈베리파이 클러스터, PC Spark, PC Pandas 4가지 비교군을 선정하였다
  • Single Raspverry 
  • 단위는 초(second) 이다
  Single Raspberry Pi 5 Raspberry Pi 5 Cluster PC Spark PC Pandas
Job 1 95.787 34.883  14.993  측정 불가
Job 2 155.053  28.575  19.077 -
Job 3 222.492  40.920  26.783  -
Job 4 266.854 47.808  30.276  -
Job 5 457.410  93.119  61.616  -
  • 이 표를 그래프로 그려보면

2001~2022년 데이터 분석 수행 성능 비교 그래프 (단위: 초)

  • Single Raspberry Pi - Spark 환경에서 데이터를 분석했을 때, 가장 많은 시간이 소요 되었지만 에러나 이슈 없이 데이터 분석 수행을 완료하였음
  • Raspberry Pi Cluster - Spark 환경과 PC - Spark 환경에서는 데이터 분석 수행 성능이 1.5~2.3배 차이를 보였다
  • PC - Pandas 환경에선 앞에서 다뤘듯이, 메모리 사용량 초과로 데이터 분석이 불가하였다

 

3.2. 2015~2018년 (약1.1GB) 데이터 분석 수행 시간 비교

  Single Raspberry Pi 5 Raspberry Pi 5 Cluster PC Spark PC Pandas
Job 1 13.566 12.893  2.035  0.324
Job 2 22.570  11.202  3.283  0.107
Job 3 30.470 12.174 4.349  0.879
Job 4 33.582  14.609  4.808  0.43
Job 5 63.853 31.962  9.967  0.258
  • 단위: 초

2015~2018년 데이터 분석 수행 성능 비교 그래프 (단위: 초)

  • 2015~2018년 데이터 분석 작업 실행 결과, 2001~2022년 데이터 분석 결과와 다르게
  • Single Raspiberry Pi와 Raspberry Pi Cluster와 수행 성능 차이가 크지 않았음을 확인할 수 있었다
  • 또한, Raspberry Pi Cluster와 PC - Spark의 차이가 약 3~6.4배 정도 차이로 늘어났다
  • 같은 PC에서 Spark와 Pandas로 데이터 분석 작업을 수행 했을 때 Pandas가 최소 4.9배에서 최대 38.6배 우수한 성능을 보였다

4. 데이터 분석 수행 시간 비교 결과

  • 데이터의 크기가 작거나 PC의 메모리가 충분한 경우 PC - Pandas 환경의 수행 성능이 제일 좋았기 때문에, 가장 적합함을 확인할 수 있었다
  • 특히, 동일한 사양의 PC에서 Pandas와 Spark를 사용했을 때, Pandas가 4.9~38.6배 우수한 성능을 보였다
  • 반면, 데이터의 크기가 매우 크거나, 하드웨어의 리소스가 제한된 환경에서는 Pandas에서 메모리 사용량 초과로 커널이 재시작 되는 현상이 발생되었으며, Spark는 단일 라즈베리파이로도 데이터 분석 작업을 완료했기 때문에 Spark를 사용하는 것이 적합함을 보였다
  • 또한, 데이터의 크기가 증가함에 따라 1.1GB -> 7.1GB 라즈베리파이 클러스터와 PC - Spark의 성능 차이가 3~6.4배 -> 1.5~2.3배로 감소하는 것을 확인하였다
  • 데이터의 크기가 더욱 증가하면 성능 차이가 더 줄어들 것으로 예상할 수 있다
  • 이로써, 라즈베리파이 클러스터로도 대용량 데이터 처리가 가능함을 확인할 수 있었다
  •  

이러한 분석 작업을 2024년 01~04월에 수행하였고, 기록으로 남겨둔 자료를 통해 블로그를 작성해보았다.

다음 포스팅에선 했던 실험들을 통해 얻은 결과를 논문으로 작성하여 KCC2024(한국종합컴퓨터학술대회)에 투고 하여 ICC 제주에서 논문 발표를 하게 된 것을 포스팅 하겠다.